1
wankeda
3 天以前 be438dd071400936c44a1425ec8d886f63c83329
1

1
已删除15个文件
已修改48个文件
已添加27个文件
已重命名1个文件
13157 ■■■■■ 文件已修改
WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.strings.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3c4347ca-a279-4129-b95c-75e258a7b2a3.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/459e40f4-6e41-4ac5-9f21-73bd883fc6e3.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/4d81bbd0-9937-4504-ab33-b2a82c052bb3.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/607b4f5b-295f-4013-873d-38da4a557fe3.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/8f3f641e-6174-4a31-af4f-2610293d1398.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ae39b416-fdd4-4e4b-bc6d-ce8f04c0ff77.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/c93592a5-56ad-4ad1-abef-5511ac66e3b1.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/dafb590f-b88f-486c-a442-d06f2790a234.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f8062f5a-35bb-4cb1-87f1-5ec80b74c205.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/CommonConveyorLineJob_BC.cs 407 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/CommonStackerCraneJob_BC.cs 358 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/辅料仓/CommonConveyorLineJob_FL.cs 407 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/辅料仓/CommonStackerCraneJob_FL.cs 358 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/extension/basic/palletTypeInfo.js 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/router/viewGird.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/views/basic/palletTypeInfo.vue 226 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.metadata.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.projects.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.strings.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/DesignTimeBuild/.dtbcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/486ac3e4-dcd1-4ae8-9cbb-0e0bef797122.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/6504b712-6337-442d-9a51-3fcc76af9ae9.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/842d2312-f96a-4640-bb7d-29293f202db6.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/b0c40d1d-a1d5-4d22-9554-68c90ed643aa.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f632678d-15fb-4e3b-adb6-666f4762b82e.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.futdcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.suo 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json 685 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json 636 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/HierarchyCache.v1.txt 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/PalletTypeInfoRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/PalletTypeInfoService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_BC.cs 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskEnumHelper.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusGroup.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeGroup.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/LocationEnum.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/OrderEnum.cs 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/PalletTypeEnum.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/StockEnum.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/TaskStatusEnum.cs 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/WarehouseEnum.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IBasicRepository.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IPalletTypeInfoRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IPalletTypeInfoService.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundService.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordSetvice.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockInfoRepository.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_PalletTypeInfo.cs 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder_Hty.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfo.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_RecordService/Service/LocationStatusChangeRecordSetvice.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs 357 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 1821 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/PalletTypeInfoController.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/AOPLogEx_1739464414.log 1968 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/AOPLogEx_1739527794.log 1856 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/AOPLogEx_1739531468.log 1108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/AOPLog_1739464413.log 396 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/AOPLog_1741358219.log 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/全局异常错误日志_1741356738.log 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
吉安项目资料.zip 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v9.bin
Binary files differ
WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v9.bin
Binary files differ
WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.strings.v9.bin
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3c4347ca-a279-4129-b95c-75e258a7b2a3.vsidx
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/459e40f4-6e41-4ac5-9f21-73bd883fc6e3.vsidx
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/4d81bbd0-9937-4504-ab33-b2a82c052bb3.vsidx
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/607b4f5b-295f-4013-873d-38da4a557fe3.vsidx
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/8f3f641e-6174-4a31-af4f-2610293d1398.vsidx
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ae39b416-fdd4-4e4b-bc6d-ce8f04c0ff77.vsidx
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/c93592a5-56ad-4ad1-abef-5511ac66e3b1.vsidx
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/dafb590f-b88f-486c-a442-d06f2790a234.vsidx
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f8062f5a-35bb-4cb1-87f1-5ec80b74c205.vsidx
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json
@@ -3,36 +3,48 @@
  "WorkspaceRootPath": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\\u8F85\u6599\u4ED3\\commonstackercranejob_fl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\\u8F85\u6599\u4ED3\\commonstackercranejob_fl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\\u8F85\u6599\u4ED3\\commonconveyorlinejob_fl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\\u8F85\u6599\u4ED3\\commonconveyorlinejob_fl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\spestackercranejob\\rgvcranetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\spestackercranejob\\rgvcranetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\spestackercranejob\\spestackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\spestackercranejob\\spestackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\logjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\logjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\spestackercranejob\\rgvcranetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\spestackercranejob\\rgvcranetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\spestackercranejob\\getstackerobject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\spestackercranejob\\getstackerobject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\conveyorlinetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\conveyorlinetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\dbline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -41,10 +53,6 @@
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\stackercranetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\stackercranetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\logjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\logjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\testjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -62,58 +70,50 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 2,
          "SelectedChildIndex": 1,
          "Children": [
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "appsettings.json",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwsAAABQAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
              "WhenOpened": "2025-02-27T11:09:10.397Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAKMCAAAAAAAAAAAuwKgCAABWAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T08:26:03.567Z",
              "EditorCaption": ""
              "$type": "Bookmark",
              "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "CommonStackerCraneJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ViewState": "AgIAAFQAAAAAAAAAAAAIwGgAAAA4AAAAAAAAAA==",
              "Title": "CommonStackerCraneJob_FL.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonStackerCraneJob_FL.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonStackerCraneJob_FL.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonStackerCraneJob_FL.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonStackerCraneJob_FL.cs",
              "ViewState": "AgIAAKYAAAAAAAAAAAAUwLcAAAAZAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:33:13.986Z",
              "WhenOpened": "2025-06-23T02:34:35.139Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "DocumentIndex": 2,
              "Title": "CommonConveyorLineJob_FL.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonConveyorLineJob_FL.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonConveyorLineJob_FL.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonConveyorLineJob_FL.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonConveyorLineJob_FL.cs",
              "ViewState": "AgIAAC4AAAAAAAAAAAAAwDYAAAA5AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-23T02:32:17.943Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "Title": "RgvCraneTaskCommand.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SpeStackerCraneJob\\RgvCraneTaskCommand.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SpeStackerCraneJob\\RgvCraneTaskCommand.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SpeStackerCraneJob\\RgvCraneTaskCommand.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\SpeStackerCraneJob\\RgvCraneTaskCommand.cs",
              "ViewState": "AgIAADwAAAAAAAAAAAA0wEQAAAAeAAAAAAAAAA==",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAADwAAAAmAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:32:35.926Z"
              "WhenOpened": "2025-02-12T06:32:35.926Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
@@ -123,26 +123,27 @@
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ViewState": "AgIAAFEAAAAAAAAAAAAswGQAAABUAAAAAAAAAA==",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAC4AAAAJAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:32:03.132Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "DocumentIndex": 4,
              "Title": "SpeStackerCraneJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SpeStackerCraneJob\\SpeStackerCraneJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SpeStackerCraneJob\\SpeStackerCraneJob.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SpeStackerCraneJob\\SpeStackerCraneJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\SpeStackerCraneJob\\SpeStackerCraneJob.cs",
              "ViewState": "AgIAACUAAAAAAAAAAADwv0IAAAAZAAAAAAAAAA==",
              "ViewState": "AgIAAMQAAAAAAAAAAAAcwPYAAAARAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:32:38.914Z"
              "WhenOpened": "2025-02-12T06:32:38.914Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "DocumentIndex": 7,
              "Title": "GetStackerObject.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SpeStackerCraneJob\\GetStackerObject.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SpeStackerCraneJob\\GetStackerObject.cs",
@@ -150,23 +151,36 @@
              "RelativeToolTip": "WIDESEAWCS_Tasks\\SpeStackerCraneJob\\GetStackerObject.cs",
              "ViewState": "AgIAANYAAAAAAAAAAAAAAEMAAAAyAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:32:24.238Z"
              "WhenOpened": "2025-02-12T06:32:24.238Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "DocumentIndex": 9,
              "Title": "ConveyorLineTaskCommand.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineTaskCommand.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineTaskCommand.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineTaskCommand.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineTaskCommand.cs",
              "ViewState": "AgIAAB4AAAAAAAAAAAAIwDIAAAAWAAAAAAAAAA==",
              "ViewState": "AgIAAB4AAAAAAAAAAAAWwDMAAAATAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:32:08.822Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "DocumentIndex": 10,
              "Title": "appsettings.json",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwkAAABAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
              "WhenOpened": "2025-02-27T11:09:10.397Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 11,
              "Title": "DBLine.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\DBLine.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\DBLine.cs",
@@ -178,7 +192,46 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 9,
              "DocumentIndex": 5,
              "Title": "LogJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\LogJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\LogJob.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\LogJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\LogJob.cs",
              "ViewState": "AgIAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:33:41.249Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAKkAAAAAAAAAAAAEwJsAAAAiAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T08:26:03.567Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "CommonStackerCraneJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAN4AAAAUAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:33:13.986Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "Title": "StackerCraneTaskCommand.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneTaskCommand.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneTaskCommand.cs",
@@ -190,19 +243,7 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 10,
              "Title": "LogJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\LogJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\LogJob.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\LogJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\LogJob.cs",
              "ViewState": "AgIAAD8AAAAAAAAAAAAIwAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:33:41.249Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 11,
              "DocumentIndex": 13,
              "Title": "TestJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\TestJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\TestJob.cs",
@@ -214,7 +255,7 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "DocumentIndex": 14,
              "Title": "ConveyorLineDBName.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
@@ -3,36 +3,60 @@
  "WorkspaceRootPath": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\conveyorlinetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\conveyorlinetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\spestackercranejob\\rgvcranetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\spestackercranejob\\rgvcranetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\spestackercranejob\\spestackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\spestackercranejob\\spestackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\spestackercranejob\\rgvcranetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\spestackercranejob\\rgvcranetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\spestackercranejob\\getstackerobject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\spestackercranejob\\getstackerobject.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\conveyorlinetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\conveyorlinetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\conveyorlinedbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\conveyorlinedbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\\u677F\u6750\u4ED3\\commonstackercranejob_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\\u677F\u6750\u4ED3\\commonstackercranejob_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\\u677F\u6750\u4ED3\\commonconveyorlinejob_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\\u677F\u6750\u4ED3\\commonconveyorlinejob_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\\u8F85\u6599\u4ED3\\commonconveyorlinejob_fl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\\u8F85\u6599\u4ED3\\commonconveyorlinejob_fl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\\u8F85\u6599\u4ED3\\commonstackercranejob_fl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\\u8F85\u6599\u4ED3\\commonstackercranejob_fl.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\logjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\logjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\dbline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -43,16 +67,8 @@
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\stackercranetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\logjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\logjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\testjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\testjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\conveyorlinedbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\conveyorlinedbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -62,32 +78,62 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 0,
          "SelectedChildIndex": 6,
          "Children": [
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAJcAAAAAAAAAAAAEwLkAAAArAAAAAAAAAA==",
              "DocumentIndex": 7,
              "Title": "CommonStackerCraneJob_BC.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\CommonStackerCraneJob_BC.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\CommonStackerCraneJob_BC.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\CommonStackerCraneJob_BC.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\CommonStackerCraneJob_BC.cs",
              "ViewState": "AgIAABUAAAAAAAAAAAAAACUAAAA3AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T08:26:03.567Z",
              "WhenOpened": "2025-07-11T01:45:11.332Z",
              "EditorCaption": ""
            },
            {
              "$type": "Bookmark",
              "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "CommonConveyorLineJob_BC.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\CommonConveyorLineJob_BC.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\CommonConveyorLineJob_BC.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\CommonConveyorLineJob_BC.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\CommonConveyorLineJob_BC.cs",
              "ViewState": "AgIAADsAAAAAAAAAAAAIwCgAAAA3AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-11T01:45:35.556Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "CommonStackerCraneJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ViewState": "AgIAAFoAAAAAAAAAAAAIwGgAAAAxAAAAAAAAAA==",
              "DocumentIndex": 10,
              "Title": "CommonStackerCraneJob_FL.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonStackerCraneJob_FL.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonStackerCraneJob_FL.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonStackerCraneJob_FL.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonStackerCraneJob_FL.cs",
              "ViewState": "AgIAAJoAAAAAAAAAAAAUwLcAAAAZAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:33:13.986Z",
              "WhenOpened": "2025-06-23T02:34:35.139Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 9,
              "Title": "CommonConveyorLineJob_FL.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonConveyorLineJob_FL.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonConveyorLineJob_FL.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonConveyorLineJob_FL.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\\u8F85\u6599\u4ED3\\CommonConveyorLineJob_FL.cs",
              "ViewState": "AgIAADgAAAAAAAAAAAAIwDAAAABBAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-23T02:32:17.943Z",
              "EditorCaption": ""
            },
            {
@@ -98,39 +144,40 @@
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SpeStackerCraneJob\\RgvCraneTaskCommand.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SpeStackerCraneJob\\RgvCraneTaskCommand.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\SpeStackerCraneJob\\RgvCraneTaskCommand.cs",
              "ViewState": "AgIAAB0AAAAAAAAAAADwvzwAAAAmAAAAAAAAAA==",
              "ViewState": "AgIAADwAAAAAAAAAAAA0wDwAAAAmAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:32:35.926Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "DocumentIndex": 0,
              "Title": "CommonConveyorLineJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ViewState": "AgIAAFIAAAAAAAAAAAAMwGQAAABUAAAAAAAAAA==",
              "ViewState": "AgIAAFcAAAAAAAAAAIA4wG8AAABRAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:32:03.132Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "DocumentIndex": 2,
              "Title": "SpeStackerCraneJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SpeStackerCraneJob\\SpeStackerCraneJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SpeStackerCraneJob\\SpeStackerCraneJob.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SpeStackerCraneJob\\SpeStackerCraneJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\SpeStackerCraneJob\\SpeStackerCraneJob.cs",
              "ViewState": "AgIAACUAAAAAAAAAAADwv0IAAAAZAAAAAAAAAA==",
              "ViewState": "AgIAAFYAAAAAAAAAAAAIwPYAAAARAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:32:38.914Z"
              "WhenOpened": "2025-02-12T06:32:38.914Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "DocumentIndex": 4,
              "Title": "GetStackerObject.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SpeStackerCraneJob\\GetStackerObject.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SpeStackerCraneJob\\GetStackerObject.cs",
@@ -138,36 +185,37 @@
              "RelativeToolTip": "WIDESEAWCS_Tasks\\SpeStackerCraneJob\\GetStackerObject.cs",
              "ViewState": "AgIAANYAAAAAAAAAAAAAAEMAAAAyAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:32:24.238Z"
              "WhenOpened": "2025-02-12T06:32:24.238Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "DocumentIndex": 5,
              "Title": "ConveyorLineTaskCommand.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineTaskCommand.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineTaskCommand.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineTaskCommand.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineTaskCommand.cs",
              "ViewState": "AgIAACEAAAAAAAAAAAASwDMAAAATAAAAAAAAAA==",
              "ViewState": "AgIAACUAAAAAAAAAAAAUwDMAAAATAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:32:08.822Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "DocumentIndex": 13,
              "Title": "appsettings.json",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwsAAABQAAAAAAAAAA==",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwkAAABAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
              "WhenOpened": "2025-02-27T11:09:10.397Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "DocumentIndex": 14,
              "Title": "DBLine.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\DBLine.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\DBLine.cs",
@@ -179,7 +227,44 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 9,
              "DocumentIndex": 11,
              "Title": "LogJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\LogJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\LogJob.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\LogJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\LogJob.cs",
              "ViewState": "AgIAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:33:41.249Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAKkAAAAAAAAAAAAEwJsAAAAiAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T08:26:03.567Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "CommonStackerCraneJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ViewState": "AgIAAKgAAAAAAAAAAAAUwN4AAAAUAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:33:13.986Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 15,
              "Title": "StackerCraneTaskCommand.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneTaskCommand.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneTaskCommand.cs",
@@ -191,19 +276,7 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 10,
              "Title": "LogJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\LogJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\LogJob.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\LogJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\LogJob.cs",
              "ViewState": "AgIAAD8AAAAAAAAAAAAIwAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:33:41.249Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 11,
              "DocumentIndex": 16,
              "Title": "TestJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\TestJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\TestJob.cs",
@@ -215,7 +288,7 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "DocumentIndex": 6,
              "Title": "ConveyorLineDBName.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
@@ -223,7 +296,8 @@
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-12T06:32:07.46Z"
              "WhenOpened": "2025-02-12T06:32:07.46Z",
              "EditorCaption": ""
            }
          ]
        }
WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/°å²Ä²Ö/CommonConveyorLineJob_BC.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,407 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_Tasks.ConveyorLineJob
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using Quartz;
using SqlSugar;
using System.Threading.Tasks;
using WIDESEA_Common.Log;
using WIDESEAWCS_Core;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Model.Models.System;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class CommonConveyorLineJob_BC : IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly IRouterService _routerService;
        private readonly IPlatformStationService _PlatformStationService;
        private readonly IMapper _mapper;
        public CommonConveyorLineJob_BC(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, IPlatformStationService platformStation)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _routerService = routerService;
            _mapper = mapper;
            _PlatformStationService = platformStation;
        }
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
                if (conveyorLine != null)
                {
                    //读取输送线入库申请
                    RequestInbound(conveyorLine);
                    //读取堆垛机入库站台信号
                    RequestInSCLine(conveyorLine);
                    //堆垛机站台进行下发输送线任务
                    RequestOutSCLine(conveyorLine);
                    //读取Rgv出库口任务
                    RequestOutbound(conveyorLine);
                    //读取出库站台,获取出库口更新出库任务
                    RequestOutAdd(conveyorLine);
                }
            }
            catch (Exception ex)
            {
                //Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
            }
            return Task.CompletedTask;
        }
        /// <summary>
        /// è¾“送线请求入库
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        public void RequestInbound(CommonConveyorLine conveyorLine)
        {
            List<PlatformStation> platformsList = _PlatformStationService.GetPlatformList(conveyorLine.DeviceCode);
            foreach (var RGVStationitem in platformsList)
            {
                ConveyorLineCommand command = lineCommand(conveyorLine,RGVStationitem.Station_code);
                if (command != null)
                {
                    if (command.Online)
                    {
                        if (command.STB)
                        {
                            WebResponseContent content = _taskService.RequestWMSTask(command.BarCode, RGVStationitem.Station_code.ToString(), command.GoodsType);
                            if (content.Status)
                            {
                                DeviceProDTO? deviceProDTO6 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == RGVStationitem.Station_code.ToString() && x.DeviceProParamName == "ACK" && x.DeviceProParamType == "DeviceCommand");
                                if (deviceProDTO6 != null)
                                {
                                    conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)true);
                                    wcsWriteLog(RGVStationitem.Station_code.ToString(), "正常日志", $"{RGVStationitem.Station_code}写入输送线信号,模块{deviceProDTO6.DeviceProAddress}:true");
                                }
                                else
                                {
                                    wcsWriteLog(RGVStationitem.Station_code.ToString(), "错误日志", $"未找到对于的读取模块{RGVStationitem.Station_code}");
                                }
                            }
                            else
                            {
                                wcsWriteLog(RGVStationitem.Station_code.ToString(), "错误日志", $"入库站台:{RGVStationitem.Station_code},错误信息:{content.Message}");
                            }
                        }
                        else
                        {
                            DeviceProDTO? deviceProDTO6 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == RGVStationitem.Station_code.ToString() && x.DeviceProParamName == "ACK" && x.DeviceProParamType == "DeviceCommand");
                            if (deviceProDTO6 != null)
                            {
                                conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)false);
                                wcsWriteLog(RGVStationitem.Station_code.ToString(), "正常日志", $"{RGVStationitem.Station_code}写入输送线信号,模块{deviceProDTO6.DeviceProAddress}:false");
                            }
                            else
                            {
                                wcsWriteLog(RGVStationitem.Station_code.ToString(), "错误日志", $"未找到对于的读取模块{RGVStationitem.Station_code}");
                            }
                        }
                    }
                    else
                    {
                        wcsWriteLog(RGVStationitem.Station_code.ToString(), "错误日志", $"该站台{RGVStationitem.Station_code}不处于联机状态");
                    }
                }
            }
        }
        /// <summary>
        /// è¯»å–堆垛机入库站台信息,进行任务完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        public void RequestInSCLine(CommonConveyorLine conveyorLine)
        {
            List<string> platformsList = _PlatformStationService.GetPlatIn(conveyorLine.DeviceCode);    //读取站台信息
            foreach (var RGVStationitem in platformsList)
            {
                ConveyorLineCommand command = lineCommand(conveyorLine, RGVStationitem);
                if (command != null)
                {
                    if (command.Online && command.STB && command.TaskNo != 0)
                    {
                        //写入反馈
                        DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == RGVStationitem && x.DeviceProParamName == "ACK" && x.DeviceProParamType == "DeviceCommand");
                        if (conveyorLine.Communicator.Write(deviceProDTO.DeviceProAddress, (bool)true))
                        {
                            DeviceProDTO? deviceProDTO2 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == RGVStationitem && x.DeviceProParamName == "STB" && x.DeviceProParamType == "ReadDeviceCommand");
                            if (conveyorLine.Communicator.Read<bool>(deviceProDTO2.DeviceProAddress))
                            {
                                conveyorLine.Communicator.Write(deviceProDTO.DeviceProAddress, (bool)false);
                                _taskService.UpdateTaskStatusToNext2(command.TaskNo);
                                wcsWriteLog5(RGVStationitem, "正常信息", $"清除站台:{RGVStationitem}的交互信号写入:false,地址:{deviceProDTO.DeviceProAddress}");
                            }
                            else
                            {
                                wcsWriteLog5(RGVStationitem, "错误信息", $"未读取到站台:{RGVStationitem}的交互信号:true,地址:{deviceProDTO.DeviceProAddress}");
                            }
                        }
                        else
                        {
                            conveyorLine.Communicator.Write(deviceProDTO.DeviceProAddress, (bool)false);
                            wcsWriteLog5(RGVStationitem, "错误信息", $"{RGVStationitem}的交互信号写入:true ==》 false,地址:{deviceProDTO.DeviceProAddress}");
                        }
                    }
                    else
                    {
                        wcsWriteLog5(RGVStationitem, "错误信息", $"未读取到站台:{RGVStationitem}的申请信号,目前信号状态为。Online:{command.Online},STB:{command.STB},TaskNo:{command.TaskNo},");
                    }
                }
            }
        }
        /// <summary>
        /// RGV输送线请求出站
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        public void RequestOutbound(CommonConveyorLine conveyorLine)
        {
            List<string> platformsList = _PlatformStationService.GetPlatform2(conveyorLine.DeviceCode);
            foreach (var RGVStationitem in platformsList)
            {
                ConveyorLineCommand command = lineCommand(conveyorLine, RGVStationitem);
                if (command != null)
                {
                    if(command.Online)
                    {
                        if (command.STB)
                        {
                            if (_taskService.UpdateTaskStatusToNext(command.TaskNo).Status)
                            {
                                DeviceProDTO? deviceProDTO6 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == RGVStationitem && x.DeviceProParamName == "ACK" && x.DeviceProParamType == "DeviceCommand");
                                if (deviceProDTO6 != null)
                                {
                                    conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)true);
                                    wcsWriteLog2(RGVStationitem, "正常日志", $"{RGVStationitem}写入输送线信号,模块{deviceProDTO6.DeviceProAddress}:true");
                                }
                                else
                                {
                                    wcsWriteLog2(RGVStationitem, "错误日志", $"未找到对于的读取模块{RGVStationitem}");
                                }
                            }
                            else
                            {
                                wcsWriteLog2(RGVStationitem, "错误日志", $"任务信息更改失败");
                            }
                        }
                        else
                        {
                            DeviceProDTO? deviceProDTO6 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == RGVStationitem && x.DeviceProParamName == "ACK" && x.DeviceProParamType == "DeviceCommand");
                            if (deviceProDTO6 != null)
                            {
                                conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)false);
                                wcsWriteLog2(RGVStationitem, "正常日志", $"{RGVStationitem}写入输送线信号,模块{deviceProDTO6.DeviceProAddress}:false");
                            }
                            else
                            {
                                wcsWriteLog2(RGVStationitem, "错误日志", $"未找到对于的读取模块{RGVStationitem}");
                            }
                        }
                    }
                    else
                    {
                        wcsWriteLog2(RGVStationitem, "错误日志", $"该站台{RGVStationitem}不处于联机状态");
                    }
                }
            }
        }
        /// <summary>
        /// èŽ·å–å‡ºåº“ç«™å°ï¼Œæ›´æ–°å‡ºåº“ä»»åŠ¡
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        public void RequestOutAdd(CommonConveyorLine conveyorLine)
        {
            List<PlatformStation> platformsList = _PlatformStationService.GetPlatformOutList(conveyorLine.DeviceCode);
            foreach (var RGVStationitem in platformsList)
            {
                ConveyorLineCommand command = lineCommand(conveyorLine, RGVStationitem.Station_code);
                if (command != null)
                {
                    if(command.Online)
                    {
                        if (command.Free)
                        {
                            if (_taskService.OutConveyorLineTask(RGVStationitem))    //查找是否被占用
                            {
                                wcsWriteLog3(RGVStationitem.Station_code.ToString(), "更新成功", $"任务信息更新成功");
                            }
                            else
                            {
                                wcsWriteLog3(RGVStationitem.Station_code.ToString(), "错误信息", $"已有该站台的出库任务或任务更新失败");
                            }
                        }
                        else
                        {
                            wcsWriteLog3(RGVStationitem.Station_code.ToString(), "错误信息", $"该出库站台不可放货");
                        }
                    }
                    else
                    {
                        wcsWriteLog3(RGVStationitem.Station_code.ToString(), "是否联机", $"该站台{RGVStationitem.Station_code}不处于联机状态");
                    }
                }
            }
        }
        /// <summary>
        /// å †åž›æœºå‡ºåº“站台,根据任务进行下发至输送线
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        public void RequestOutSCLine(CommonConveyorLine conveyorLine)
        {
            List<Dt_Task> StationData = _taskService.StackerCraneOutTask();
            foreach (var LinSCStationitem in StationData)
            {
                string platformsList = _PlatformStationService.GetOutSCName(LinSCStationitem.Roadway, LinSCStationitem.Station_storey);
                DeviceProDTO? deviceProDTO6 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == platformsList && x.DeviceProParamName == "STB" && x.DeviceProParamType == "DeviceCommand");
                DeviceProDTO? deviceProDTO7 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == platformsList && x.DeviceProParamName == "TaskNo" && x.DeviceProParamType == "DeviceCommand");
                if (deviceProDTO6 != null && deviceProDTO7 != null)
                {
                    conveyorLine.Communicator.Write(deviceProDTO7.DeviceProAddress, (int)LinSCStationitem.TaskNum);
                    if (conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)true))
                    {
                        DeviceProDTO? deviceProDTO8 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == platformsList && x.DeviceProParamName == "ACK" && x.DeviceProParamType == "ReadDeviceCommand");
                        if (deviceProDTO8 != null)
                        {
                            if (conveyorLine.Communicator.Read<bool>(deviceProDTO8.DeviceProAddress))
                            {
                                _taskService.UpdateTaskStatusToNext(LinSCStationitem.TaskNum);
                                conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)false);
                                conveyorLine.Communicator.Write(deviceProDTO8.DeviceProAddress, (int)0);
                                //写入输送线回应信号与
                            }
                            else
                            {
                                wcsWriteLog4(LinSCStationitem.TargetAddress, "申请出库堆垛机站台错误信息", $"未读取到输送线回应信号:ACK,{LinSCStationitem}");
                            }
                        }
                        else
                        {
                            wcsWriteLog4(LinSCStationitem.TargetAddress, "申请出库堆垛机站台错误信息", $"未找到对于的读取模块{LinSCStationitem}");
                        }
                    }
                    else
                    {
                        wcsWriteLog4(LinSCStationitem.TargetAddress, "申请出库堆垛机站台失败", $"写入输送线信号,模块{deviceProDTO6.DeviceProAddress}:失败");
                    }
                }
                else
                {
                    wcsWriteLog4(LinSCStationitem.TargetAddress, "申请出库堆垛机站台错误信息", $"未找到对于的写入模块{LinSCStationitem}");
                }
            }
        }
        /// <summary>
        /// è¯»å–信息记录
        /// </summary>
        /// <param name="SCLLinStack"></param>
        /// <param name="Logtype"></param>
        /// <param name="Magessadd"></param>
        public void wcsWriteLog(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("入库口", SCLLinStack + "站台", Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public void wcsWriteLog2(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("RGV站台", SCLLinStack + "站台", Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public void wcsWriteLog3(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("出库口", SCLLinStack + "站台", Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public void wcsWriteLog4(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("堆垛机站台", SCLLinStack + "站台", Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public void wcsWriteLog5(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("堆垛机入库站台", SCLLinStack + "站台", Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public ConveyorLineCommand lineCommand(CommonConveyorLine conveyorLine,string Station_code)
        {
            ConveyorLineCommand conveyorLineCommand = new ConveyorLineCommand();
            List<DeviceProDTO> deviceProDTO6 = conveyorLine.DeviceProDTOs
                .Where(x => x.DeviceChildCode == Station_code
                            && DBLine.ListDBdata.Contains(x.DeviceProParamName)
                            && x.DeviceProParamType == "ReadDeviceCommand")
                .ToList();
            foreach (var item in deviceProDTO6)
            {
                var paramName = item.DeviceProParamName;
                var propertyInfo = typeof(ConveyorLineCommand).GetProperty(paramName);
                if (propertyInfo != null)
                {
                    if (item.DeviceDataType == "bool")
                    {
                       var value = conveyorLine.Communicator.Read<bool>(item.DeviceProAddress);
                       propertyInfo.SetValue(conveyorLineCommand, value);
                    }else if(item.DeviceDataType == "int")
                    {
                        var value = conveyorLine.Communicator.Read<int>(item.DeviceProAddress);
                        propertyInfo.SetValue(conveyorLineCommand, value);
                    }else if(item.DeviceDataType == "string")
                    {
                        var value = conveyorLine.Communicator.Read<string>(item.DeviceProAddress);
                        propertyInfo.SetValue(conveyorLineCommand, value);
                    }
                }
            }
            return conveyorLineCommand;
        }
    }
}
WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/°å²Ä²Ö/CommonStackerCraneJob_BC.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,358 @@
using Autofac.Core;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.AspNetCore.Hosting;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using Quartz;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Eventing.Reader;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.Log;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Enums;
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.Models;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_Tasks.StackerCraneJob;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class CommonStackerCraneJob_BC : IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
        private readonly IRouterService _routerService;
        private readonly IPlatformStationService _PlatformStationService;
        public CommonStackerCraneJob_BC(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IPlatformStationService platformStation)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
            _routerService = routerService;
            _PlatformStationService= platformStation;
        }
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                if (commonStackerCrane != null)
                {
                    if (!commonStackerCrane.IsEventSubscribed)
                    {
                        commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订阅任务完成事件
                    }
                    if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
                    {
                        commonStackerCrane.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                        if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                        {
                            Dt_Task? task = GetTask(commonStackerCrane);
                            if (task != null)
                            {
                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
                                if (stackerCraneTaskCommand != null)
                                {
                                    bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
                                    if (sendFlag)
                                    {
                                        _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString());
            }
            return Task.CompletedTask;
        }
        /// <summary>
        /// ä»»åŠ¡å®Œæˆäº‹ä»¶è®¢é˜…çš„æ–¹æ³•
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e)
        {
            CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane;
            if (commonStackerCrane != null)
            {
                if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                {
                    _taskService.StackCraneTaskCompleted(e.TaskNum);
                    commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                }
            }
        }
        /// <summary>
        /// èŽ·å–ä»»åŠ¡
        /// </summary>
        /// <param name="commonStackerCrane">堆垛机对象</param>
        /// <returns></returns>
        private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane)
        {
            Dt_Task task;
            task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
            if (task != null && task.TaskType== (int)TaskOutboundTypeEnum.Outbound)
            {
                string[] targetCodes = task.SourceAddress.Split("-");
                if (targetCodes[4] == "02")
                {
                    Dt_Task taskst = OutTaskMovelibrary(task);
                    if (taskst != null)
                    {
                        if(taskst.TaskType == (int)TaskRelocationTypeEnum.Relocation)
                        {
                            return taskst;
                        }
                        else
                        {
                            if(taskst.TargetAddress== "R02-001-021-001-02" || taskst.TargetAddress == "R02-001-022-001-02")
                            {
                                return taskst;
                            }
                            else
                            {
                                if (OutTaskStationIsOccupied(taskst) != null)
                                {
                                    return taskst;
                                }
                            }
                        }
                    }
                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                }
                else
                {
                    if (OutTaskStationIsOccupied(task) != null)
                    {
                        return task;
                    }
                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                }
            }
            return task;
        }
        /// <summary>
        /// å‡ºåº“任务判断出库站台是否被占用
        /// </summary>
        /// <param name="task">任务实体</param>
        /// <returns>如果未被占用,返回传入的任务信息,否则,返回null</returns>
        private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
        {
            if(task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
            {
                string plcAddress = _PlatformStationService.GetOutSCName(task.Roadway,task.Station_storey);
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1002");
                if (device != null)
                {
                    CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                    DeviceProDTO? deviceProDTO = GetDeviceProDTO(conveyorLine, plcAddress, "Free");
                    if (deviceProDTO != null)
                    {
                        bool B_Event_Test = GetLine(conveyorLine, deviceProDTO.DeviceProAddress);        //判断输送线是否允许放货信号
                        if (B_Event_Test)
                        {
                            return task;
                        }
                    }
                }
                else
                {
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到出库站台【{task.SourceAddress}】对应的通讯对象,无法判断出库站台是否被占用");
                }
            }
            return null;
        }
        /// <summary>
        /// å‡ºåº“任务判断是否需要进行移库Move the library
        /// </summary>
        /// <param name="task">任务实体</param>
        /// <returns>如果未被占用,返回传入的任务信息,否则,返回null</returns>
        private Dt_Task? OutTaskMovelibrary([NotNull] Dt_Task task)
        {
            try
            {
                string[] targetCodes = task.SourceAddress.Split("-");
                if (targetCodes[1] == "001")
                {
                    targetCodes[1] = "002";
                }
                else if (targetCodes[1] == "004")
                {
                    targetCodes[1] = "003";
                }
                targetCodes[4] = "01";
                string SourceAddress = string.Join("-", targetCodes); //组装浅库位地址
                Dt_Task? tasks = _taskService.QueryStationIsOccupiedOutTasks(task.Roadway, SourceAddress).FirstOrDefault(); //找浅库位是否有任务
                if (tasks != null)
                {
                    return tasks;
                }
                else
                {
                    //向wms申请判断浅库位是否有货,是否需要进行移库
                    Dt_Task? taskst = _taskService.RequestWMSTaskMovelibrary(task);
                    if (taskst != null)
                    {
                        return taskst;
                    }
                }
            }
            catch (Exception ex)
            {
                throw;
            }
            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 = (short)task.PalletCodequantity;   //待改动
            if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//判断是否是入库任务
            {
                string[] targetCodest = task.SourceAddress.Split("-");
                if (targetCodest.Length == 5)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(targetCodest[1]);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(targetCodest[2]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(targetCodest[3]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"入库起点错误,起点:【{task.SourceAddress}】");
                    return null;
                }
                string[] targetCodes = task.TargetAddress.Split("-");
                if (targetCodes.Length == 5)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"入库任务终点错误,起点:【{task.NextAddress}】");
                    return null;
                }
            }
            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
            {
                string[] sourceCodes = task.SourceAddress.Split("-");
                if (sourceCodes.Length == 5)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务起点错误,起点:【{task.CurrentAddress}】");
                    return null;
                }
                string[] sourceCodest = task.TargetAddress.Split("-");
                if (sourceCodest.Length == 5)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(sourceCodest[1]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(sourceCodest[2]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(sourceCodest[3]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务终点错误,起点:【{task.TargetAddress}】");
                    return null;
                }
            }
            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
            {
                string[] targetCodes = task.NextAddress.Split("-");
                if (targetCodes.Length == 5)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"移库任务终点错误,起点:【{task.NextAddress}】");
                    return null;
                }
                string[] sourceCodes = task.CurrentAddress.Split("-");
                if (sourceCodes.Length == 5)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"移库任务起点错误,起点:【{task.CurrentAddress}】");
                    return null;
                }
            }
            return stackerCraneTaskCommand;
        }
        //根地址读取输送线信息
        public bool GetLine(CommonConveyorLine conveyorLine, string DeviceProDataBlock)
        {
            return conveyorLine.Communicator.Read<bool>(DeviceProDataBlock);
        }
        //获取输送线实例
        public DeviceProDTO? GetDeviceProDTO(CommonConveyorLine conveyorLine, string SCAddress, string Interactivet)
        {
            return conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SCAddress && x.DeviceProParamName == Interactivet);
        }
    }
}
WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/¸¨ÁϲÖ/CommonConveyorLineJob_FL.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,407 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_Tasks.ConveyorLineJob
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using Quartz;
using SqlSugar;
using System.Threading.Tasks;
using WIDESEA_Common.Log;
using WIDESEAWCS_Core;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Model.Models.System;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class CommonConveyorLineJob_FL : IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly IRouterService _routerService;
        private readonly IPlatformStationService _PlatformStationService;
        private readonly IMapper _mapper;
        public CommonConveyorLineJob_FL(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, IPlatformStationService platformStation)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _routerService = routerService;
            _mapper = mapper;
            _PlatformStationService = platformStation;
        }
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
                if (conveyorLine != null)
                {
                    //读取输送线入库申请
                    RequestInbound(conveyorLine);
                    //读取堆垛机入库站台信号
                    RequestInSCLine(conveyorLine);
                    //堆垛机站台进行下发输送线任务
                    RequestOutSCLine(conveyorLine);
                    //读取Rgv出库口任务
                    RequestOutbound(conveyorLine);
                    //读取出库站台,获取出库口更新出库任务
                    RequestOutAdd(conveyorLine);
                }
            }
            catch (Exception ex)
            {
                //Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
            }
            return Task.CompletedTask;
        }
        /// <summary>
        /// è¾“送线请求入库
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        public void RequestInbound(CommonConveyorLine conveyorLine)
        {
            List<PlatformStation> platformsList = _PlatformStationService.GetPlatformList(conveyorLine.DeviceCode);
            foreach (var RGVStationitem in platformsList)
            {
                ConveyorLineCommand command = lineCommand(conveyorLine,RGVStationitem.Station_code);
                if (command != null)
                {
                    if (command.Online)
                    {
                        if (command.STB)
                        {
                            WebResponseContent content = _taskService.RequestWMSTask(command.BarCode, RGVStationitem.Station_code.ToString(), command.GoodsType);
                            if (content.Status)
                            {
                                DeviceProDTO? deviceProDTO6 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == RGVStationitem.Station_code.ToString() && x.DeviceProParamName == "ACK" && x.DeviceProParamType == "DeviceCommand");
                                if (deviceProDTO6 != null)
                                {
                                    conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)true);
                                    wcsWriteLog(RGVStationitem.Station_code.ToString(), "正常日志", $"{RGVStationitem.Station_code}写入输送线信号,模块{deviceProDTO6.DeviceProAddress}:true");
                                }
                                else
                                {
                                    wcsWriteLog(RGVStationitem.Station_code.ToString(), "错误日志", $"未找到对于的读取模块{RGVStationitem.Station_code}");
                                }
                            }
                            else
                            {
                                wcsWriteLog(RGVStationitem.Station_code.ToString(), "错误日志", $"入库站台:{RGVStationitem.Station_code},错误信息:{content.Message}");
                            }
                        }
                        else
                        {
                            DeviceProDTO? deviceProDTO6 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == RGVStationitem.Station_code.ToString() && x.DeviceProParamName == "ACK" && x.DeviceProParamType == "DeviceCommand");
                            if (deviceProDTO6 != null)
                            {
                                conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)false);
                                wcsWriteLog(RGVStationitem.Station_code.ToString(), "正常日志", $"{RGVStationitem.Station_code}写入输送线信号,模块{deviceProDTO6.DeviceProAddress}:false");
                            }
                            else
                            {
                                wcsWriteLog(RGVStationitem.Station_code.ToString(), "错误日志", $"未找到对于的读取模块{RGVStationitem.Station_code}");
                            }
                        }
                    }
                    else
                    {
                        wcsWriteLog(RGVStationitem.Station_code.ToString(), "错误日志", $"该站台{RGVStationitem.Station_code}不处于联机状态");
                    }
                }
            }
        }
        /// <summary>
        /// è¯»å–堆垛机入库站台信息,进行任务完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        public void RequestInSCLine(CommonConveyorLine conveyorLine)
        {
            List<string> platformsList = _PlatformStationService.GetPlatIn(conveyorLine.DeviceCode);    //读取站台信息
            foreach (var RGVStationitem in platformsList)
            {
                ConveyorLineCommand command = lineCommand(conveyorLine, RGVStationitem);
                if (command != null)
                {
                    if (command.Online && command.STB && command.TaskNo != 0)
                    {
                        //写入反馈
                        DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == RGVStationitem && x.DeviceProParamName == "ACK" && x.DeviceProParamType == "DeviceCommand");
                        if (conveyorLine.Communicator.Write(deviceProDTO.DeviceProAddress, (bool)true))
                        {
                            DeviceProDTO? deviceProDTO2 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == RGVStationitem && x.DeviceProParamName == "STB" && x.DeviceProParamType == "ReadDeviceCommand");
                            if (conveyorLine.Communicator.Read<bool>(deviceProDTO2.DeviceProAddress))
                            {
                                conveyorLine.Communicator.Write(deviceProDTO.DeviceProAddress, (bool)false);
                                _taskService.UpdateTaskStatusToNext2(command.TaskNo);
                                wcsWriteLog5(RGVStationitem, "正常信息", $"清除站台:{RGVStationitem}的交互信号写入:false,地址:{deviceProDTO.DeviceProAddress}");
                            }
                            else
                            {
                                wcsWriteLog5(RGVStationitem, "错误信息", $"未读取到站台:{RGVStationitem}的交互信号:true,地址:{deviceProDTO.DeviceProAddress}");
                            }
                        }
                        else
                        {
                            conveyorLine.Communicator.Write(deviceProDTO.DeviceProAddress, (bool)false);
                            wcsWriteLog5(RGVStationitem, "错误信息", $"{RGVStationitem}的交互信号写入:true ==》 false,地址:{deviceProDTO.DeviceProAddress}");
                        }
                    }
                    else
                    {
                        wcsWriteLog5(RGVStationitem, "错误信息", $"未读取到站台:{RGVStationitem}的申请信号,目前信号状态为。Online:{command.Online},STB:{command.STB},TaskNo:{command.TaskNo},");
                    }
                }
            }
        }
        /// <summary>
        /// RGV输送线请求出站
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        public void RequestOutbound(CommonConveyorLine conveyorLine)
        {
            List<string> platformsList = _PlatformStationService.GetPlatform2(conveyorLine.DeviceCode);
            foreach (var RGVStationitem in platformsList)
            {
                ConveyorLineCommand command = lineCommand(conveyorLine, RGVStationitem);
                if (command != null)
                {
                    if(command.Online)
                    {
                        if (command.STB)
                        {
                            if (_taskService.UpdateTaskStatusToNext(command.TaskNo).Status)
                            {
                                DeviceProDTO? deviceProDTO6 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == RGVStationitem && x.DeviceProParamName == "ACK" && x.DeviceProParamType == "DeviceCommand");
                                if (deviceProDTO6 != null)
                                {
                                    conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)true);
                                    wcsWriteLog2(RGVStationitem, "正常日志", $"{RGVStationitem}写入输送线信号,模块{deviceProDTO6.DeviceProAddress}:true");
                                }
                                else
                                {
                                    wcsWriteLog2(RGVStationitem, "错误日志", $"未找到对于的读取模块{RGVStationitem}");
                                }
                            }
                            else
                            {
                                wcsWriteLog2(RGVStationitem, "错误日志", $"任务信息更改失败");
                            }
                        }
                        else
                        {
                            DeviceProDTO? deviceProDTO6 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == RGVStationitem && x.DeviceProParamName == "ACK" && x.DeviceProParamType == "DeviceCommand");
                            if (deviceProDTO6 != null)
                            {
                                conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)false);
                                wcsWriteLog2(RGVStationitem, "正常日志", $"{RGVStationitem}写入输送线信号,模块{deviceProDTO6.DeviceProAddress}:false");
                            }
                            else
                            {
                                wcsWriteLog2(RGVStationitem, "错误日志", $"未找到对于的读取模块{RGVStationitem}");
                            }
                        }
                    }
                    else
                    {
                        wcsWriteLog2(RGVStationitem, "错误日志", $"该站台{RGVStationitem}不处于联机状态");
                    }
                }
            }
        }
        /// <summary>
        /// èŽ·å–å‡ºåº“ç«™å°ï¼Œæ›´æ–°å‡ºåº“ä»»åŠ¡
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        public void RequestOutAdd(CommonConveyorLine conveyorLine)
        {
            List<PlatformStation> platformsList = _PlatformStationService.GetPlatformOutList(conveyorLine.DeviceCode);
            foreach (var RGVStationitem in platformsList)
            {
                ConveyorLineCommand command = lineCommand(conveyorLine, RGVStationitem.Station_code);
                if (command != null)
                {
                    if(command.Online)
                    {
                        if (command.Free)
                        {
                            if (_taskService.OutConveyorLineTask(RGVStationitem))    //查找是否被占用
                            {
                                wcsWriteLog3(RGVStationitem.Station_code.ToString(), "更新成功", $"任务信息更新成功");
                            }
                            else
                            {
                                wcsWriteLog3(RGVStationitem.Station_code.ToString(), "错误信息", $"已有该站台的出库任务或任务更新失败");
                            }
                        }
                        else
                        {
                            wcsWriteLog3(RGVStationitem.Station_code.ToString(), "错误信息", $"该出库站台不可放货");
                        }
                    }
                    else
                    {
                        wcsWriteLog3(RGVStationitem.Station_code.ToString(), "是否联机", $"该站台{RGVStationitem.Station_code}不处于联机状态");
                    }
                }
            }
        }
        /// <summary>
        /// å †åž›æœºå‡ºåº“站台,根据任务进行下发至输送线
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        public void RequestOutSCLine(CommonConveyorLine conveyorLine)
        {
            List<Dt_Task> StationData = _taskService.StackerCraneOutTask();
            foreach (var LinSCStationitem in StationData)
            {
                string platformsList = _PlatformStationService.GetOutSCName(LinSCStationitem.Roadway, LinSCStationitem.Station_storey);
                DeviceProDTO? deviceProDTO6 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == platformsList && x.DeviceProParamName == "STB" && x.DeviceProParamType == "DeviceCommand");
                DeviceProDTO? deviceProDTO7 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == platformsList && x.DeviceProParamName == "TaskNo" && x.DeviceProParamType == "DeviceCommand");
                if (deviceProDTO6 != null && deviceProDTO7 != null)
                {
                    conveyorLine.Communicator.Write(deviceProDTO7.DeviceProAddress, (int)LinSCStationitem.TaskNum);
                    if (conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)true))
                    {
                        DeviceProDTO? deviceProDTO8 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == platformsList && x.DeviceProParamName == "ACK" && x.DeviceProParamType == "ReadDeviceCommand");
                        if (deviceProDTO8 != null)
                        {
                            if (conveyorLine.Communicator.Read<bool>(deviceProDTO8.DeviceProAddress))
                            {
                                _taskService.UpdateTaskStatusToNext(LinSCStationitem.TaskNum);
                                conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)false);
                                conveyorLine.Communicator.Write(deviceProDTO8.DeviceProAddress, (int)0);
                                //写入输送线回应信号与
                            }
                            else
                            {
                                wcsWriteLog4(LinSCStationitem.TargetAddress, "申请出库堆垛机站台错误信息", $"未读取到输送线回应信号:ACK,{LinSCStationitem}");
                            }
                        }
                        else
                        {
                            wcsWriteLog4(LinSCStationitem.TargetAddress, "申请出库堆垛机站台错误信息", $"未找到对于的读取模块{LinSCStationitem}");
                        }
                    }
                    else
                    {
                        wcsWriteLog4(LinSCStationitem.TargetAddress, "申请出库堆垛机站台失败", $"写入输送线信号,模块{deviceProDTO6.DeviceProAddress}:失败");
                    }
                }
                else
                {
                    wcsWriteLog4(LinSCStationitem.TargetAddress, "申请出库堆垛机站台错误信息", $"未找到对于的写入模块{LinSCStationitem}");
                }
            }
        }
        /// <summary>
        /// è¯»å–信息记录
        /// </summary>
        /// <param name="SCLLinStack"></param>
        /// <param name="Logtype"></param>
        /// <param name="Magessadd"></param>
        public void wcsWriteLog(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("入库口", SCLLinStack + "站台", Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public void wcsWriteLog2(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("RGV站台", SCLLinStack + "站台", Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public void wcsWriteLog3(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("出库口", SCLLinStack + "站台", Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public void wcsWriteLog4(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("堆垛机站台", SCLLinStack + "站台", Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public void wcsWriteLog5(string SCLLinStack, string Logtype, string Magessadd)
        {
            WriteLog.Write_Log("堆垛机入库站台", SCLLinStack + "站台", Logtype, new { ä¿¡æ¯ = Magessadd });
        }
        public ConveyorLineCommand lineCommand(CommonConveyorLine conveyorLine,string Station_code)
        {
            ConveyorLineCommand conveyorLineCommand = new ConveyorLineCommand();
            List<DeviceProDTO> deviceProDTO6 = conveyorLine.DeviceProDTOs
                .Where(x => x.DeviceChildCode == Station_code
                            && DBLine.ListDBdata.Contains(x.DeviceProParamName)
                            && x.DeviceProParamType == "ReadDeviceCommand")
                .ToList();
            foreach (var item in deviceProDTO6)
            {
                var paramName = item.DeviceProParamName;
                var propertyInfo = typeof(ConveyorLineCommand).GetProperty(paramName);
                if (propertyInfo != null)
                {
                    if (item.DeviceDataType == "bool")
                    {
                       var value = conveyorLine.Communicator.Read<bool>(item.DeviceProAddress);
                       propertyInfo.SetValue(conveyorLineCommand, value);
                    }else if(item.DeviceDataType == "int")
                    {
                        var value = conveyorLine.Communicator.Read<int>(item.DeviceProAddress);
                        propertyInfo.SetValue(conveyorLineCommand, value);
                    }else if(item.DeviceDataType == "string")
                    {
                        var value = conveyorLine.Communicator.Read<string>(item.DeviceProAddress);
                        propertyInfo.SetValue(conveyorLineCommand, value);
                    }
                }
            }
            return conveyorLineCommand;
        }
    }
}
WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/¸¨ÁϲÖ/CommonStackerCraneJob_FL.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,358 @@
using Autofac.Core;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.AspNetCore.Hosting;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using Quartz;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Eventing.Reader;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.Log;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Enums;
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.Models;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_Tasks.StackerCraneJob;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class CommonStackerCraneJob_FL : IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
        private readonly IRouterService _routerService;
        private readonly IPlatformStationService _PlatformStationService;
        public CommonStackerCraneJob_FL(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IPlatformStationService platformStation)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
            _routerService = routerService;
            _PlatformStationService= platformStation;
        }
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                if (commonStackerCrane != null)
                {
                    if (!commonStackerCrane.IsEventSubscribed)
                    {
                        commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订阅任务完成事件
                    }
                    if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
                    {
                        commonStackerCrane.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                        if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                        {
                            Dt_Task? task = GetTask(commonStackerCrane);
                            if (task != null)
                            {
                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
                                if (stackerCraneTaskCommand != null)
                                {
                                    bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
                                    if (sendFlag)
                                    {
                                        _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString());
            }
            return Task.CompletedTask;
        }
        /// <summary>
        /// ä»»åŠ¡å®Œæˆäº‹ä»¶è®¢é˜…çš„æ–¹æ³•
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e)
        {
            CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane;
            if (commonStackerCrane != null)
            {
                if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                {
                    _taskService.StackCraneTaskCompleted(e.TaskNum);
                    commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                }
            }
        }
        /// <summary>
        /// èŽ·å–ä»»åŠ¡
        /// </summary>
        /// <param name="commonStackerCrane">堆垛机对象</param>
        /// <returns></returns>
        private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane)
        {
            Dt_Task task;
            task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
            if (task != null && task.TaskType== (int)TaskOutboundTypeEnum.Outbound)
            {
                string[] targetCodes = task.SourceAddress.Split("-");
                if (targetCodes[4] == "02")
                {
                    Dt_Task taskst = OutTaskMovelibrary(task);
                    if (taskst != null)
                    {
                        if(taskst.TaskType == (int)TaskRelocationTypeEnum.Relocation)
                        {
                            return taskst;
                        }
                        else
                        {
                            if(taskst.TargetAddress== "R02-001-021-001-02" || taskst.TargetAddress == "R02-001-022-001-02")
                            {
                                return taskst;
                            }
                            else
                            {
                                if (OutTaskStationIsOccupied(taskst) != null)
                                {
                                    return taskst;
                                }
                            }
                        }
                    }
                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                }
                else
                {
                    if (OutTaskStationIsOccupied(task) != null)
                    {
                        return task;
                    }
                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                }
            }
            return task;
        }
        /// <summary>
        /// å‡ºåº“任务判断出库站台是否被占用
        /// </summary>
        /// <param name="task">任务实体</param>
        /// <returns>如果未被占用,返回传入的任务信息,否则,返回null</returns>
        private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
        {
            if(task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
            {
                string plcAddress = _PlatformStationService.GetOutSCName(task.Roadway,task.Station_storey);
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1002");
                if (device != null)
                {
                    CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                    DeviceProDTO? deviceProDTO = GetDeviceProDTO(conveyorLine, plcAddress, "Free");
                    if (deviceProDTO != null)
                    {
                        bool B_Event_Test = GetLine(conveyorLine, deviceProDTO.DeviceProAddress);        //判断输送线是否允许放货信号
                        if (B_Event_Test)
                        {
                            return task;
                        }
                    }
                }
                else
                {
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到出库站台【{task.SourceAddress}】对应的通讯对象,无法判断出库站台是否被占用");
                }
            }
            return null;
        }
        /// <summary>
        /// å‡ºåº“任务判断是否需要进行移库Move the library
        /// </summary>
        /// <param name="task">任务实体</param>
        /// <returns>如果未被占用,返回传入的任务信息,否则,返回null</returns>
        private Dt_Task? OutTaskMovelibrary([NotNull] Dt_Task task)
        {
            try
            {
                string[] targetCodes = task.SourceAddress.Split("-");
                if (targetCodes[1] == "001")
                {
                    targetCodes[1] = "002";
                }
                else if (targetCodes[1] == "004")
                {
                    targetCodes[1] = "003";
                }
                targetCodes[4] = "01";
                string SourceAddress = string.Join("-", targetCodes); //组装浅库位地址
                Dt_Task? tasks = _taskService.QueryStationIsOccupiedOutTasks(task.Roadway, SourceAddress).FirstOrDefault(); //找浅库位是否有任务
                if (tasks != null)
                {
                    return tasks;
                }
                else
                {
                    //向wms申请判断浅库位是否有货,是否需要进行移库
                    Dt_Task? taskst = _taskService.RequestWMSTaskMovelibrary(task);
                    if (taskst != null)
                    {
                        return taskst;
                    }
                }
            }
            catch (Exception ex)
            {
                throw;
            }
            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 = (short)task.PalletCodequantity;   //待改动
            if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//判断是否是入库任务
            {
                string[] targetCodest = task.SourceAddress.Split("-");
                if (targetCodest.Length == 5)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(targetCodest[1]);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(targetCodest[2]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(targetCodest[3]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"入库起点错误,起点:【{task.SourceAddress}】");
                    return null;
                }
                string[] targetCodes = task.TargetAddress.Split("-");
                if (targetCodes.Length == 5)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"入库任务终点错误,起点:【{task.NextAddress}】");
                    return null;
                }
            }
            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
            {
                string[] sourceCodes = task.SourceAddress.Split("-");
                if (sourceCodes.Length == 5)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务起点错误,起点:【{task.CurrentAddress}】");
                    return null;
                }
                string[] sourceCodest = task.TargetAddress.Split("-");
                if (sourceCodest.Length == 5)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(sourceCodest[1]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(sourceCodest[2]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(sourceCodest[3]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务终点错误,起点:【{task.TargetAddress}】");
                    return null;
                }
            }
            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
            {
                string[] targetCodes = task.NextAddress.Split("-");
                if (targetCodes.Length == 5)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"移库任务终点错误,起点:【{task.NextAddress}】");
                    return null;
                }
                string[] sourceCodes = task.CurrentAddress.Split("-");
                if (sourceCodes.Length == 5)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"移库任务起点错误,起点:【{task.CurrentAddress}】");
                    return null;
                }
            }
            return stackerCraneTaskCommand;
        }
        //根地址读取输送线信息
        public bool GetLine(CommonConveyorLine conveyorLine, string DeviceProDataBlock)
        {
            return conveyorLine.Communicator.Read<bool>(DeviceProDataBlock);
        }
        //获取输送线实例
        public DeviceProDTO? GetDeviceProDTO(CommonConveyorLine conveyorLine, string SCAddress, string Interactivet)
        {
            return conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SCAddress && x.DeviceProParamName == Interactivet);
        }
    }
}
WMS/WIDESEA_WMSClient/src/extension/basic/palletTypeInfo.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
let extension = {
    components: {
      //查询界面扩展组件
      gridHeader: '',
      gridBody: '',
      gridFooter: '',
      //新建、编辑弹出框扩展组件
      modelHeader: '',
      modelBody: '',
      modelFooter: ''
    },
    tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
    buttons: { view: [], box: [], detail: [] }, //扩展的按钮
    methods: {
      //下面这些方法可以保留也可以删除
      onInit() {
        let enableBtn = this.buttons.find(x => x.value == 'Enable');
        if (enableBtn) {
          enableBtn.onClick = function () {
            this.$message.success('自定义按钮点击事件');
          }
        }
        let disableBtn = this.buttons.find(x => x.value == 'Disable');
        if (disableBtn) {
          disableBtn.onClick = function () {
            this.$message.success('自定义按钮点击事件');
          }
        }
      },
      onInited() {
        //框架初始化配置后
        //如果要配置明细表,在此方法操作
        //this.detailOptions.columns.forEach(column=>{ });
      },
      searchBefore(param) {
        //界面查询前,可以给param.wheres添加查询参数
        //返回false,则不会执行查询
        return true;
      },
      searchAfter(result) {
        //查询后,result返回的查询数据,可以在显示到表格前处理表格的值
        return true;
      },
      addBefore(formData) {
        //新建保存前formData为对象,包括明细表,可以给给表单设置值,自己输出看formData的值
        return true;
      },
      updateBefore(formData) {
        //编辑保存前formData为对象,包括明细表、删除行的Id
        return true;
      },
      rowClick({ row, column, event }) {
        //查询界面点击行事件
        this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
      },
      modelOpenAfter(row) {
        //点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
        //(1)判断是编辑还是新建操作: this.currentAction=='Add';
        //(2)给弹出框设置默认值
        //(3)this.editFormFields.字段='xxx';
        //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
        //看不懂就把输出看:console.log(this.editFormOptions)
      }
    }
  };
  export default extension;
WMS/WIDESEA_WMSClient/src/router/viewGird.js
@@ -108,6 +108,10 @@
    path: '/locationStatusChangeRecord',
    name: 'locationStatusChangeRecord',
    component: () => import('@/views/record/locationStatusChangeRecord.vue')
  }, {
    path: '/palletTypeInfo',
    name: 'palletTypeInfo',
    component: () => import('@/views/basic/palletTypeInfo.vue')
  }]
export default viewgird
WMS/WIDESEA_WMSClient/src/views/basic/palletTypeInfo.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,226 @@
<template>
  <view-grid
    ref="grid"
    :columns="columns"
    :detail="detail"
    :editFormFields="editFormFields"
    :editFormOptions="editFormOptions"
    :searchFormFields="searchFormFields"
    :searchFormOptions="searchFormOptions"
    :table="table"
    :extend="extend"
  >
  </view-grid>
</template>
    <script>
import extend from "@/extension/basic/palletTypeInfo.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const table = ref({
      key: "id",
      footer: "Foots",
      cnName: "托盘类型",
      name: "palletTypeInfo",
      url: "/palletTypeInfo/",
      sortName: "id",
    });
    const editFormFields = ref({
      palletType: "",
      typeName: "",
      length: "",
      width: "",
      height: "",
      locaitonCount: "",
    });
    const editFormOptions = ref([
      [
        {
          title: "托盘类型",
          required: true,
          field: "palletType",
          type: "int",
        },
        {
          title: "托盘类型名称",
          required: true,
          field: "typeName",
          type: "string",
        },
        {
          title: "长度",
          required: true,
          field: "length",
          type: "int",
        },
        {
          title: "宽度",
          required: true,
          field: "width",
          type: "int",
        },
      ],
      [
        {
          title: "高度",
          required: true,
          field: "height",
          type: "int",
        },
        {
          title: "货位占用数",
          required: true,
          field: "locaitonCount",
          type: "int",
        },
      ],
    ]);
    const searchFormFields = ref({
      palletType: "",
      typeName: "",
    });
    const searchFormOptions = ref([
      [
        { title: "托盘类型", field: "palletType", type: "like" },
        { title: "托盘类型名称", field: "typeName", type: "like" },
      ],
    ]);
    const columns = ref([
      {
        field: "id",
        title: "Id",
        type: "int",
        width: 90,
        hidden: true,
        readonly: true,
        require: true,
        align: "left",
      },
      {
        field: "palletType",
        title: "托盘类型",
        type: "int",
        width: 90,
        align: "left",
      },
      {
        field: "codeStartStr",
        title: "托盘号起始字符串",
        type: "string",
        width: 150,
        align: "left",
      },
      {
        field: "typeName",
        title: "托盘类型名称",
        type: "string",
        width: 150,
        align: "left",
      },
      {
        field: "length",
        title: "长度",
        type: "int",
        width: 90,
        align: "left",
      },
      {
        field: "width",
        title: "宽度",
        type: "int",
        width: 90,
        align: "left",
      },
      {
        field: "height",
        title: "高度",
        type: "int",
        width: 90,
        align: "left",
      },
      {
        field: "enbale",
        title: "状态",
        type: "int",
        width: 90,
        align: "left",
      },
      {
        field: "warehouseId",
        title: "仓库编号",
        type: "int",
        width: 180,
        align: "left",
      },
      {
        field: "sortNum",
        title: "所属层",
        type: "string",
        width: 120,
        align: "left",
      },
      {
        field: "locaitonCount",
        title: "占用货位数",
        type: "int",
        width: 120,
        align: "left",
      },
      {
        field: "isOdd",
        title: "大托盘是否放奇数列",
        type: "bit",
        width: 90,
        align: "left",
      },
      {
        field: "creater",
        title: "创建人",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "createDate",
        title: "创建时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "modifier",
        title: "修改人",
        type: "string",
        width: 100,
        align: "left",
      },
      {
        field: "modifyDate",
        title: "修改时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
    ]);
    const detail = ref({
      cnName: "#detailCnName",
      table: "",
      columns: [],
      sortName: "",
    });
    return {
      table,
      extend,
      editFormFields,
      editFormOptions,
      searchFormFields,
      searchFormOptions,
      columns,
      detail,
    };
  },
});
</script>
WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue
@@ -134,6 +134,14 @@
        bind: { key: "inOrderType", data: [] },
      },
      {
        field: "inoutType",
        title: "单据大类",
        type: "string",
        width: 150,
        align: "left",
        bind: { key: "inoutType", data: [] },
      },
      {
        field: "orderStatus",
        title: "单据状态",
        type: "decimal",
WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.metadata.v9.bin
Binary files differ
WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.projects.v9.bin
Binary files differ
WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.strings.v9.bin
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/DesignTimeBuild/.dtbcache.v2
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/486ac3e4-dcd1-4ae8-9cbb-0e0bef797122.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/6504b712-6337-442d-9a51-3fcc76af9ae9.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/842d2312-f96a-4640-bb7d-29293f202db6.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/b0c40d1d-a1d5-4d22-9554-68c90ed643aa.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/f632678d-15fb-4e3b-adb6-666f4762b82e.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.futdcache.v2
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.suo
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json
@@ -3,88 +3,40 @@
  "WorkspaceRootPath": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\inbound\\dt_receiveorder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\inbound\\dt_receiveorder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\stock\\dt_stockinfodetail.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\stock\\dt_stockinfodetail.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{9144117D-3D55-4250-9CF5-C6A8D8A07062}|WIDESEA_BasicRepository\\WIDESEA_BasicRepository.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_basicrepository\\pallettypeinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9144117D-3D55-4250-9CF5-C6A8D8A07062}|WIDESEA_BasicRepository\\WIDESEA_BasicRepository.csproj|solutionrelative:widesea_basicrepository\\pallettypeinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|solutionrelative:widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_recordservice\\service\\stockquantitychangerecordservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|solutionrelative:widesea_recordservice\\service\\stockquantitychangerecordservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\assignlocation\\locationinfoservice_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\assignlocation\\locationinfoservice_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\record\\dt_stockquantitychangerecord.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\record\\dt_stockquantitychangerecord.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\locationinfoservice_common.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\locationinfoservice_common.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{6E0E5856-A399-4791-9EAD-84ABC43F35AA}|WIDESEA_IRecordService\\WIDESEA_IRecordService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_irecordservice\\istockquantitychangerecordservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{6E0E5856-A399-4791-9EAD-84ABC43F35AA}|WIDESEA_IRecordService\\WIDESEA_IRecordService.csproj|solutionrelative:widesea_irecordservice\\istockquantitychangerecordservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\basic\\pallettypeinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\basic\\pallettypeinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_recordservice\\base\\stockquantitychangerecordservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|solutionrelative:widesea_recordservice\\base\\stockquantitychangerecordservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_common\\taskenum\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\taskenum\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_stockservice\\service\\stockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|solutionrelative:widesea_stockservice\\service\\stockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_core\\enums\\stockenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\enums\\stockenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\basic\\locationinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\basic\\locationinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\outbound\\outboundordercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\outbound\\outboundordercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\basic\\dt_materielinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\basic\\dt_materielinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_outboundservice\\service\\outboundorderdetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|solutionrelative:widesea_outboundservice\\service\\outboundorderdetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_inboundservice\\base\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|solutionrelative:widesea_inboundservice\\base\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\inbound\\dt_inboundorder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\inbound\\dt_inboundorder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\stock\\stockviewcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\stock\\stockviewcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\record\\locationstatuschangerecordcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\record\\locationstatuschangerecordcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\record\\stockquantitychangerecordcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\record\\stockquantitychangerecordcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_recordservice\\base\\locationstatuschangerecordsetvice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|solutionrelative:widesea_recordservice\\base\\locationstatuschangerecordsetvice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_recordservice\\service\\locationstatuschangerecordsetvice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|solutionrelative:widesea_recordservice\\service\\locationstatuschangerecordsetvice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\stock\\dt_stockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\stock\\dt_stockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_inboundservice\\service\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|solutionrelative:widesea_inboundservice\\service\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\partialtaskservice_inbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -95,28 +47,48 @@
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\partialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\basic\\dt_locationinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\basic\\dt_locationinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\base\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\base\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_core\\enums\\warehouseenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\enums\\warehouseenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_dto\\task\\wmstaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\task\\wmstaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\task_htyservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\task_htyservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_common\\agvtaskfeedbackmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\agvtaskfeedbackmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\taskinfo\\dt_task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\taskinfo\\dt_task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{5F260E03-095A-4870-8419-5B72CB62929E}|WIDESEA_IBasicService\\WIDESEA_IBasicService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_ibasicservice\\ilocationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{5F260E03-095A-4870-8419-5B72CB62929E}|WIDESEA_IBasicService\\WIDESEA_IBasicService.csproj|solutionrelative:widesea_ibasicservice\\ilocationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_outboundservice\\service\\outboundorderdetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|solutionrelative:widesea_outboundservice\\service\\outboundorderdetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_dto\\task\\wmstaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\task\\wmstaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_core\\enums\\pallettypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\enums\\pallettypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{B9E62A73-1270-4FFC-B23C-F75C075D8460}|WIDESEA_StockRepository\\WIDESEA_StockRepository.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_stockrepository\\stockinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{B9E62A73-1270-4FFC-B23C-F75C075D8460}|WIDESEA_StockRepository\\WIDESEA_StockRepository.csproj|solutionrelative:widesea_stockrepository\\stockinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -126,367 +98,286 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 27,
          "SelectedChildIndex": 6,
          "Children": [
            {
              "$type": "Document",
              "DocumentIndex": 20,
              "Title": "Dt_StockInfo.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAABwAAAAoAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:58:12.881Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "Title": "StockInfoService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\Service\\StockInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_StockService\\Service\\StockInfoService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\Service\\StockInfoService.cs",
              "RelativeToolTip": "WIDESEA_StockService\\Service\\StockInfoService.cs",
              "ViewState": "AgIAACkAAAAAAAAAAAAkwEIAAABQAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:54:04.24Z",
              "EditorCaption": ""
              "$type": "Bookmark",
              "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "Dt_StockInfoDetail.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfoDetail.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfoDetail.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfoDetail.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfoDetail.cs",
              "ViewState": "AgIAAC0AAAAAAAAAAAA4wDgAAABHAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:50:21.475Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "Dt_StockQuantityChangeRecord.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Record\\Dt_StockQuantityChangeRecord.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Record\\Dt_StockQuantityChangeRecord.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Record\\Dt_StockQuantityChangeRecord.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Record\\Dt_StockQuantityChangeRecord.cs",
              "ViewState": "AgIAABoAAAAAAAAAAIAywCwAAAAlAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:49:43.872Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "StockEnum.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\StockEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\Enums\\StockEnum.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\StockEnum.cs",
              "RelativeToolTip": "WIDESEA_Core\\Enums\\StockEnum.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAAAA8AAAAWAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:48:01.473Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "IStockQuantityChangeRecordService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IRecordService\\IStockQuantityChangeRecordService.cs",
              "RelativeDocumentMoniker": "WIDESEA_IRecordService\\IStockQuantityChangeRecordService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IRecordService\\IStockQuantityChangeRecordService.cs",
              "RelativeToolTip": "WIDESEA_IRecordService\\IStockQuantityChangeRecordService.cs",
              "ViewState": "AgIAAAIAAAAAAAAAAAAgwBAAAAAhAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:47:00.001Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "StockQuantityChangeRecordService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Service\\StockQuantityChangeRecordService.cs",
              "RelativeDocumentMoniker": "WIDESEA_RecordService\\Service\\StockQuantityChangeRecordService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Service\\StockQuantityChangeRecordService.cs*",
              "RelativeToolTip": "WIDESEA_RecordService\\Service\\StockQuantityChangeRecordService.cs*",
              "ViewState": "AgIAAA0AAAAAAAAAAAAtwB8AAABQAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:35:11.404Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 19,
              "Title": "LocationStatusChangeRecordSetvice.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Service\\LocationStatusChangeRecordSetvice.cs",
              "RelativeDocumentMoniker": "WIDESEA_RecordService\\Service\\LocationStatusChangeRecordSetvice.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Service\\LocationStatusChangeRecordSetvice.cs",
              "RelativeToolTip": "WIDESEA_RecordService\\Service\\LocationStatusChangeRecordSetvice.cs",
              "ViewState": "AgIAABMAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:35:10.603Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "Title": "StockQuantityChangeRecordService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Base\\StockQuantityChangeRecordService.cs",
              "RelativeDocumentMoniker": "WIDESEA_RecordService\\Base\\StockQuantityChangeRecordService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Base\\StockQuantityChangeRecordService.cs",
              "RelativeToolTip": "WIDESEA_RecordService\\Base\\StockQuantityChangeRecordService.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAuwA8AAACNAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:35:09.807Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 18,
              "Title": "LocationStatusChangeRecordSetvice.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Base\\LocationStatusChangeRecordSetvice.cs",
              "RelativeDocumentMoniker": "WIDESEA_RecordService\\Base\\LocationStatusChangeRecordSetvice.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Base\\LocationStatusChangeRecordSetvice.cs",
              "RelativeToolTip": "WIDESEA_RecordService\\Base\\LocationStatusChangeRecordSetvice.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:35:08.92Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 17,
              "Title": "StockQuantityChangeRecordController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Record\\StockQuantityChangeRecordController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Record\\StockQuantityChangeRecordController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Record\\StockQuantityChangeRecordController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Record\\StockQuantityChangeRecordController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:34:57.504Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 16,
              "Title": "LocationStatusChangeRecordController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Record\\LocationStatusChangeRecordController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Record\\LocationStatusChangeRecordController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Record\\LocationStatusChangeRecordController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Record\\LocationStatusChangeRecordController.cs",
              "Title": "PalletTypeInfoRepository.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicRepository\\PalletTypeInfoRepository.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicRepository\\PalletTypeInfoRepository.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicRepository\\PalletTypeInfoRepository.cs",
              "RelativeToolTip": "WIDESEA_BasicRepository\\PalletTypeInfoRepository.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:34:56.091Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 15,
              "Title": "StockViewController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Stock\\StockViewController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Stock\\StockViewController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Stock\\StockViewController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Stock\\StockViewController.cs",
              "ViewState": "AgIAAAIAAAAAAAAAAAAYwB4AAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:24:17.428Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 14,
              "Title": "Dt_InboundOrder.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Inbound\\Dt_InboundOrder.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Inbound\\Dt_InboundOrder.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Inbound\\Dt_InboundOrder.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Inbound\\Dt_InboundOrder.cs",
              "ViewState": "AgIAABkAAAAAAAAAAAAIwCwAAAAwAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:20:30.323Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 13,
              "Title": "InboundOrderService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "RelativeDocumentMoniker": "WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "RelativeToolTip": "WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "ViewState": "AgIAAHAAAAAAAAAAAAAhwIkAAAAuAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:02:03.893Z",
              "WhenOpened": "2025-07-11T06:26:56.003Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "Title": "OutboundOrderDetailService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "RelativeDocumentMoniker": "WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "RelativeToolTip": "WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "ViewState": "AgIAABUAAAAAAAAAAAAqwCYAAAApAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:02:03.922Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 11,
              "Title": "Dt_MaterielInfo.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Basic\\Dt_MaterielInfo.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Basic\\Dt_MaterielInfo.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Basic\\Dt_MaterielInfo.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Basic\\Dt_MaterielInfo.cs",
              "ViewState": "AgIAAAsAAAAAAAAAAAAxwBoAAAAhAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:13:33.013Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 10,
              "Title": "OutboundOrderController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T02:49:47.227Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 9,
              "Title": "LocationInfoController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "ViewState": "AgIAADMAAAAAAAAAAAAcwD4AAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T09:22:54.013Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 28,
              "Title": "WMSTaskDTO.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "RelativeDocumentMoniker": "WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "RelativeToolTip": "WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvw8AAAAWAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T09:09:50.115Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 26,
              "Title": "ILocationInfoService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IBasicService\\ILocationInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_IBasicService\\ILocationInfoService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IBasicService\\ILocationInfoService.cs",
              "RelativeToolTip": "WIDESEA_IBasicService\\ILocationInfoService.cs",
              "ViewState": "AgIAABgAAAAAAAAAAAA1wCkAAABCAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T09:07:56.247Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 23,
              "Title": "Dt_LocationInfo.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Basic\\Dt_LocationInfo.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Basic\\Dt_LocationInfo.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Basic\\Dt_LocationInfo.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Basic\\Dt_LocationInfo.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAAAA8AAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T09:03:41.443Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 25,
              "Title": "Dt_Task.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAABgAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T09:03:30.993Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 24,
              "Title": "LocationInfoService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Base\\LocationInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Base\\LocationInfoService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Base\\LocationInfoService.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Base\\LocationInfoService.cs",
              "ViewState": "AgIAAAIBAAAAAAAAAAAswBwBAAALAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T09:02:07.969Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 27,
              "Title": "TaskController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ViewState": "AgIAACYAAAAAAAAAAAAQwDAAAAAWAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T08:54:59.398Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "ITaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeToolTip": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAADMAAAAoAAAAAAAAAA==",
              "Title": "TaskEnumHelper.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskEnumHelper.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\TaskEnum\\TaskEnumHelper.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskEnumHelper.cs",
              "RelativeToolTip": "WIDESEA_Common\\TaskEnum\\TaskEnumHelper.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T08:54:50.355Z",
              "WhenOpened": "2025-07-11T06:10:37.063Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 22,
              "DocumentIndex": 6,
              "Title": "TaskStatusEnum.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskStatusEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\TaskEnum\\TaskStatusEnum.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskStatusEnum.cs",
              "RelativeToolTip": "WIDESEA_Common\\TaskEnum\\TaskStatusEnum.cs",
              "ViewState": "AgIAAHkAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-11T06:09:10.437Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "PalletTypeInfoController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\PalletTypeInfoController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Basic\\PalletTypeInfoController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\PalletTypeInfoController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Basic\\PalletTypeInfoController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-11T06:08:37.288Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "Title": "ServiceBase.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseServices\\ServiceBase.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\BaseServices\\ServiceBase.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseServices\\ServiceBase.cs",
              "RelativeToolTip": "WIDESEA_Core\\BaseServices\\ServiceBase.cs",
              "ViewState": "AgIAACUAAAAAAAAAAAA0wD4AAAAeAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-11T06:04:27.867Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "Dt_ReceiveOrder.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Inbound\\Dt_ReceiveOrder.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Inbound\\Dt_ReceiveOrder.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Inbound\\Dt_ReceiveOrder.cs*",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Inbound\\Dt_ReceiveOrder.cs*",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-11T06:00:59.633Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 16,
              "Title": "AGVTaskFeedBackModel.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\AGVTaskFeedBackModel.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\AGVTaskFeedBackModel.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\AGVTaskFeedBackModel.cs",
              "RelativeToolTip": "WIDESEA_Common\\AGVTaskFeedBackModel.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-04T06:00:20.735Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "Title": "WarehouseEnum.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\WarehouseEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\Enums\\WarehouseEnum.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\WarehouseEnum.cs",
              "RelativeToolTip": "WIDESEA_Core\\Enums\\WarehouseEnum.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAPAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-02T02:08:19.369Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 10,
              "Title": "PartialTaskService_Outbound.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "ViewState": "AgIAAMcAAAAAAAAAAAAnwMEAAAAuAAAAAAAAAA==",
              "ViewState": "AgIAACsAAAAAAAAAAAAAwDUAAAAVAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T06:47:52.816Z",
              "WhenOpened": "2025-07-02T02:05:02.485Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAK8BAAAAAAAAAAAAALQBAAAPAAAAAAAAAA==",
              "DocumentIndex": 18,
              "Title": "OutboundOrderDetailService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "RelativeDocumentMoniker": "WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "RelativeToolTip": "WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "ViewState": "AgIAAJUAAAAAAAAAAAAIwLAAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T06:36:58.119Z",
              "EditorCaption": ""
              "WhenOpened": "2025-07-02T02:05:02.503Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 19,
              "Title": "CustomProfile.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAAABoAAAAtAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-01T09:15:35.905Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 20,
              "Title": "PalletTypeEnum.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\PalletTypeEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\Enums\\PalletTypeEnum.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\PalletTypeEnum.cs",
              "RelativeToolTip": "WIDESEA_Core\\Enums\\PalletTypeEnum.cs",
              "ViewState": "AgIAAAgAAAAAAAAAAAAqwCMAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-06T01:41:58.515Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "InboundOrderService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Service\\InboundOrderService.cs",
              "RelativeDocumentMoniker": "WIDESEA_InboundService\\Service\\InboundOrderService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Service\\InboundOrderService.cs",
              "RelativeToolTip": "WIDESEA_InboundService\\Service\\InboundOrderService.cs",
              "ViewState": "AgIAAKUAAAAAAAAAAAArwNoAAAAdAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-06T01:30:40.534Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 21,
              "Title": "StockInfoRepository.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockRepository\\StockInfoRepository.cs",
              "RelativeDocumentMoniker": "WIDESEA_StockRepository\\StockInfoRepository.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockRepository\\StockInfoRepository.cs",
              "RelativeToolTip": "WIDESEA_StockRepository\\StockInfoRepository.cs",
              "ViewState": "AgIAACQAAAAAAAAAAAAlwDkAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-06T01:23:57.608Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 17,
              "Title": "Dt_Task.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAAAA4AAAARAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-06T01:21:15.122Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 15,
              "Title": "Task_HtyService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\Task_HtyService.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\Task_HtyService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\Task_HtyService.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\Task_HtyService.cs",
              "ViewState": "AgIAAB8AAAAAAAAAAAASwE0AAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-06T01:21:26.615Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 14,
              "Title": "WMSTaskDTO.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "RelativeDocumentMoniker": "WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "RelativeToolTip": "WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "ViewState": "AgIAAFoAAAAAAAAAAAAAABAAAAATAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-06T01:18:00.069Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "LocationInfoService_Common.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "ViewState": "AgIAAB4AAAAAAAAAAAAswDsAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-05T08:00:59.718Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "LocationInfoService_BC.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "ViewState": "AgIAACwAAAAAAAAAAAAiwCYAAAAmAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-05T08:00:59.776Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 13,
              "Title": "LocationInfoService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\LocationInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\LocationInfoService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\LocationInfoService.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\LocationInfoService.cs",
              "ViewState": "AgIAACEAAAAAAAAAAAAswO8AAAAKAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-05T07:59:30.553Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 9,
              "Title": "PartialTaskService_Inbound.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ViewState": "AgIAAD4AAAAAAAAAAAAqwE8AAAAoAAAAAAAAAA==",
              "ViewState": "AgIAAKsAAAAAAAAAAAAUwJ0AAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T06:36:51.492Z",
              "WhenOpened": "2025-06-05T07:54:51.319Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 11,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAFcAAAAAAAAAAAAkwFcAAAA4AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-05-29T02:46:54.347Z"
            }
          ]
        }
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json
@@ -3,88 +3,36 @@
  "WorkspaceRootPath": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{9144117D-3D55-4250-9CF5-C6A8D8A07062}|WIDESEA_BasicRepository\\WIDESEA_BasicRepository.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_basicrepository\\pallettypeinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9144117D-3D55-4250-9CF5-C6A8D8A07062}|WIDESEA_BasicRepository\\WIDESEA_BasicRepository.csproj|solutionrelative:widesea_basicrepository\\pallettypeinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\stock\\dt_stockinfodetail.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\stock\\dt_stockinfodetail.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|solutionrelative:widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\assignlocation\\locationinfoservice_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\assignlocation\\locationinfoservice_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_recordservice\\service\\stockquantitychangerecordservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|solutionrelative:widesea_recordservice\\service\\stockquantitychangerecordservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\locationinfoservice_common.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\locationinfoservice_common.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\record\\dt_stockquantitychangerecord.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\record\\dt_stockquantitychangerecord.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\basic\\pallettypeinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\basic\\pallettypeinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{6E0E5856-A399-4791-9EAD-84ABC43F35AA}|WIDESEA_IRecordService\\WIDESEA_IRecordService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_irecordservice\\istockquantitychangerecordservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{6E0E5856-A399-4791-9EAD-84ABC43F35AA}|WIDESEA_IRecordService\\WIDESEA_IRecordService.csproj|solutionrelative:widesea_irecordservice\\istockquantitychangerecordservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_common\\taskenum\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\taskenum\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_recordservice\\base\\stockquantitychangerecordservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|solutionrelative:widesea_recordservice\\base\\stockquantitychangerecordservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_stockservice\\service\\stockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|solutionrelative:widesea_stockservice\\service\\stockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_core\\enums\\stockenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\enums\\stockenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\basic\\locationinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\basic\\locationinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\outbound\\outboundordercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\outbound\\outboundordercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\basic\\dt_materielinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\basic\\dt_materielinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_outboundservice\\service\\outboundorderdetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|solutionrelative:widesea_outboundservice\\service\\outboundorderdetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_inboundservice\\base\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|solutionrelative:widesea_inboundservice\\base\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\inbound\\dt_inboundorder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\inbound\\dt_inboundorder.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\stock\\stockviewcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\stock\\stockviewcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\record\\locationstatuschangerecordcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\record\\locationstatuschangerecordcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\record\\stockquantitychangerecordcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\record\\stockquantitychangerecordcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_recordservice\\base\\locationstatuschangerecordsetvice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|solutionrelative:widesea_recordservice\\base\\locationstatuschangerecordsetvice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_recordservice\\service\\locationstatuschangerecordsetvice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{A343A2C5-995D-45F1-A3E5-20495DD3F615}|WIDESEA_RecordService\\WIDESEA_RecordService.csproj|solutionrelative:widesea_recordservice\\service\\locationstatuschangerecordsetvice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\stock\\dt_stockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\stock\\dt_stockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_inboundservice\\service\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9619D9B0-7E5B-42F0-BA2C-B840B3E1C258}|WIDESEA_InboundService\\WIDESEA_InboundService.csproj|solutionrelative:widesea_inboundservice\\service\\inboundorderservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\partialtaskservice_inbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -95,28 +43,48 @@
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\partialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\basic\\dt_locationinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\basic\\dt_locationinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\base\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\base\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_core\\enums\\warehouseenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\enums\\warehouseenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_basicservice\\service\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\service\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_dto\\task\\wmstaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\task\\wmstaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\task_htyservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\task_htyservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_common\\agvtaskfeedbackmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\agvtaskfeedbackmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_model\\models\\taskinfo\\dt_task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\taskinfo\\dt_task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{5F260E03-095A-4870-8419-5B72CB62929E}|WIDESEA_IBasicService\\WIDESEA_IBasicService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_ibasicservice\\ilocationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{5F260E03-095A-4870-8419-5B72CB62929E}|WIDESEA_IBasicService\\WIDESEA_IBasicService.csproj|solutionrelative:widesea_ibasicservice\\ilocationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_outboundservice\\service\\outboundorderdetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{1B884AD3-7E67-44CD-B182-DEECDD671DD2}|WIDESEA_OutboundService\\WIDESEA_OutboundService.csproj|solutionrelative:widesea_outboundservice\\service\\outboundorderdetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_wmsserver\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_dto\\task\\wmstaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\task\\wmstaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_core\\enums\\pallettypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\enums\\pallettypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{B9E62A73-1270-4FFC-B23C-F75C075D8460}|WIDESEA_StockRepository\\WIDESEA_StockRepository.csproj|e:\\khgithub\\jianliku\\wms\\widesea_wmsserver\\widesea_stockrepository\\stockinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{B9E62A73-1270-4FFC-B23C-F75C075D8460}|WIDESEA_StockRepository\\WIDESEA_StockRepository.csproj|solutionrelative:widesea_stockrepository\\stockinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -126,366 +94,276 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 27,
          "SelectedChildIndex": 1,
          "Children": [
            {
              "$type": "Document",
              "DocumentIndex": 20,
              "Title": "Dt_StockInfo.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAABwAAAAoAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:58:12.881Z"
              "$type": "Bookmark",
              "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "Title": "StockInfoService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\Service\\StockInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_StockService\\Service\\StockInfoService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\Service\\StockInfoService.cs",
              "RelativeToolTip": "WIDESEA_StockService\\Service\\StockInfoService.cs",
              "ViewState": "AgIAACkAAAAAAAAAAAAkwEIAAABQAAAAAAAAAA==",
              "DocumentIndex": 0,
              "Title": "PalletTypeInfoRepository.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicRepository\\PalletTypeInfoRepository.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicRepository\\PalletTypeInfoRepository.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicRepository\\PalletTypeInfoRepository.cs",
              "RelativeToolTip": "WIDESEA_BasicRepository\\PalletTypeInfoRepository.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:54:04.24Z",
              "WhenOpened": "2025-07-11T06:26:56.003Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "Dt_StockInfoDetail.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfoDetail.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfoDetail.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfoDetail.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfoDetail.cs",
              "ViewState": "AgIAAC0AAAAAAAAAAAA4wDgAAABHAAAAAAAAAA==",
              "Title": "TaskEnumHelper.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskEnumHelper.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\TaskEnum\\TaskEnumHelper.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskEnumHelper.cs",
              "RelativeToolTip": "WIDESEA_Common\\TaskEnum\\TaskEnumHelper.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:50:21.475Z",
              "WhenOpened": "2025-07-11T06:10:37.063Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "TaskStatusEnum.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskStatusEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\TaskEnum\\TaskStatusEnum.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskStatusEnum.cs",
              "RelativeToolTip": "WIDESEA_Common\\TaskEnum\\TaskStatusEnum.cs",
              "ViewState": "AgIAAHkAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-11T06:09:10.437Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "Dt_StockQuantityChangeRecord.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Record\\Dt_StockQuantityChangeRecord.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Record\\Dt_StockQuantityChangeRecord.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Record\\Dt_StockQuantityChangeRecord.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Record\\Dt_StockQuantityChangeRecord.cs",
              "ViewState": "AgIAABoAAAAAAAAAAIAywCwAAAAlAAAAAAAAAA==",
              "Title": "PalletTypeInfoController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\PalletTypeInfoController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Basic\\PalletTypeInfoController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\PalletTypeInfoController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Basic\\PalletTypeInfoController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:49:43.872Z",
              "WhenOpened": "2025-07-11T06:08:37.288Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "StockEnum.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\StockEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\Enums\\StockEnum.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\StockEnum.cs",
              "RelativeToolTip": "WIDESEA_Core\\Enums\\StockEnum.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAAAA8AAAAWAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:48:01.473Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "IStockQuantityChangeRecordService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IRecordService\\IStockQuantityChangeRecordService.cs",
              "RelativeDocumentMoniker": "WIDESEA_IRecordService\\IStockQuantityChangeRecordService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IRecordService\\IStockQuantityChangeRecordService.cs",
              "RelativeToolTip": "WIDESEA_IRecordService\\IStockQuantityChangeRecordService.cs",
              "ViewState": "AgIAAAIAAAAAAAAAAAAgwBAAAAAhAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:47:00.001Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "StockQuantityChangeRecordService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Service\\StockQuantityChangeRecordService.cs",
              "RelativeDocumentMoniker": "WIDESEA_RecordService\\Service\\StockQuantityChangeRecordService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Service\\StockQuantityChangeRecordService.cs",
              "RelativeToolTip": "WIDESEA_RecordService\\Service\\StockQuantityChangeRecordService.cs",
              "ViewState": "AgIAAA0AAAAAAAAAAAAtwB8AAABQAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:35:11.404Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 19,
              "Title": "LocationStatusChangeRecordSetvice.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Service\\LocationStatusChangeRecordSetvice.cs",
              "RelativeDocumentMoniker": "WIDESEA_RecordService\\Service\\LocationStatusChangeRecordSetvice.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Service\\LocationStatusChangeRecordSetvice.cs",
              "RelativeToolTip": "WIDESEA_RecordService\\Service\\LocationStatusChangeRecordSetvice.cs",
              "ViewState": "AgIAABMAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:35:10.603Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "Title": "StockQuantityChangeRecordService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Base\\StockQuantityChangeRecordService.cs",
              "RelativeDocumentMoniker": "WIDESEA_RecordService\\Base\\StockQuantityChangeRecordService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Base\\StockQuantityChangeRecordService.cs",
              "RelativeToolTip": "WIDESEA_RecordService\\Base\\StockQuantityChangeRecordService.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAuwA8AAACNAAAAAAAAAA==",
              "Title": "ServiceBase.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseServices\\ServiceBase.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\BaseServices\\ServiceBase.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseServices\\ServiceBase.cs",
              "RelativeToolTip": "WIDESEA_Core\\BaseServices\\ServiceBase.cs",
              "ViewState": "AgIAACUAAAAAAAAAAAA0wD4AAAAeAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:35:09.807Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 18,
              "Title": "LocationStatusChangeRecordSetvice.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Base\\LocationStatusChangeRecordSetvice.cs",
              "RelativeDocumentMoniker": "WIDESEA_RecordService\\Base\\LocationStatusChangeRecordSetvice.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_RecordService\\Base\\LocationStatusChangeRecordSetvice.cs",
              "RelativeToolTip": "WIDESEA_RecordService\\Base\\LocationStatusChangeRecordSetvice.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:35:08.92Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 17,
              "Title": "StockQuantityChangeRecordController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Record\\StockQuantityChangeRecordController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Record\\StockQuantityChangeRecordController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Record\\StockQuantityChangeRecordController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Record\\StockQuantityChangeRecordController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:34:57.504Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 16,
              "Title": "LocationStatusChangeRecordController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Record\\LocationStatusChangeRecordController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Record\\LocationStatusChangeRecordController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Record\\LocationStatusChangeRecordController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Record\\LocationStatusChangeRecordController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:34:56.091Z"
              "WhenOpened": "2025-07-11T06:04:27.867Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 15,
              "Title": "StockViewController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Stock\\StockViewController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Stock\\StockViewController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Stock\\StockViewController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Stock\\StockViewController.cs",
              "ViewState": "AgIAAAIAAAAAAAAAAAAYwB4AAAAIAAAAAAAAAA==",
              "Title": "AGVTaskFeedBackModel.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\AGVTaskFeedBackModel.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\AGVTaskFeedBackModel.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\AGVTaskFeedBackModel.cs",
              "RelativeToolTip": "WIDESEA_Common\\AGVTaskFeedBackModel.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:24:17.428Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 14,
              "Title": "Dt_InboundOrder.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Inbound\\Dt_InboundOrder.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Inbound\\Dt_InboundOrder.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Inbound\\Dt_InboundOrder.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Inbound\\Dt_InboundOrder.cs",
              "ViewState": "AgIAABkAAAAAAAAAAAAIwCwAAAAwAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:20:30.323Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 13,
              "Title": "InboundOrderService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "RelativeDocumentMoniker": "WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "RelativeToolTip": "WIDESEA_InboundService\\Base\\InboundOrderService.cs",
              "ViewState": "AgIAAHAAAAAAAAAAAAAhwIkAAAAuAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:02:03.893Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "Title": "OutboundOrderDetailService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "RelativeDocumentMoniker": "WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "RelativeToolTip": "WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "ViewState": "AgIAABUAAAAAAAAAAAAqwCYAAAApAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:02:03.922Z",
              "EditorCaption": ""
              "WhenOpened": "2025-07-04T06:00:20.735Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 11,
              "Title": "Dt_MaterielInfo.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Basic\\Dt_MaterielInfo.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Basic\\Dt_MaterielInfo.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Basic\\Dt_MaterielInfo.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Basic\\Dt_MaterielInfo.cs",
              "ViewState": "AgIAAAsAAAAAAAAAAAAxwBoAAAAhAAAAAAAAAA==",
              "Title": "WarehouseEnum.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\WarehouseEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\Enums\\WarehouseEnum.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\WarehouseEnum.cs",
              "RelativeToolTip": "WIDESEA_Core\\Enums\\WarehouseEnum.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAPAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T06:13:33.013Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 10,
              "Title": "OutboundOrderController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Outbound\\OutboundOrderController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-07T02:49:47.227Z"
              "WhenOpened": "2025-07-02T02:08:19.369Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 9,
              "Title": "LocationInfoController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "ViewState": "AgIAADMAAAAAAAAAAAAcwD4AAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T09:22:54.013Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 28,
              "Title": "WMSTaskDTO.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "RelativeDocumentMoniker": "WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "RelativeToolTip": "WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvw8AAAAWAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T09:09:50.115Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 26,
              "Title": "ILocationInfoService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IBasicService\\ILocationInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_IBasicService\\ILocationInfoService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_IBasicService\\ILocationInfoService.cs",
              "RelativeToolTip": "WIDESEA_IBasicService\\ILocationInfoService.cs",
              "ViewState": "AgIAABgAAAAAAAAAAAA1wCkAAABCAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T09:07:56.247Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 23,
              "Title": "Dt_LocationInfo.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Basic\\Dt_LocationInfo.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Basic\\Dt_LocationInfo.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Basic\\Dt_LocationInfo.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\Basic\\Dt_LocationInfo.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAAAA8AAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T09:03:41.443Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 25,
              "Title": "Dt_Task.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAABgAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T09:03:30.993Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 24,
              "Title": "LocationInfoService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Base\\LocationInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Base\\LocationInfoService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Base\\LocationInfoService.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Base\\LocationInfoService.cs",
              "ViewState": "AgIAAAIBAAAAAAAAAAAswBwBAAALAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T09:02:07.969Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 27,
              "Title": "TaskController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ViewState": "AgIAACYAAAAAAAAAAAAQwDAAAAAWAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T08:54:59.398Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "ITaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeToolTip": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAADMAAAAoAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T08:54:50.355Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 22,
              "Title": "PartialTaskService_Outbound.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "ViewState": "AgIAAMcAAAAAAAAAAAAnwMEAAAAuAAAAAAAAAA==",
              "ViewState": "AgIAACsAAAAAAAAAAAAAwDUAAAAVAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T06:47:52.816Z",
              "WhenOpened": "2025-07-02T02:05:02.485Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAK8BAAAAAAAAAAAAALQBAAAPAAAAAAAAAA==",
              "DocumentIndex": 17,
              "Title": "OutboundOrderDetailService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "RelativeDocumentMoniker": "WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "RelativeToolTip": "WIDESEA_OutboundService\\Service\\OutboundOrderDetailService.cs",
              "ViewState": "AgIAAJUAAAAAAAAAAAAIwLAAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T06:36:58.119Z",
              "WhenOpened": "2025-07-02T02:05:02.503Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 21,
              "DocumentIndex": 18,
              "Title": "CustomProfile.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Filter\\CustomProfile.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAAABoAAAAtAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-01T09:15:35.905Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 19,
              "Title": "PalletTypeEnum.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\PalletTypeEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\Enums\\PalletTypeEnum.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Enums\\PalletTypeEnum.cs",
              "RelativeToolTip": "WIDESEA_Core\\Enums\\PalletTypeEnum.cs",
              "ViewState": "AgIAAAgAAAAAAAAAAAAqwCMAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-06T01:41:58.515Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "Title": "InboundOrderService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Service\\InboundOrderService.cs",
              "RelativeDocumentMoniker": "WIDESEA_InboundService\\Service\\InboundOrderService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_InboundService\\Service\\InboundOrderService.cs",
              "RelativeToolTip": "WIDESEA_InboundService\\Service\\InboundOrderService.cs",
              "ViewState": "AgIAAKUAAAAAAAAAAAArwNoAAAAdAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-06T01:30:40.534Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 20,
              "Title": "StockInfoRepository.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockRepository\\StockInfoRepository.cs",
              "RelativeDocumentMoniker": "WIDESEA_StockRepository\\StockInfoRepository.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockRepository\\StockInfoRepository.cs",
              "RelativeToolTip": "WIDESEA_StockRepository\\StockInfoRepository.cs",
              "ViewState": "AgIAACQAAAAAAAAAAAAlwDkAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-06T01:23:57.608Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 16,
              "Title": "Dt_Task.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeToolTip": "WIDESEA_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAAAA4AAAARAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-06T01:21:15.122Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 14,
              "Title": "Task_HtyService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\Task_HtyService.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\Task_HtyService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\Task_HtyService.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\Task_HtyService.cs",
              "ViewState": "AgIAAB8AAAAAAAAAAAASwE0AAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-06T01:21:26.615Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 13,
              "Title": "WMSTaskDTO.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "RelativeDocumentMoniker": "WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "RelativeToolTip": "WIDESEA_DTO\\Task\\WMSTaskDTO.cs",
              "ViewState": "AgIAAFoAAAAAAAAAAAAAABAAAAATAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-06T01:18:00.069Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "LocationInfoService_Common.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\LocationInfoService_Common.cs",
              "ViewState": "AgIAAB4AAAAAAAAAAAAswDsAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-05T08:00:59.718Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "LocationInfoService_BC.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\AssignLocation\\LocationInfoService_BC.cs",
              "ViewState": "AgIAACwAAAAAAAAAAAAiwCYAAAAmAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-05T08:00:59.776Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "Title": "LocationInfoService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\LocationInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\Service\\LocationInfoService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\Service\\LocationInfoService.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\Service\\LocationInfoService.cs",
              "ViewState": "AgIAACEAAAAAAAAAAAAswO8AAAAKAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-06-05T07:59:30.553Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "PartialTaskService_Inbound.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ViewState": "AgIAAD4AAAAAAAAAAAAqwE8AAAAoAAAAAAAAAA==",
              "ViewState": "AgIAAKsAAAAAAAAAAAAUwJ0AAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-05T06:36:51.492Z",
              "WhenOpened": "2025-06-05T07:54:51.319Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 10,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAFcAAAAAAAAAAAAkwFcAAAA4AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-05-29T02:46:54.347Z",
              "EditorCaption": ""
            }
          ]
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/HierarchyCache.v1.txt
Binary files differ
WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs
@@ -23,7 +23,9 @@
        public ICachePointRepository CachePointRepository { get; }
        public BasicRepository(IAreaInfoRepository areaInfoRepository, ILocationInfoRepository locationInfoRepository, IMaterielInfoRepository materielInfoRepository, IRoadwayInfoRepository roadwayInfoRepository, IWarehouseRepository warehouseRepository, IAreaRouterRepository areaRouterRepository, ICachePointRepository cachePointRepository)
        public IPalletTypeInfoRepository PalletTypeInfoRepository { get; }
        public BasicRepository(IAreaInfoRepository areaInfoRepository, ILocationInfoRepository locationInfoRepository, IPalletTypeInfoRepository palletTypeInfoRepository, IMaterielInfoRepository materielInfoRepository, IRoadwayInfoRepository roadwayInfoRepository, IWarehouseRepository warehouseRepository, IAreaRouterRepository areaRouterRepository, ICachePointRepository cachePointRepository)
        {
            AreaInfoRepository = areaInfoRepository;
            LocationInfoRepository = locationInfoRepository;
@@ -32,6 +34,7 @@
            WarehouseRepository = warehouseRepository;
            AreaRouterRepository = areaRouterRepository;
            CachePointRepository = cachePointRepository;
            PalletTypeInfoRepository = palletTypeInfoRepository;
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/PalletTypeInfoRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_IBasicRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_BasicRepository
{
    public class PalletTypeInfoRepository : RepositoryBase<Dt_PalletTypeInfo>, IPalletTypeInfoRepository
    {
        public PalletTypeInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs
@@ -216,7 +216,7 @@
                                EnableStatus = EnableStatusEnum.Normal.ObjToInt(),
                                Layer = k + 1,
                                LocationStatus = LocationStatusEnum.Free.ObjToInt(),
                                LocationType = LocationTypeEnum.Cube.ObjToInt(),
                                //LocationType = LocationTypeEnum.Cube.ObjToInt(),
                                RoadwayNo = initializationLocationDTO.Roadway,
                                Row = i + 1,
                            };
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/PalletTypeInfoService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseServices;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_Model.Models;
namespace WIDESEA_BasicService.Base
{
    public partial class PalletTypeInfoService : ServiceBase<Dt_PalletTypeInfo, IPalletTypeInfoRepository>, IPalletTypeInfoService
    {
        public PalletTypeInfoService(IPalletTypeInfoRepository BaseDal) : base(BaseDal)
        {
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_BC.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,234 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar.Extensions;
using WIDESEA_Core.Enums;
using WIDESEA_Model.Models;
namespace WIDESEA_BasicService
{
    public partial class LocationInfoService
    {
        private readonly static object _locker_BC = new object();
        static List<LocationCache> locationCaches_BC = new List<LocationCache>();
        /// <summary>
        /// æ¿æä»“货位分配
        /// </summary>
        /// <param name="roadwayNo">巷道号</param>
        /// <param name="palletType">
        /// æ‰˜ç›˜ç±»åž‹
        /// </param>
        /// <returns></returns>
        public Dt_LocationInfo? AssignLocation_BC(string roadwayNo, int palletType, Dt_PalletTypeInfo palletTypeInfo, string beRelocationCode = "", int heightType = 0)
        {
            lock (_locker_BC)
            {
                List<LocationCache> removeItems = locationCaches_BC.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > 5).ToList();
                int count = removeItems.Count;
                for (int i = 0; i < count; i++)
                {
                    locationCaches_BC.Remove(removeItems[i]);
                }
                List<string> lockLocationCodes = locationCaches_BC.Select(x => x.LocationCode).ToList();
                List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == roadwayNo);
                if (locationInfos == null || locationInfos.Count == 0)
                {
                    throw new Exception($"未找到该巷道的货位信息,巷道号:{roadwayNo}");
                }
                if (!string.IsNullOrEmpty(beRelocationCode))
                {
                    Dt_LocationInfo? beRelocation = locationInfos.FirstOrDefault(x => x.LocationCode == beRelocationCode);
                    if (beRelocation == null)
                    {
                        throw new Exception($"未找到货位信息");
                    }
                    int maxDepth = locationInfos.Max(x => x.Depth);
                    int mathCurrentRow = beRelocation.Row - Convert.ToInt32(Math.Ceiling(beRelocation.Row / maxDepth / 2.0)) * maxDepth * 2;
                    if (mathCurrentRow <= maxDepth)
                    {
                        locationInfos = locationInfos.Where(x => x.Row - Convert.ToInt32(Math.Ceiling(x.Row / maxDepth / 2.0)) * maxDepth * 2 <= maxDepth).ToList();
                    }
                    else
                    {
                        locationInfos = locationInfos.Where(x => x.Row - Convert.ToInt32(Math.Ceiling(x.Row / maxDepth / 2.0)) * maxDepth * 2 > maxDepth).ToList();
                    }
                }
                //未定义类型的空货位
                List<Dt_LocationInfo> undefinedTypeEmptyLocations = locationInfos.Where(x => (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode)).OrderByDescending(x => x.Depth).ThenBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).ToList();
                List<Dt_LocationInfo> definedTypeEmptyLocations = locationInfos.Where(x => (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == palletType.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode)).OrderByDescending(x => x.Depth).ThenBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).ToList();
                //if (heightType == 1)
                //{
                //    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer <= 3).ToList();
                //    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer <= 3).ToList();
                //}
                //else if (heightType == 2)
                //{
                //    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer == 4).ToList();
                //    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer == 4).ToList();
                //}
                //else if (heightType == 3)
                //{
                //    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer == 5).ToList();
                //    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer == 5).ToList();
                //}
                //else
                //{
                //    undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => false).ToList();
                //    definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => false).ToList();
                //}
                if (palletTypeInfo.LocaitonCount == 2)
                {
                    if (roadwayNo != "SC01_BC")
                        definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Column % 2 == 1).ToList();
                    else
                        definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Column % 2 == 0).ToList();
                }
                if (definedTypeEmptyLocations.Any())
                {
                    for (int i = 0; i < definedTypeEmptyLocations.Count; i++)
                    {
                        Dt_LocationInfo definedTypeEmptyLocation = definedTypeEmptyLocations[i];
                        Dt_LocationInfo? locationInfo = GetUsableLocation_BC(locationInfos, definedTypeEmptyLocation, palletType, palletTypeInfo);
                        //判断货位两深及以上是否存在出库锁定货位
                        //if (locationInfo?.Depth == 1)
                        //{
                        //    Dt_LocationInfo? IsBebusyLocation = locationInfos.Where(x => x.Row == (locationInfo?.Row == 2 ? locationInfo?.Row - 1 : locationInfo?.Row + 1) && x.Column == locationInfo?.Column && x.Layer == locationInfo?.Layer).FirstOrDefault();
                        //    if (IsBebusyLocation != null && (IsBebusyLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt()))
                        //    {
                        //        continue;
                        //    }
                        //}
                        if (locationInfo != null)
                        {
                            locationCaches_BC.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                            return locationInfo;
                        }
                    }
                }
                if ((/*locationInfos.Count * weightValue_BC >= definedTypeLocations.Count &&*/ undefinedTypeEmptyLocations.Any()))//如果已定义类型货位未超过比例,且有未定义类型的货位
                {
                    if (palletTypeInfo.LocaitonCount == 2)
                    {
                        if (roadwayNo != "SC01_BC")
                            undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 1).ToList();
                        else
                            undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 0).ToList();
                        for (int i = 0; i < undefinedTypeEmptyLocations.Count; i++)
                        {
                            Dt_LocationInfo undefinedTypeEmptyLocation = undefinedTypeEmptyLocations[i];
                            Dt_LocationInfo? locationInfo = GetUsableLocation_BC(locationInfos, undefinedTypeEmptyLocation, palletType, palletTypeInfo);
                            //判断货位两深及以上是否存在出库锁定货位
                            if (locationInfo?.Depth == 1)
                            {
                                Dt_LocationInfo? IsBebusyLocation = locationInfos.Where(x => x.Row == (locationInfo?.Row == 2 ? locationInfo?.Row - 1 : locationInfo?.Row + 1) && x.Column == locationInfo?.Column && x.Layer == locationInfo?.Layer).FirstOrDefault();
                                if (IsBebusyLocation != null && (IsBebusyLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt()))
                                {
                                    continue;
                                }
                            }
                            if (locationInfo != null)
                            {
                                //UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, locationInfo.WarehouseId);
                                locationCaches_BC.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                                return locationInfo;
                            }
                        }
                    }
                }
                return null;
            }
        }
        /// <summary>
        /// èŽ·å–å¯ç”¨è´§ä½(测试架仓)
        /// </summary>
        /// <param name="locationInfos"></param>
        /// <param name="emptyLocation"></param>
        /// <param name="palletType"></param>
        /// <returns></returns>
        private Dt_LocationInfo? GetUsableLocation_BC(List<Dt_LocationInfo> locationInfos, Dt_LocationInfo emptyLocation, int palletType, Dt_PalletTypeInfo palletTypeInfo)
        {
            if (palletTypeInfo.LocaitonCount == 2)
            {
                Dt_LocationInfo? nearLocation = null;
                if (emptyLocation.RoadwayNo != "SC01_BC" && emptyLocation.Column % 2 == 1)
                    nearLocation = locationInfos.FirstOrDefault(x => x.Row == emptyLocation.Row && x.Layer == emptyLocation.Layer && x.Depth == emptyLocation.Depth && x.Column == emptyLocation.Column - 1);
                else if (emptyLocation.RoadwayNo == "SC01_BC" && emptyLocation.Column % 2 == 0)
                    nearLocation = locationInfos.FirstOrDefault(x => x.Row == emptyLocation.Row && x.Layer == emptyLocation.Layer && x.Depth == emptyLocation.Depth && x.Column == emptyLocation.Column + 1);
                if (nearLocation != null && DepthLocationIsEmpty_BC(locationInfos, nearLocation) != null)
                {
                    Dt_LocationInfo? locationInfo = DepthLocationIsEmpty_BC(locationInfos, emptyLocation);
                    if (locationInfo != null)
                    {
                        return locationInfo;
                    }
                }
            }
            else
            {
                Dt_LocationInfo? locationInfo = DepthLocationIsEmpty_BC(locationInfos, emptyLocation);
                if (locationInfo != null)
                {
                    return locationInfo;
                }
            }
            return null;
        }
        /// <summary>
        /// åˆ¤æ–­ä¸åŒæ·±åº¦çš„同组货位状态是否为空闲空位(测试架仓)
        /// </summary>
        /// <param name="locationInfos"></param>
        /// <param name="emptyLocation"></param>
        /// <returns></returns>
        private Dt_LocationInfo? DepthLocationIsEmpty_BC(List<Dt_LocationInfo> locationInfos, Dt_LocationInfo emptyLocation)
        {
            List<Dt_LocationInfo> locations = GetGroupLocations(locationInfos, emptyLocation);
            bool moreDepthFlag = false;
            bool littleDepthFlag = false;
            if (emptyLocation.LocationType == 0)
            {
                List<Dt_LocationInfo> moreDepth = locations.Where(x => x.Depth > emptyLocation.Depth).ToList();
                moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != 0) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= emptyLocation.Depth).ToList();
                littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != 0) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
            }
            else
            {
                List<Dt_LocationInfo> moreDepth = locations.Where(x => x.Depth > emptyLocation.Depth).ToList();
                moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != emptyLocation.LocationType) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= emptyLocation.Depth).ToList();
                littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != emptyLocation.LocationType) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
            }
            if (moreDepthFlag && littleDepthFlag)
            {
                return emptyLocation;
            }
            return null;
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,164 @@
using AutoMapper;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_Core.Utilities;
using WIDESEA_DTO.Basic;
using WIDESEA_IBasicRepository;
using WIDESEA_IRecordService;
using WIDESEA_IBasicService;
using WIDESEA_Model.Models;
namespace WIDESEA_BasicService
{
    public partial class LocationInfoService
    {
        public Dt_LocationInfo? AssignLocation(string roadwayNo, int palletType, int warehouseId, string beRelocationCode = "", int heightType = 0)
        {
            Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehouseId);
            if (warehouse == null)
            {
                throw new Exception($"未找到仓库信息");
            }
            Dt_PalletTypeInfo? palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouseId);
            if (palletTypeInfo == null)
            {
                if (warehouse.WarehouseCode == WarehouseEnum.SC01_BC.ToString())
                {
                    palletTypeInfo = new Dt_PalletTypeInfo()
                    {
                        LocaitonCount = 1,
                        PalletType = 1,
                        IsOdd = false,
                    };
                }
                else
                    throw new Exception($"请配置托盘类型信息");
            }
            return warehouse.WarehouseCode switch
            {
                "SC01_BC" => AssignLocation_BC(roadwayNo, palletType, palletTypeInfo, beRelocationCode, heightType),
                //"HA58" => AssignLocation_PP(roadwayNo, palletType, palletTypeInfo, beRelocationCode),
                //"HA152" => AssignLocation_GM(roadwayNo, palletType, palletTypeInfo, beRelocationCode),
                //"HA64" => AssignLocation_CSJ(roadwayNo, palletType, palletTypeInfo, beRelocationCode),
                //"HA154" => AssignLocation_ZH(roadwayNo, palletType, palletTypeInfo, beRelocationCode),
                //"HA153" => AssignLocation(roadwayNo),
                //"HA71" => AssignLocation(roadwayNo),
                //"HA60" => AssignLocation(roadwayNo),
                _ => throw new Exception($"未找到仓库货位分配方法")
            };
        }
        //private readonly static object _locker = new object();
        //private static List<LocationCache> locationCaches = new List<LocationCache>();
        /// <summary>
        ///
        /// </summary>
        /// <param name="roadwayNo"></param>
        /// <returns></returns>
        //public Dt_LocationInfo? AssignLocation(string roadwayNo)
        //{
        //    lock (_locker)
        //    {
        //        List<LocationCache> removeItems = locationCaches.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > 5).ToList();//查询添加静态变量超过5分钟的货位
        //        int count = removeItems.Count;
        //        for (int i = 0; i < count; i++)
        //        {
        //            locationCaches.Remove(removeItems[i]);//移除查询添加静态变量超过5分钟的货位
        //        }
        //        List<string> lockLocations = locationCaches.Select(x => x.LocationCode).ToList();
        //        List<Dt_LocationInfo> locationInfos = BaseDal.QueryData(x => x.RoadwayNo == roadwayNo);//查询巷道所有货位信息
        //        Dictionary<string, OrderByType> orderBy = new Dictionary<string, OrderByType>()
        //        {
        //            { nameof(Dt_LocationInfo.Layer),OrderByType.Asc },
        //            { nameof(Dt_LocationInfo.Column),OrderByType.Asc },
        //            { nameof(Dt_LocationInfo.Depth),OrderByType.Desc },
        //            { nameof(Dt_LocationInfo.Row),OrderByType.Asc }
        //        };
        //        return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//查询空货位信息并排除5分钟内分配的货位,根据层、列、深度、行排序
        //    }
        //}
        /// <summary>
        /// èŽ·å–ä¸åŒæ·±åº¦çš„åŒç»„è´§ä½ä¿¡æ¯
        /// </summary>
        /// <param name="locationInfos"></param>
        /// <param name="location"></param>
        /// <returns></returns>
        public List<Dt_LocationInfo> GetGroupLocations(List<Dt_LocationInfo> locationInfos, Dt_LocationInfo location)
        {
            List<Dt_LocationInfo> groupLocations = new List<Dt_LocationInfo>() { location };
            int maxDepth = locationInfos.Max(x => x.Depth);
            int row = location.Row;
            for (int j = location.Depth + 1; j <= maxDepth; j++)
            {
                row += 1;
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row);
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
                }
            }
            for (int j = location.Depth - 1; j >= 1; j--)
            {
                row -= 1;
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row);
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
                }
            }
            return groupLocations;
        }
        /// <summary>
        /// èŽ·å–ä¸åŒæ·±åº¦çš„åŒç»„è´§ä½ä¿¡æ¯
        /// </summary>
        /// <param name="location"></param>
        /// <returns></returns>
        //public List<Dt_LocationInfo> GetGroupLocations(Dt_LocationInfo location)
        //{
        //    List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == location.RoadwayNo && x.WarehouseId == location.WarehouseId);
        //    List<Dt_LocationInfo> groupLocations = new List<Dt_LocationInfo>() { location };
        //    int maxDepth = locationInfos.Max(x => x.Depth);
        //    int row = location.Row;
        //    for (int j = location.Depth + 1; j <= maxDepth; j++)
        //    {
        //        Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 1 || x.Row == row - 1));
        //        if (locationInfo != null)
        //        {
        //            groupLocations.Add(locationInfo);
        //        }
        //    }
        //    for (int j = location.Depth - 1; j >= 1; j--)
        //    {
        //        Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 1 || x.Row == row - 1));
        //        if (locationInfo != null)
        //        {
        //            groupLocations.Add(locationInfo);
        //        }
        //    }
        //    return groupLocations;
        //}
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskEnumHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common.TaskEnum
{
    public static class TaskEnumHelper
    {
        public static List<int> GetEnumIndexList(this Type type)
        {
            if (type is null) throw new ArgumentNullException("type");
            if (!type.IsEnum) return new List<int>();
            return Enum.GetValues(type).Cast<int>().ToList();
        }
        public static TaskTypeGroup GetTaskTypeGroup(this int taskType)
        {
            if (!int.TryParse(Enum.Parse<TaskOutboundTypeEnum>(taskType.ToString()).ToString(), out int result))
            {
                return TaskTypeGroup.OutbondGroup;
            }
            else if (!int.TryParse(Enum.Parse<TaskInboundTypeEnum>(taskType.ToString()).ToString(), out result))
            {
                return TaskTypeGroup.InboundGroup;
            }
            else if (!int.TryParse(Enum.Parse<TaskRelocationTypeEnum>(taskType.ToString()).ToString(), out result))
            {
                return TaskTypeGroup.RelocationGroup;
            }
            else if (!int.TryParse(Enum.Parse<TaskOtherTypeEnum>(taskType.ToString()).ToString(), out result))
            {
                return TaskTypeGroup.OtherGroup;
            }
            else
            {
                throw new NotImplementedException();
            }
        }
        public static int GetNextNotCompletedStatus<T>(this int currentStatus) where T : Enum
        {
            Type type = typeof(T);
            if (type is null) throw new ArgumentNullException();
            if (!type.IsEnum) return 0;
            if (type == typeof(TaskInStatusEnum))
            {
                List<int> taskInboundTypes = type.GetEnumIndexList();
                return taskInboundTypes.Where(x => x > currentStatus && x < (int)TaskInStatusEnum.InFinish).OrderBy(x => x).FirstOrDefault();
            }
            else if (type == typeof(TaskOutStatusEnum))
            {
                return type.GetEnumIndexList().Where(x => x > currentStatus && x < (int)TaskOutStatusEnum.OutFinish).OrderBy(x => x).FirstOrDefault();
            }
            else
            {
                throw new NotImplementedException();
            }
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,275 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common.TaskEnum
{
    public enum TaskInStatusEnum
    {
        /// <summary>
        /// æ–°å»ºå…¥åº“任务
        /// </summary>
        [Description("新建入库任务")]
        InNew = 200,
        /// <summary>
        /// ä¸‹å‘AGV入库任务
        /// </summary>
        [Description("下发AGV入库任务")]
        AGV_InSend = 205,
        /// <summary>
        /// AGV入库执行中
        /// </summary>
        [Description("AGV入库执行中")]
        AGV_InExecuting = 210,
        /// <summary>
        /// AGV入库完成
        /// </summary>
        [Description("AGV入库完成")]
        AGV_InFinish = 215,
        /// <summary>
        /// è¾“送线入库执行中
        /// </summary>
        [Description("输送线入库执行中")]
        Line_InExecuting = 220,
        /// <summary>
        /// è¾“送线入库完成
        /// </summary>
        [Description("输送线入库完成")]
        Line_InFinish = 225,
        /// <summary>
        /// å †åž›æœºå…¥åº“执行中
        /// </summary>
        [Description("堆垛机入库执行中")]
        SC_InExecuting = 230,
        /// <summary>
        /// å †åž›æœºå…¥åº“完成
        /// </summary>
        [Description("堆垛机入库完成")]
        SC_InFinish = 235,
        /// <summary>
        /// ç©¿æ¢­è½¦å…¥åº“执行中
        /// </summary>
        [Description("穿梭车入库执行中")]
        Car_InExecuting = 240,
        /// <summary>
        /// ç©¿æ¢­è½¦å…¥åº“完成
        /// </summary>
        [Description("穿梭车入库完成")]
        Car_InFinish = 245,
        /// <summary>
        /// å…¥åº“任务完成
        /// </summary>
        [Description("入库任务完成")]
        InFinish = 290,
        /// <summary>
        /// å…¥åº“任务挂起
        /// </summary>
        [Description("入库任务挂起")]
        InPending = 297,
        /// <summary>
        /// å…¥åº“任务取消
        /// </summary>
        [Description("入库任务取消")]
        InCancel = 298,
        /// <summary>
        /// å…¥åº“任务异常
        /// </summary>
        [Description("入库任务异常")]
        InException = 299,
    }
    public enum TaskOutStatusEnum
    {
        /// <summary>
        /// æ–°å»ºå‡ºåº“任务
        /// </summary>
        [Description("新建出库任务")]
        OutNew = 100,
        /// <summary>
        /// ç©¿æ¢­è½¦å‡ºåº“执行中
        /// </summary>
        [Description("穿梭车出库执行中")]
        Car_OutExecuting = 110,
        /// <summary>
        /// ç©¿æ¢­è½¦å‡ºåº“完成
        /// </summary>
        [Description("穿梭车出库完成")]
        Car_OutFinish = 115,
        /// <summary>
        /// å †åž›æœºå‡ºåº“执行中
        /// </summary>
        [Description("堆垛机出库执行中")]
        SC_OutExecuting = 120,
        /// <summary>
        /// å †åž›æœºå‡ºåº“完成
        /// </summary>
        [Description("堆垛机出库完成")]
        SC_OutFinish = 125,
        /// <summary>
        /// è¾“送线出库执行中
        /// </summary>
        [Description("输送线出库执行中")]
        Line_OutExecuting = 130,
        /// <summary>
        /// è¾“送线出库完成
        /// </summary>
        [Description("输送线出库完成")]
        Line_OutFinish = 135,
        /// <summary>
        /// ä¸‹å‘AGV出库任务
        /// </summary>
        [Description("下发AGV出库任务")]
        AGV_OutSend = 140,
        /// <summary>
        /// AGV出库执行中
        /// </summary>
        [Description("AGV出库执行中")]
        AGV_OutExecuting = 145,
        /// <summary>
        /// AGV出库完成
        /// </summary>
        [Description("AGV出库完成")]
        AGV_OutFinish = 150,
        /// <summary>
        /// å‡ºåº“任务完成
        /// </summary>
        [Description("出库任务完成")]
        OutFinish = 190,
        /// <summary>
        /// å‡ºåº“任务挂起
        /// </summary>
        [Description("出库任务挂起")]
        OutPending = 197,
        /// <summary>
        /// å‡ºåº“任务取消
        /// </summary>
        [Description("出库任务取消")]
        OutCancel = 198,
        /// <summary>
        /// å‡ºåº“任务异常
        /// </summary>
        [Description("出库任务异常")]
        OutException = 199,
    }
    public enum TaskCarStatusEnum
    {
        /// <summary>
        /// æ–°å»ºç§»è½¦ä»»åŠ¡
        /// </summary>
        [Description("新建移车任务")]
        CarNew = 300,
        /// <summary>
        /// ç©¿æ¢­è½¦æ‰§è¡Œä¸­
        /// </summary>
        [Description("穿梭车执行中")]
        ShuttleCar_Executing = 310,
        /// <summary>
        /// ç©¿æ¢­è½¦å®Œæˆ
        /// </summary>
        [Description("穿梭车完成")]
        ShuttleCar_Finish = 320,
        /// <summary>
        /// å †åž›æœºç§»è½¦æ‰§è¡Œä¸­
        /// </summary>
        [Description("堆垛机移车执行中")]
        SC_CarExecuting = 330,
        /// <summary>
        /// å †åž›æœºç§»è½¦å®Œæˆ
        /// </summary>
        [Description("堆垛机移车完成")]
        SC_CarFinish = 340,
        /// <summary>
        /// ç§»è½¦å®Œæˆ
        /// </summary>
        [Description("移车完成")]
        RelocationCarFinish = 390,
    }
    /// <summary>
    /// ç§»åº“任务状态
    /// </summary>
    public enum TaskRelocationStatusEnum
    {
        /// <summary>
        /// æ–°å»ºç§»åº“任务
        /// </summary>
        [Description("新建移库任务")]
        RelocationNew = 400,
        /// <summary>
        /// ç©¿æ¢­è½¦èµ·ç‚¹æ‰§è¡Œä¸­
        /// </summary>
        [Description("穿梭车起点执行中")]
        CarSource_Executing = 410,
        /// <summary>
        /// ç©¿æ¢­è½¦èµ·ç‚¹å®Œæˆ
        /// </summary>
        [Description("穿梭车起点完成")]
        CarSource_Finish = 415,
        /// <summary>
        /// å †åž›æœºç§»åº“执行中
        /// </summary>
        [Description("堆垛机移库执行中")]
        SC_RelocationExecuting = 420,
        /// <summary>
        /// å †åž›æœºç§»åº“完成
        /// </summary>
        [Description("堆垛机移库完成")]
        SC_RelocationFinish = 425,
        /// <summary>
        /// ç©¿æ¢­è½¦ç»ˆç‚¹æ‰§è¡Œä¸­
        /// </summary>
        [Description("穿梭车终点执行中")]
        CarTarget_Executing = 430,
        /// <summary>
        /// ç©¿æ¢­è½¦ç»ˆç‚¹å®Œæˆ
        /// </summary>
        [Description("穿梭车终点完成")]
        CarTarget_Finish = 435,
        /// <summary>
        /// ç§»åº“完成
        /// </summary>
        [Description("移库完成")]
        RelocationFinish = 490,
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusGroup.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common.TaskEnum
{
    public enum TaskStatusGroup
    {
        NotCompleted,
        Completed,
        Exception
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common.TaskEnum
{
    public enum TaskInboundTypeEnum
    {
        /// <summary>
        /// å…¥åº“
        /// </summary>
        [Description("入库")]
        Inbound = 200,
        /// <summary>
        /// ç›˜ç‚¹å…¥åº“
        /// </summary>
        [Description("盘点入库")]
        InInventory = 201,
        /// <summary>
        /// åˆ†æ‹£å…¥åº“
        /// </summary>
        [Description("分拣入库")]
        InPick = 202,
        /// <summary>
        /// è´¨æ£€å…¥åº“
        /// </summary>
        [Description("质检入库")]
        InQuality = 203,
        /// <summary>
        /// å…¥ç©ºæ‰˜
        /// </summary>
        [Description("入空托")]
        PalletInbound = 204,
    }
    public enum TaskOutboundTypeEnum
    {
        /// <summary>
        /// å‡ºåº“
        /// </summary>
        [Description("出库")]
        Outbound = 100,
        /// <summary>
        /// ç›˜ç‚¹å‡ºåº“
        /// </summary>
        [Description("盘点出库")]
        OutInventory = 101,
        /// <summary>
        /// åˆ†æ‹£å‡ºåº“
        /// </summary>
        [Description("分拣出库")]
        OutPick = 102,
        /// <summary>
        /// è´¨æ£€å‡ºåº“
        /// </summary>
        [Description("质检出库")]
        OutQuality = 103,
        /// <summary>
        /// å‡ºç©ºæ‰˜
        /// </summary>
        [Description("出空托")]
        PalletOutbound = 104,
    }
    public enum TaskRelocationTypeEnum
    {
        /// <summary>
        /// åº“内移库
        /// </summary>
        [Description("库内移库")]
        Relocation = 300,
        /// <summary>
        /// åº“外移库
        /// </summary>
        [Description("库外移库")]
        RelocationIn = 301
    }
    public enum TaskOtherTypeEnum
    {
        /// <summary>
        /// åº“内移车
        /// </summary>
        [Description("库内移车")]
        RelocationCar = 400
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeGroup.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common.TaskEnum
{
    public enum TaskTypeGroup
    {
        InboundGroup,
        OutbondGroup,
        RelocationGroup,
        OtherGroup
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/LocationEnum.cs
@@ -69,65 +69,40 @@
        [Description("禁用")]
        Disable = 3
    }
/// <summary>
/// è´§ä½ç±»åž‹
/// </summary>
    public enum LocationTypeEnum
    {
        /// <summary>
        /// ç«‹åº“
        /// æœªå®šä¹‰
        /// </summary>
        [Description("立库货位")]
        Cube = 1,
        [Description("未定义")]
        Undefined = 0,
        /// <summary>
        /// å¹³åº“
        /// å°æ‰˜ç›˜
        /// </summary>
        [Description("平库货位")]
        Flat = 2,
        [Description("小托盘")]
        SmallPallet = 1,
        /// <summary>
        /// æˆå“å‡ºåº“站台
        /// ä¸­æ‰˜ç›˜
        /// </summary>
        [Description("成品出库站台")]
        FinishedOut = 3,
        [Description("中托盘")]
        MediumPallet = 2,
        /// <summary>
        /// åŽŸææ–™å‡ºåº“ç«™å°
        /// å¤§æ‰˜ç›˜
        /// </summary>
        [Description("原材料出库站台")]
        RawOut = 4,
        [Description("大托盘")]
        LargePallet = 3,
        /// <summary>
        /// ç©ºæ‰˜å‡ºåº“站台
        /// ç‰¹å¤§æ‰˜ç›˜
        /// </summary>
        [Description("空托出库站台")]
        EmptyOut = 5,
        /// <summary>
        /// æˆå“å…¥åº“站台
        /// </summary>
        [Description("成品入库站台")]
        FinishedIn = 6,
        /// <summary>
        /// åŽŸææ–™å…¥åº“ç«™å°
        /// </summary>
        [Description("原材料入库站台")]
        RawIn = 7,
        /// <summary>
        /// ç©ºæ‰˜å…¥ç«™å°
        /// </summary>
        [Description("空托入站台")]
        EmptyIn = 8,
        /// <summary>
        /// ç©ºæ‰˜è´§ä½
        /// </summary>
        [Description("空托货位")]
        EmptyCube = 9,
        /// <summary>
        /// åŽŸææ–™è´§ä½
        /// </summary>
        [Description("原材料货位")]
        MaterialsCube = 10,
        /// <summary>
        /// æˆå“è´§ä½
        /// </summary>
        [Description("成品货位")]
        ProductCube = 11,
        [Description("特大托盘")]
        ExtraPallet = 4,
    }
    public enum LocationChangeType
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/OrderEnum.cs
@@ -7,6 +7,125 @@
namespace WIDESEA_Core.Enums
{
    /// <summary>
    /// å•据类型
    /// </summary>
    public enum OrderTypeEnum
    {
        /// <summary>
        /// ç”Ÿäº§å…¥åº“单
        /// </summary>
        [Description("生产入库单")]
        ç”Ÿäº§å…¥åº“单 = 0,
        /// <summary>
        /// ç”Ÿäº§å‡ºåº“单
        /// </summary>
        [Description("生产出库单")]
        ç”Ÿäº§å‡ºåº“单 = 1,
        /// <summary>
        /// è°ƒæ‹¨å…¥åº“单
        /// </summary>
        [Description("调拨入库单")]
        è°ƒæ‹¨å…¥åº“单 = 2,
        /// <summary>
        /// è°ƒæ‹¨å‡ºåº“单
        /// </summary>
        [Description("调拨出库单")]
        è°ƒæ‹¨å‡ºåº“单 = 3,
    }
    /// <summary>
    /// å•据大类
    /// </summary>
    public enum InoutTypeEnum
    {
        /// <summary>
        /// é‡‡è´­å…¥åº“
        /// </summary>
        [Description("采购入库")]
        PurchaseIn,
        /// <summary>
        /// æˆå“å…¥åº“
        /// </summary>
        [Description("成品入库")]
        Finished,
        /// <summary>
        /// åŠæˆå“å…¥åº“
        /// </summary>
        [Description("半成品入库")]
        PartedIn,
        /// <summary>
        /// ç”Ÿäº§é€€æ–™
        /// </summary>
        [Description("生产退料")]
        MaterialReturn,
        /// <summary>
        /// é”€å”®é€€è´§
        /// </summary>
        [Description("销售退货")]
        SaleReturn,
        /// <summary>
        /// å…¶ä»–入库
        /// </summary>
        [Description("其他入库")]
        OtherIn,
        /// <summary>
        /// é”€å”®å‡ºåº“
        /// </summary>
        [Description("销售出库")]
        SaleOut,
        /// <summary>
        /// å·¥å•发料
        /// </summary>
        [Description("工单发料")]
        WorkFeed,
        /// <summary>
        ///  æä»“返检
        /// </summary>
        [Description(" æä»“返检")]
        OutToCheck,
        /// <summary>
        /// å…¶ä»–出库
        /// </summary>
        [Description("其他出库")]
        OtherOut,
        /// <summary>
        /// ä¾›åº”商退货
        /// </summary>
        [Description("供应商退货")]
        SupplierReturn,
        /// <summary>
        /// ä¸¤æ­¥è°ƒæ‹¨
        /// </summary>
        [Description("两步调拨")]
        TwoAllocate,
        /// <summary>
        /// åº“存调整
        /// </summary>
        [Description("库存调整")]
        InventoryAdjust,
        /// <summary>
        /// æ ‡å‡†ç›˜ç‚¹
        /// </summary>
        [Description("标准盘点")]
        StandardCount,
    }
    /// <summary>
    /// å…¥åº“单类型 100 ç”Ÿäº§å…¥åº“单;200 ç”Ÿäº§é€€æ–™å•;300 é‡‡è´­å…¥åº“单;400 è°ƒæ‹¨å…¥åº“单;500 é”€å”®é€€è´§å•;600 ç©ºç›˜å…¥åº“单;700 å…¶ä»–入库单
    /// </summary>
@@ -59,7 +178,6 @@
        [Description("盘点入库")]
        InInventory = 135
    }
    /// <summary>
    /// å‡ºåº“单类型
    /// </summary>
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/PalletTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Core.Enums
{
    public enum PalletTypeEnum
    {
        /// <summary>
        /// ç©ºç®±
        /// </summary>
        Empty = -1,
        None = 0,
        /// <summary>
        /// å°æ‰˜ç›˜
        /// </summary>
        SmallPallet = 1,
        /// <summary>
        /// ä¸­æ‰˜ç›˜
        /// </summary>
        MediumPallet = 2,
        /// <summary>
        /// å¤§æ‰˜ç›˜
        /// </summary>
        LargePallet = 3,
        /// <summary>
        /// æœ€å¤§æ‰˜ç›˜
        /// </summary>
        LargestPallet = 4
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/StockEnum.cs
@@ -77,6 +77,9 @@
        [Description("盘点中")]
        ç›˜ç‚¹ä¸­ = 11,
        [Description("入库中")]
        å…¥åº“中 = 12,
    }
    public enum OutStockStatus
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/TaskStatusEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,115 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Core.TaskEnum
{
    /// <summary>
    /// ä»»åŠ¡çŠ¶æ€
    /// </summary>
    public enum TaskStatusEnum
    {
        /// <summary>
        /// æ–°å»ºä»»åŠ¡
        /// </summary>
        [Description("新建")]
        New = 100,
        /// <summary>
        /// å †åž›æœºå¾…执行
        /// </summary>
        [Description("堆垛机待执行")]
        SC_Execute = 200,
        /// <summary>
        /// å †åž›æœºæ‰§è¡Œä¸­
        /// </summary>
        [Description("堆垛机执行中")]
        SC_Executing = 210,
        /// <summary>
        /// å †åž›æœºå®Œæˆ
        /// </summary>
        [Description("堆垛机完成")]
        SC_Finish = 220,
        /// <summary>
        /// è¾“送线待执行
        /// </summary>
        [Description("输送线待执行")]
        Line_Execute = 400,
        /// <summary>
        /// è¾“送线执行中
        /// </summary>
        [Description("输送线执行中")]
        Line_Executing = 410,
        /// <summary>
        /// è¾“送线完成
        /// </summary>
        [Description("输送线完成")]
        Line_Finish = 420,
        /// <summary>
        /// AGV待执行
        /// </summary>
        [Description("AGV待执行")]
        AGV_Execute = 300,
        /// <summary>
        /// AGV执行中
        /// </summary>
        [Description("AGV执行中")]
        AGV_Executing = 310,
        /// <summary>
        /// AGV待继续执行
        /// </summary>
        [Description("AGV待继续执行")]
        AGV_WaitToExecute = 320,
        /// <summary>
        /// AGV放货中
        /// </summary>
        [Description("AGV放货中")]
        AGV_Puting = 325,
        /// <summary>
        /// AGV完成
        /// </summary>
        [Description("AGV完成")]
        AGV_Finish = 330,
        /// <summary>
        /// ä»»åŠ¡å®Œæˆ
        /// </summary>
        [Description("任务完成")]
        Finish = 900,
        /// <summary>
        /// ä»»åŠ¡æŒ‚èµ·
        /// </summary>
        [Description("任务挂起")]
        Pending = 970,
        /// <summary>
        /// ä»»åŠ¡å–æ¶ˆ
        /// </summary>
        [Description("任务取消")]
        Cancel = 980,
        /// <summary>
        /// ä»»åС异叏
        /// </summary>
        [Description("任务异常")]
        Exception = 990,
        /// <summary>
        /// æå‡æœºæ‰§è¡Œä¸­
        /// </summary>
        [Description("提升机执行中")]
        HT_Executing = 110,
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/WarehouseEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Core.Enums
{
    public enum WarehouseEnum
    {
        /// <summary>
        /// æ¿æ–™ä»“
        /// </summary>
        [Description("板料仓")]
        SC01_BC,
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs
@@ -14,7 +14,7 @@
        /// <summary>
        /// WMS任务主键
        /// </summary>
        public int Id { get; set; }
        public int TaskId { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
@@ -71,5 +71,34 @@
        /// </summary>
        public int PalletType { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string CurrentAddress { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string NextAddress { get; set; }
        /// <summary>
        ///
        /// </summary>
        public int Depth { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string OrderNo { get; set; }
        /// <summary>
        ///
        /// </summary>
        public int SourceKey { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime Dispatchertime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public int MaterialType { get; set; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IBasicRepository.cs
@@ -22,5 +22,7 @@
        IAreaRouterRepository AreaRouterRepository { get; }
        ICachePointRepository CachePointRepository { get; }
        IPalletTypeInfoRepository PalletTypeInfoRepository { get; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IPalletTypeInfoRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IBasicRepository
{
    public interface IPalletTypeInfoRepository : IRepository<Dt_PalletTypeInfo>
    {
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs
@@ -21,6 +21,15 @@
        Dt_LocationInfo? AssignLocation(string stationCode, int inboundType);
        Dt_LocationInfo? AssignLocation(string RoadwayNo);
        /// <summary>
        /// è´§ä½åˆ†é…é€»è¾‘
        /// </summary>
        /// <param name="roadwayNo">巷道号</param>
        /// <param name="palletType">托盘类型</param>
        /// <returns></returns>
        Dt_LocationInfo? AssignLocation(string roadwayNo, int palletType, int warehouseId, string beRelocationCode = "", int heightType = 0);
        void UpdateLocationLock(Dt_LocationInfo locationInfo,int task, int changType,bool black);
        void UpdateLocationFree(Dt_LocationInfo locationInfo, int task, int changType, bool black);
WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IPalletTypeInfoService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseServices;
using WIDESEA_Model.Models;
namespace WIDESEA_IBasicService
{
    public interface IPalletTypeInfoService : IService<Dt_PalletTypeInfo>
    {
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs
@@ -24,5 +24,7 @@
        WebResponseContent InventoryIn(string name);
        WebResponseContent CancelIn(HouseCancelIn houseCancelIn);
        Dt_InboundOrder GetInboundOrder(string InboundOrderNo);
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundService.cs
@@ -14,5 +14,8 @@
        IInboundOrderDetail_HtyService InboundOrderDetail_HtyService { get; }
        IInboundOrderService InbounOrderService { get; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_IRecordService/ILocationStatusChangeRecordSetvice.cs
@@ -17,6 +17,7 @@
        void AddLocationStatusChangeRecord(Dt_LocationInfo locationInfo, int lastStatus, int changeType, string orderNo, int? taskNum);
        //void AddLocationStatusChangeRecord(Dt_LocationInfo locationInfo, LocationStatusEnum lastStatus, LocationChangeType changeType, string? orderNo = null, int? taskNum = null);
        void AddLocationStatusChangeRecord(Dt_LocationInfo locationInfo, int lastStatus, int newStatus, int changeType, string? orderNo = null, int? taskNum = null);
        void AddLocationStatusChangeRecord(List<Dt_LocationInfo> locationInfos, int newStatus, int changeType, string? orderNo, List<int>? taskNums);
    }
WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IStockInfoRepository.cs
@@ -4,6 +4,7 @@
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.Enums;
using WIDESEA_DTO.Stock;
using WIDESEA_Model.Models;
@@ -21,6 +22,12 @@
        List<Dt_StockInfo> GetStockInfosByIds(List<int> ids);
        /// <summary>
        /// æ ¹æ®è´§ä½ç¼–号获取组盘库存信息
        /// </summary>
        /// <param name="materielCode"></param>
        /// <returns></returns>
        List<Dt_StockInfo> LocationCodesGetStockInfos(List<string> locationCodes, StockStatusEmun statusEmun = StockStatusEmun.已入库);
        List<Dt_StockInfo> GetStockInfosByPalletCodes(List<string> palletCodes);
        List<Dt_StockInfo> GetStockInfosByPalletCode(List<string> palletCodes);
WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -37,10 +37,12 @@
    public interface ITaskService : IService<Dt_Task>
    {
        ITaskRepository Repository { get; }
        WebResponseContent InboundRequest(SaveModel saveModel);
        WebResponseContent InboundRequest(string stationCode, string roadwayNo, string palletCode);
        WebResponseContent TaskCompleted(int taskNum);
        WebResponseContent UpdateTaskStatus(int tasknum, int tasktype);
        WebResponseContent GenerateOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews);
        WebResponseContent GenerateOutboundTask(int[] keys);
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs
@@ -118,7 +118,6 @@
                    {
                        Dt_InboundOrderDetail orderDetail = new Dt_InboundOrderDetail()
                        {
                            OrderId = inboundOrderOld.Id,
                            MaterielCode = item.MaterielCode,
                            BatchNo = item.BatchNo,
                            OrderQuantity = item.OrderQuantity,
@@ -128,11 +127,13 @@
                            LinId = item.LinId,
                            LPNNo=item.LPN_No,
                            MaterielName = item.MaterielName,
                            MaterieSpec = item.MaterieSpec
                            MaterieSpec = item.MaterieSpec,
                            Creater = "上游WMS"
                        };
                        Dt_InboundOrder inboundOrder = new Dt_InboundOrder()
                        {
                            OrderNo = model.AsnNo,
                            UpperOrderNo = model.AsnNo,
                            WarehouseId = warehouse.WarehouseId,
                            //SupplierId = "",
@@ -142,6 +143,7 @@
                            TransactionCode = model.TransactionCode,
                            InoutType = model.OrderType,
                            OrderType = model.InoutType.ObjToInt(),
                            Creater = "上游WMS",
                            Details = new List<Dt_InboundOrderDetail> { orderDetail }
                        };
                        //switch (model.OrderType)//单据类型
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_PalletTypeInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.DB.Models;
namespace WIDESEA_Model.Models
{
    /// <summary>
    /// æ‰˜ç›˜ç±»åž‹
    /// </summary>
    [SugarTable(nameof(Dt_PalletTypeInfo), "托盘类型")]
    public class Dt_PalletTypeInfo : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç±»åž‹
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "托盘类型")]
        public int PalletType { get; set; }
        /// <summary>
        /// æ‰˜ç›˜å·èµ·å§‹å­—符串
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "托盘号起始字符串")]
        public string CodeStartStr { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç±»åž‹åç§°
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "托盘类型名称")]
        public string TypeName { get; set; }
        /// <summary>
        /// é•¿åº¦
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "长度")]
        public int Length { get; set; }
        /// <summary>
        /// å®½åº¦
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "宽度")]
        public int Width { get; set; }
        /// <summary>
        /// é«˜åº¦
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "高度")]
        public int Height { get; set; }
        /// <summary>
        /// çŠ¶æ€
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "状态")]
        public int Enbale { get; set; }
        /// <summary>
        /// ä»“库编号
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "仓库编号")]
        public int WarehouseId { get; set; }
        /// <summary>
        /// æ‰€å±žå±‚
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "所属层")]
        public string SortNum { get; set; }
        /// <summary>
        /// å ç”¨è´§ä½æ•°
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "占用货位数")]
        public int LocaitonCount { get; set; }
        /// <summary>
        /// å¤§æ‰˜ç›˜æ˜¯å¦æ”¾å¥‡æ•°åˆ—
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "大托盘是否放奇数列")]
        public bool IsOdd { get; set; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder.cs
@@ -25,18 +25,18 @@
        [SugarColumn(IsNullable = false, ColumnDescription = "仓库主键")]
        public int WarehouseId { get; set; }
        [ImporterHeader(Name = "物料详情")]
        [ExporterHeader(DisplayName = "物料详情")]
        [ImporterHeader(Name = "单据编号")]
        [ExporterHeader(DisplayName = "单据编号")]
        [CodeRule(WIDESEA_Core.Enums.RuleCode.InboundOrderRule)]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "物料详情")]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "单据编号")]
        public string OrderNo { get; set; }
        /// <summary>
        /// å•据编号
        /// </summary>
        [CodeRule(WIDESEA_Core.Enums.RuleCode.InboundOrderRule)]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "单据编号")]
        public string InboundOrderNo { get; set; }
        ///// <summary>
        ///// å•据编号
        ///// </summary>
        //[CodeRule(WIDESEA_Core.Enums.RuleCode.InboundOrderRule)]
        //[SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "单据编号")]
        //public string InboundOrderNo { get; set; }
        /// <summary>
        /// ä¸Šæ¸¸å•据编号
@@ -67,12 +67,15 @@
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "备注")]
        public string Remark { get; set; }
        [ImporterHeader(Name = "单据小类")]
        [ExporterHeader(DisplayName = "单据小类")]
        /// <summary>
        /// å•据小类
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "单据小类")]
        public string TransactionCode { get; set; }
        [ImporterHeader(Name = "出入库类型")]
        [ExporterHeader(DisplayName = "出入库类型")]
        /// <summary>
        /// å‡ºå…¥åº“类型
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "出入库类型")]
        public string InoutType { get; set; }
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrder_Hty.cs
@@ -23,7 +23,7 @@
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "上游单据编号")]
        public string UpperOrderNo { get; set; }
        [SugarColumn(IsNullable = false, ColumnDescription = "单据类型")]
        [SugarColumn(IsNullable = true, ColumnDescription = "单据类型")]
        public int OrderType { get; set; }
        [SugarColumn(IsNullable = false, ColumnDescription = "单据状态")]
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfo.cs
@@ -22,6 +22,23 @@
        [SugarColumn(IsNullable = false, ColumnDescription = "类型")]
        public int MaterialType { get; set; }
        [SugarColumn(IsNullable = false, ColumnDescription = "入库序号", DefaultValue = "0")]
        public int SerialNumber { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "入库时间")]
        public DateTime? InDate { get; set; }
        /// <summary>
        /// ä»“库主键
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "仓库主键")]
        public int WarehouseId { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç±»åž‹
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "托盘类型")]
        public int PalletType { get; set; }
        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "货位编号")]
        public string LocationCode { get; set; }
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs
@@ -44,6 +44,12 @@
        public string PalletCode { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç±»åž‹
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "托盘类型")]
        public int PalletType { get; set; }
        /// <summary>
        /// å··é“号
        /// </summary>
        [ImporterHeader(Name = "巷道号")]
@@ -142,20 +148,20 @@
        [SugarColumn(IsNullable = true, Length = 255, ColumnDescription = "备注")]
        public string Remark { get; set; }
        /// <summary>
        /// æ‰˜ç›˜æ•°é‡
        /// </summary>
        [ImporterHeader(Name = "托盘数量")]
        [ExporterHeader(DisplayName = "托盘数量")]
        [SugarColumn(IsNullable = true, ColumnDescription = "托盘数量")]
        public int PalletCodequantity { get; set; }
        /// <summary>
        /// åŽŸææ–™åŽ»å‘
        /// </summary>
        [ImporterHeader(Name = "原材料去向")]
        [ExporterHeader(DisplayName = "原材料去向")]
        [SugarColumn(IsNullable = true, ColumnDescription = "原材料去向")]
        public int PLCTo { get; set; }
        ///// <summary>
        ///// æ‰˜ç›˜æ•°é‡
        ///// </summary>
        //[ImporterHeader(Name = "托盘数量")]
        //[ExporterHeader(DisplayName = "托盘数量")]
        //[SugarColumn(IsNullable = true, ColumnDescription = "托盘数量")]
        //public int PalletCodequantity { get; set; }
        ///// <summary>
        ///// åŽŸææ–™åŽ»å‘
        ///// </summary>
        //[ImporterHeader(Name = "原材料去向")]
        //[ExporterHeader(DisplayName = "原材料去向")]
        //[SugarColumn(IsNullable = true, ColumnDescription = "原材料去向")]
        //public int PLCTo { get; set; }
        /// <summary>
        /// ç‰©æ–™ç±»åž‹
        /// </summary>
WMS/WIDESEA_WMSServer/WIDESEA_RecordService/Service/LocationStatusChangeRecordSetvice.cs
@@ -7,6 +7,7 @@
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.DB;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Seed;
using WIDESEA_IRecordRepository;
using WIDESEA_IRecordService;
@@ -33,6 +34,31 @@
            BaseDal.AddData(locationStatusChangeRecord);
        }
        public void AddLocationStatusChangeRecord(Dt_LocationInfo locationInfo, int lastStatus, int newStatus, int changeType, string? orderNo = null, int? taskNum = null)
        {
            try
            {
                Dt_LocationStatusChangeRecord locationStatusChangeRecord = new Dt_LocationStatusChangeRecord()
                {
                    AfterStatus = newStatus,
                    BeforeStatus = lastStatus,
                    ChangeType = changeType,
                    LocationCode = locationInfo.LocationCode,
                    LocationId = locationInfo.Id,
                    TaskNum = taskNum,
                    OrderNo = orderNo ?? "",
                    Creater = App.User.UserId == 0 ? "" : "WCS",
                    CreateDate = App.User.UserId == 0 ? DateTime.Now : DateTime.Now,
                };
                BaseDal.AddData(locationStatusChangeRecord);
            }
            catch (Exception ex)
            {
                throw new Exception($"{ex.Message}");
            }
        }
        public void AddLocationStatusChangeRecord(List<Dt_LocationInfo> locationInfos, int newStatus, int changeType, string? orderNo, List<int>? taskNums)
        {
            List<Dt_LocationStatusChangeRecord> records = new List<Dt_LocationStatusChangeRecord>();
WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs
@@ -74,7 +74,15 @@
            //ISugarQueryable<Dt_StockInfo> sugarQueryable1 = Db.Queryable<Dt_StockInfo>().Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode));
            //return sugarQueryable.InnerJoin(sugarQueryable1, (a, b) => a.LocationCode == b.LocationCode).Select((a, b) => b).OrderBy(a => a.CreateDate).Includes(a => a.Details).ToList();
        }
        /// <summary>
        /// æ ¹æ®è´§ä½ç¼–号获取组盘库存信息
        /// </summary>
        /// <param name="locationCodes"></param>
        /// <returns></returns>
        public List<Dt_StockInfo> LocationCodesGetStockInfos(List<string> locationCodes, StockStatusEmun statusEmun = StockStatusEmun.已入库)
        {
            return Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode) /*&& x.StockStatus == statusEmun.ObjToInt()*/).Includes(x => x.Details).ToList();
        }
        public List<Dt_StockInfo> GetStockInfosByIds(List<int> ids)
        {
            return Db.Queryable<Dt_StockInfo>().Where(x => ids.Contains(x.Id)).Includes(x => x.Details).ToList();
WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs
@@ -1,4 +1,5 @@
using Newtonsoft.Json;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
using System;
using System.Collections.Generic;
@@ -174,6 +175,30 @@
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "inoutType":
                        {
                            List<object> data = new List<object>();
                            Type type = typeof(InoutTypeEnum);
                            List<int> enums = Enum.GetValues(typeof(InoutTypeEnum)).Cast<int>().ToList();
                            int index = 0;
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(InoutTypeEnum).GetField(((InoutTypeEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                if (description != null)
                                {
                                    data.Add(new { key = item.ToString(), value = description.Description });
                                }
                                else
                                {
                                    data.Add(new { key = item.ToString(), value = item.ToString() });
                                }
                                index++;
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "outboundStatusEnum":
                        {
                            List<object> data = new List<object>();
@@ -203,12 +228,12 @@
                            List<object> data = new List<object>();
                            {
                                Type type = typeof(InOrderTypeEnum);
                                List<int> enums = Enum.GetValues(typeof(InOrderTypeEnum)).Cast<int>().ToList();
                                Type type = typeof(OrderTypeEnum);
                                List<int> enums = Enum.GetValues(typeof(OrderTypeEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(InOrderTypeEnum).GetField(((InOrderTypeEnum)item).ToString());
                                    FieldInfo? fieldInfo = typeof(OrderTypeEnum).GetField(((OrderTypeEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs
@@ -15,6 +15,9 @@
using static WIDESEA_Common.HouseInventoryIn;
using WIDESEA_Common;
using Parameter = WIDESEA_Common.Parameter;
using WIDESEA_Core.LogHelper;
using WIDESEA_DTO.Task;
using WIDESEA_Core.TaskEnum;
namespace WIDESEA_TaskInfoService
{
@@ -28,34 +31,60 @@
        /// <param name="stationCode">起始地址</param>
        /// <param name="palletCode">托盘编号</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent InboundRequest(SaveModel saveModel)
        public WebResponseContent InboundRequest(string stationCode, string roadwayNo, string palletCode)
        {
            string palletCode = saveModel.palletCode;
            if (saveModel.palletCode == null) return WebResponseContent.Instance.Error($"请输入正确托盘号");
            WebResponseContent content = new WebResponseContent();
            // è¾“入验证
            if (string.IsNullOrWhiteSpace(palletCode))
                return WebResponseContent.Instance.Error("请输入正确托盘号");
            try
            {
                Dt_InboundOrderDetail inboundOrderDet = BaseDal.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.LPNNo == palletCode).First();
                Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == inboundOrderDet.OrderId).Includes(x => x.Details).First();
                if (inboundOrder == null)
                Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
                if (task != null)
                {
                    return WebResponseContent.Instance.Error($"未找到入库单信息");
                    PushTasksToWCS(new List<Dt_Task> { task });
                    return WebResponseContent.Instance.OK($"该托盘已生成任务", _mapper.Map<WMSTaskDTO>(task));
                }
                Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == inboundOrder.WarehouseId);
                Dt_RoadwayInfo roadwayInfo = _basicService.RoadwayInfoService.Repository.QueryFirst(x => x.RoadwayNo == warehouse.WarehouseCode);
                if (roadwayInfo != null) { }
                // èŽ·å–å…¥åº“å•æ˜Žç»†
                var inboundOrderDet = GetInboundOrderDetail(palletCode);
                if (inboundOrderDet == null)
                    return WebResponseContent.Instance.Error($"未找到托盘号 {palletCode} å¯¹åº”的入库单明细");
                if (inboundOrder.Details == null || inboundOrder.Details.Count <= 0)
                // èŽ·å–å…¥åº“å•
                var inboundOrder = GetInboundOrder(inboundOrderDet.OrderId);
                if (inboundOrder == null)
                    return WebResponseContent.Instance.Error($"未找到入库单信息");
                // éªŒè¯å…¥åº“单明细
                if (inboundOrder.Details == null || inboundOrder.Details.Count == 0)
                    return WebResponseContent.Instance.Error($"入库单 {inboundOrder.OrderNo} æ²¡æœ‰æ˜Žç»†ä¿¡æ¯");
                // èŽ·å–ä»“åº“å’Œå··é“ä¿¡æ¯
                var warehouse = GetWarehouse(inboundOrder.WarehouseId);
                var roadwayInfo = GetRoadwayInfo(warehouse.WarehouseCode);
                // å¤„理库存信息
                //var stockInfo = GetOrCreateStockInfo(palletCode, inboundOrder, inboundOrderDet, warehouse);
                var dt_StockInfoDetail = new Dt_StockInfoDetail
                {
                    return WebResponseContent.Instance.Error($"未找到入库单明细信息");
                }
                Dt_StockInfo stockInfo1 = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
                if (stockInfo1 == null)
                {
                    Dt_StockInfo dt_Stock = new()
                    //StockId = stockInfo.Id,
                    MaterielCode = inboundOrderDet.MaterielCode,
                    MaterielName = inboundOrderDet.MaterielName,
                    OrderNo = inboundOrder.OrderNo,
                    BatchNo = inboundOrderDet.BatchNo,
                    LinId = inboundOrderDet.LinId,
                    StockQuantity = inboundOrderDet.OrderQuantity,
                    Status = (int)StockStatusEmun.组盘暂存,
                    Creater = "WMS",
                    CreateDate = DateTime.Now,
                    Id = inboundOrderDet.LinId.ObjToInt(),
                };
                var dt_Stock = new Dt_StockInfo
                    {
                        BatchNo = inboundOrderDet.BatchNo,
                        PalletCode = palletCode,
                    PalletType = GetPalletType(warehouse, palletCode),
                        IsFull = true,
                        StockStatus = (int)StockStatusEmun.组盘暂存,
                        Creater = "WMS",
@@ -64,39 +93,290 @@
                        Materialweight = 0,
                        Wlstatus = (int)InventoryMaterialStatus.合格,
                        Mgeneratetime = DateTime.Now,
                    WarehouseId = warehouse.WarehouseId,
                    Details = new List<Dt_StockInfoDetail> { dt_StockInfoDetail }
                    };
                    _stockService.StockInfoService.Repository.AddData(dt_Stock);
                    Dt_StockInfo dt_StockInfo = _stockService.StockInfoService.Repository.GetStockInfo(palletCode);
                    Dt_StockInfoDetail dt_StockInfoDetail = new()
                // æ£€æŸ¥å…¥åº“请求
                var checkResult = CheckRequestInbound(roadwayInfo.InSCStationCode, palletCode, true, dt_Stock);
                if (!checkResult.Item1)
                    return WebResponseContent.Instance.Error(checkResult.Item2);
                // åˆ†é…åº“位并更新数据
                Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, dt_Stock.PalletType, dt_Stock.WarehouseId);
                //Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(stationCode, TaskTypeEnum.Inbound.ObjToInt());
                if (locationInfo == null)
                    {
                        StockId = dt_StockInfo.Id,
                        MaterielCode = inboundOrderDet.MaterielCode,    //物料号
                        MaterielName = inboundOrderDet.MaterielName,    //物料名称
                        OrderNo = inboundOrder.OrderNo,        //物料详情
                        BatchNo = inboundOrderDet.BatchNo,         //物料批次
                        LinId = inboundOrderDet.LinId,                    //SerialNumber = targetCodes[2].ToString(),    //包号
                                                                          //BatchNoName = dt_Int.OrderNo,
                        StockQuantity = inboundOrderDet.OrderQuantity,    //重量
                                                                          //OutboundQuantity = 1,    //序列号
                    return WebResponseContent.Instance.Error($"货位分配失败,未找到可分配货位");
                }
                Dt_Task newTask = new Dt_Task()
                {
                    CurrentAddress = stationCode,
                    Grade = 0,
                    NextAddress = locationInfo.LocationCode,
                    PalletCode = palletCode,
                    Roadway = roadwayNo,
                    SourceAddress = stationCode,
                    TargetAddress = locationInfo.LocationCode,
                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                    WarehouseId = dt_Stock.WarehouseId,
                    PalletType = dt_Stock.PalletType,
                    Creater = "WMS",
                    CreateDate = DateTime.Now,
                };
                LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                _unitOfWorkManage.BeginTran();
                Db.InsertNav(dt_Stock).Include(x => x.Details).ExecuteCommand();
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus.ObjToInt(), LocationStatusEnum.Lock.ObjToInt(), LocationChangeType.InboundAssignLocation.ObjToInt());
                //_basicService.LocationInfoService.UpdateLocationStatus(locationInfo, newTask.PalletType, LocationStatusEnum.Lock, newTask.WarehouseId);
                int taskId = BaseDal.AddData(newTask);
                newTask.TaskId = taskId;
                _stockRepository.StockInfoRepository.UpdateData(dt_Stock);
                _unitOfWorkManage.CommitTran();
                WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
                PushTasksToWCS(new List<Dt_Task> { newTask });
                if (newTask.WarehouseId == 5) PutFinish(stationCode);
                return WebResponseContent.Instance.OK(data: wMSTaskDTO);
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        private Dt_InboundOrderDetail GetInboundOrderDetail(string palletCode)
        {
            return BaseDal.Db.Queryable<Dt_InboundOrderDetail>()
                .Where(x => x.LPNNo == palletCode)
                .First();
        }
        private Dt_InboundOrder GetInboundOrder(int orderId)
        {
            return BaseDal.Db.Queryable<Dt_InboundOrder>()
                .Where(x => x.Id == orderId)
                .Includes(x => x.Details)
                .First();
        }
        private Dt_Warehouse GetWarehouse(int warehouseId)
        {
            return _basicService.WarehouseService.Repository
                .QueryFirst(x => x.WarehouseId == warehouseId);
        }
        private Dt_RoadwayInfo GetRoadwayInfo(string warehouseCode)
        {
            return _basicService.RoadwayInfoService.Repository
                .QueryFirst(x => x.RoadwayNo == warehouseCode);
        }
        private Dt_StockInfo GetOrCreateStockInfo(string palletCode, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDet, Dt_Warehouse warehouse)
        {
            var stockInfo = BaseDal.Db.Queryable<Dt_StockInfo>()
                .Where(x => x.PalletCode == palletCode)
                .Includes(x => x.Details)
                .First();
            decimal beforeQuantity = 0;
            if (stockInfo == null)
            {
                stockInfo = CreateNewStockInfo(palletCode, inboundOrder, inboundOrderDet, warehouse);
                //CreateStockInfoDetail(stockInfo, inboundOrder, inboundOrderDet);
            }
            else
            {
                if (stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt())
                {
                    return null;
                }
                beforeQuantity = stockInfo.Details.Sum(x => x.StockQuantity);
            }
            return stockInfo;
        }
        private Dt_StockInfo CreateNewStockInfo(string palletCode, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDet, Dt_Warehouse warehouse)
        {
            var dt_StockInfoDetail = new Dt_StockInfoDetail
            {
                //StockId = stockInfo.Id,
                MaterielCode = inboundOrderDet.MaterielCode,
                MaterielName = inboundOrderDet.MaterielName,
                OrderNo = inboundOrder.OrderNo,
                BatchNo = inboundOrderDet.BatchNo,
                LinId = inboundOrderDet.LinId,
                StockQuantity = inboundOrderDet.OrderQuantity,
                        Status = (int)StockStatusEmun.组盘暂存,
                        Creater = "WMS",
                        CreateDate = DateTime.Now,
                        Id = inboundOrderDet.LinId.ObjToInt(),
                    };
            var dt_Stock = new Dt_StockInfo
            {
                BatchNo = inboundOrderDet.BatchNo,
                PalletCode = palletCode,
                PalletType = GetPalletType(warehouse, palletCode),
                IsFull = true,
                StockStatus = (int)StockStatusEmun.组盘暂存,
                Creater = "WMS",
                CreateDate = DateTime.Now,
                MaterialType = (int)InventoryMaterialType.成品,
                Materialweight = 0,
                Wlstatus = (int)InventoryMaterialStatus.合格,
                Mgeneratetime = DateTime.Now,
                WarehouseId = warehouse.WarehouseId,
                Details = new List<Dt_StockInfoDetail> { dt_StockInfoDetail }
            };
            //_stockService.StockInfoService.Repository.AddData(dt_Stock);
            Db.InsertNav(dt_Stock).Include(x => x.Details).ExecuteCommand();
            return _stockService.StockInfoService.Repository.GetStockInfo(palletCode);
        }
        private void CreateStockInfoDetail(Dt_StockInfo stockInfo, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDet)
        {
            var dt_StockInfoDetail = new Dt_StockInfoDetail
            {
                StockId = stockInfo.Id,
                MaterielCode = inboundOrderDet.MaterielCode,
                MaterielName = inboundOrderDet.MaterielName,
                OrderNo = inboundOrder.OrderNo,
                BatchNo = inboundOrderDet.BatchNo,
                LinId = inboundOrderDet.LinId,
                StockQuantity = inboundOrderDet.OrderQuantity,
                Status = (int)StockStatusEmun.组盘暂存,
                Creater = "WMS",
                CreateDate = DateTime.Now,
                Id = inboundOrderDet.LinId.ObjToInt(),
            };
                    _stockService.StockInfoDetailService.Repository.AddData(dt_StockInfoDetail);
                }
                Dt_StockInfo stockInfo = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
                (bool, string) result = CheckRequestInbound(roadwayInfo.InSCStationCode, palletCode, true, stockInfo);
                if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
                content = AssignLocUpdateData(roadwayInfo.InSCStationCode, TaskTypeEnum.Inbound.ObjToInt(), palletCode, true, stockInfo, inboundOrder.OrderNo);
            }
            catch (Exception ex)
        //查询仓库托盘货物类型
        public int GetPalletType(Dt_Warehouse warehouse, string palletCode)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            if (warehouse.WarehouseCode == WarehouseEnum.SC01_BC.ToString())
            {
                if (palletCode.Substring(0, 1) == "6")
                {
                    return PalletTypeEnum.MediumPallet.ObjToInt();
            }
            return content;
                else
                {
                    return PalletTypeEnum.LargestPallet.ObjToInt();
        }
            }
            else if (warehouse.WarehouseCode == WarehouseEnum.SC01_BC.ObjToString())
            {
                Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 1));
                if (palletTypeInfo == null)
                {
                    throw new Exception($"托盘号错误");
                }
                return palletTypeInfo.PalletType;
            }
            //else if (warehouse.WarehouseCode == WarehouseEnum.HA152.ObjToString())
            //{
            //    Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 2));
            //    if (palletTypeInfo == null)
            //    {
            //        throw new Exception($"托盘号错误");
            //    }
            //    return palletTypeInfo.PalletType;
            //}
            //else if (warehouse.WarehouseCode == WarehouseEnum.HA57.ObjToString())
            //{
            //    Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 3));
            //    if (palletTypeInfo == null)
            //    {
            //        throw new Exception($"托盘号错误");
            //    }
            //    return palletTypeInfo.PalletType;
            //}
            return -1;
        }
        #region
        //public WebResponseContent InboundRequest(SaveModel saveModel)
        //{
        //    string palletCode = saveModel.palletCode;
        //    if (saveModel.palletCode == null) return WebResponseContent.Instance.Error($"请输入正确托盘号");
        //    WebResponseContent content = new WebResponseContent();
        //    try
        //    {
        //        Dt_InboundOrderDetail inboundOrderDet = BaseDal.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.LPNNo == palletCode).First();
        //        Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == inboundOrderDet.OrderId).Includes(x => x.Details).First();
        //        if (inboundOrder == null)
        //        {
        //            return WebResponseContent.Instance.Error($"未找到入库单信息");
        //        }
        //        Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == inboundOrder.WarehouseId);
        //        Dt_RoadwayInfo roadwayInfo = _basicService.RoadwayInfoService.Repository.QueryFirst(x => x.RoadwayNo == warehouse.WarehouseCode);
        //        if (roadwayInfo != null) { }
        //        if (inboundOrder.Details == null || inboundOrder.Details.Count <= 0)
        //        {
        //            return WebResponseContent.Instance.Error($"未找到入库单明细信息");
        //        }
        //        Dt_StockInfo stockInfo1 = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
        //        if (stockInfo1 == null)
        //        {
        //            Dt_StockInfo dt_Stock = new()
        //            {
        //                BatchNo = inboundOrderDet.BatchNo,
        //                PalletCode = palletCode,
        //                IsFull = true,
        //                StockStatus = (int)StockStatusEmun.组盘暂存,
        //                Creater = "WMS",
        //                CreateDate = DateTime.Now,
        //                MaterialType = (int)InventoryMaterialType.成品,
        //                Materialweight = 0,
        //                Wlstatus = (int)InventoryMaterialStatus.合格,
        //                Mgeneratetime = DateTime.Now,
        //            };
        //            _stockService.StockInfoService.Repository.AddData(dt_Stock);
        //            Dt_StockInfo dt_StockInfo = _stockService.StockInfoService.Repository.GetStockInfo(palletCode);
        //            Dt_StockInfoDetail dt_StockInfoDetail = new()
        //            {
        //                StockId = dt_StockInfo.Id,
        //                MaterielCode = inboundOrderDet.MaterielCode,    //物料号
        //                MaterielName = inboundOrderDet.MaterielName,    //物料名称
        //                OrderNo = inboundOrder.OrderNo,        //物料详情
        //                BatchNo = inboundOrderDet.BatchNo,         //物料批次
        //                LinId = inboundOrderDet.LinId,                    //SerialNumber = targetCodes[2].ToString(),    //包号
        //                                                                  //BatchNoName = dt_Int.OrderNo,
        //                StockQuantity = inboundOrderDet.OrderQuantity,    //重量
        //                                                                  //OutboundQuantity = 1,    //序列号
        //                Status = (int)StockStatusEmun.组盘暂存,
        //                Creater = "WMS",
        //                CreateDate = DateTime.Now,
        //                Id = inboundOrderDet.LinId.ObjToInt(),
        //            };
        //            _stockService.StockInfoDetailService.Repository.AddData(dt_StockInfoDetail);
        //        }
        //        Dt_StockInfo stockInfo = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
        //        (bool, string) result = CheckRequestInbound(roadwayInfo.InSCStationCode, palletCode, true, stockInfo);
        //        if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
        //        content = AssignLocUpdateData(roadwayInfo.InSCStationCode, TaskTypeEnum.Inbound.ObjToInt(), palletCode, true, stockInfo, inboundOrder.OrderNo);
        //    }
        //    catch (Exception ex)
        //    {
        //        content = WebResponseContent.Instance.Error(ex.Message);
        //    }
        //    return content;
        //}
        #endregion
        public string ReceiveWMSInventoryIn = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSInventoryIn"];
        /// <summary>
        /// ç›˜ç‚¹å·®å¼‚数量回传
@@ -290,6 +570,7 @@
            return (true, "成功");
        }
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜æ¡ç ï¼Œèµ·ç‚¹ä½ç½®ï¼Œç”Ÿæˆå…¥åº“信息
        /// </summary>
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs
@@ -157,6 +157,47 @@
            WebResponseContent content = new();
            try
            {
                Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseCode == orderAddDTO.OutWareHouse);
                if (warehouse == null)
                {
                    return WebResponseContent.Instance.Error($"未找到该仓库信息");
                }
                Dt_OutboundOrder oldOuboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == orderAddDTO.No).Includes(x => x.Details).First();
                if (oldOuboundOrder != null)
                {
                    //if (oldOuboundOrder.Details.FirstOrDefault(x => x.LinId == Convert.ToInt32(orderAddDTO.LinId)) != null)
                    //{
                    //    return WebResponseContent.Instance.Error($"该明细行号已存在");
                    //}
                    if (oldOuboundOrder.OutWareHouse != warehouse.WarehouseCode)
                    {
                        return WebResponseContent.Instance.Error($"仓库不一致");
                    }
                    else
                    {
                        OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO();
                        orderAddDTO1.Details = orderAddDTO.DetailList.DicToIEnumerable<OutboundOrderDetailAddDTO>();
                        var details = orderAddDTO1.Details.FirstOrDefault();
                        Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail()
                        {
                            LPNNo = details.LPNNo,
                            BatchNo = details.BatchNo,
                            MaterielCode = details.MaterielCode,
                            MaterielName = details.MaterielName,
                            MaterieSpec = details.MaterieSpec,
                            OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
                            OrderQuantity = details.OrderQuantity,
                            OrderId = oldOuboundOrder.Id,
                            Creater = "WMS",
                            CreateDate= DateTime.Now,
                        };
                        _outboundOrderDetailRepository.AddData(outboundOrderDetail);
                        //_outboundOrderDetailRepository.AddData(outboundOrderDetail);
                    }
                }
                else
                {
                OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO();
                orderAddDTO1.OrderNo = orderAddDTO.No;
                orderAddDTO1.UpperOrderNo = orderAddDTO.No;
@@ -176,7 +217,7 @@
                inboundOrder.OrderStatus = InboundStatusEnum.未开始.ObjToInt();
                inboundOrder.Creater = "WMS";
                inboundOrder.CreateDate = DateTime.Now;
                    bool a = BaseDal.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
                Dt_OutboundOrder oldOutboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == orderAddDTO1.OrderNo).Includes(x => x.Details).First();
                Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.OrderId == oldOutboundOrder.Id);
@@ -192,10 +233,13 @@
                    PalletCode = outboundOrderDetail.LPNNo,
                };
                _unitOfWorkManage.BeginTran();
                bool a = BaseDal.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
                stockSelectViews.Add(stockSelectViewDTO);
                GenerateOutboundTasks(oldOutboundOrder.Id, stockSelectViews);
                _unitOfWorkManage.CommitTran();
                }
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -17,6 +17,7 @@
using AutoMapper;
using MailKit.Search;
using Microsoft.AspNetCore.SignalR;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using Org.BouncyCastle.Asn1.Tsp;
@@ -32,13 +33,16 @@
using System.Threading.Tasks;
using WIDESEA_BasicRepository;
using WIDESEA_Common;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_Core.TaskEnum;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Stock;
using WIDESEA_DTO.Task;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_IInboundService;
@@ -80,10 +84,11 @@
        private readonly IInboundOrderDetail_HtyService _inboundOrderDetail_HtyService;
        private readonly IOutboundOrder_HtyService _outboundOrder_HtyService;
        private readonly IOutboundOrderDetail_HtyService _outboundOrderDetail_HtyService;
        private readonly IPalletTypeInfoRepository _palletTypeInfoRepository;
        private readonly IOutboundOrderDetailRepository _outboundOrderDetailRepository;
        public ITaskRepository Repository => BaseDal;
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _stockRepository = stockRepository;
@@ -101,13 +106,65 @@
            _inboundOrderDetail_HtyService = inboundOrderDetail_HtyService;
            _outboundOrder_HtyService = outboundOrder_HtyService;
            _outboundOrderDetail_HtyService = outboundOrderDetail_HtyService;
            _outboundOrderDetailRepository = outboundOrderDetailRepository;
        }
        public string ReceiveWMSTaskin = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskin"];
        public string ReceiveWMSTaskout = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskout"];
        public string ReceiveWMSTaskAUT = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskAUT"];
        public string ReceiveWMSTaskAllocatein = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskAllocatein"];
        /// <summary>
        /// ä»»åŠ¡ä¿¡æ¯æŽ¨é€è‡³WCS
        /// </summary>
        /// <returns></returns>
        public WebResponseContent PushTasksToWCS(List<Dt_Task> tasks, string agvDescription = "")
        {
            try
            {
                List<WMSTaskDTO> taskDTOs = _mapper.Map<List<WMSTaskDTO>>(tasks);
                taskDTOs.ForEach(x =>
                {
                    x.AGVArea = agvDescription;
                });
                string url = AppSettings.app("WCS");
                if (string.IsNullOrEmpty(url))
                {
                    return WebResponseContent.Instance.Error($"未找到WCSApi地址,请检查配置文件");
                }
                string response = HttpHelper.Post($"{url}/api/Task/ReceiveTask", taskDTOs.Serialize());
                return JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("返回错误");
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// æ”¾è´§å®Œæˆ
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public WebResponseContent PutFinish(string code)
        {
            try
            {
                string url = AppSettings.app("WCS");
                if (string.IsNullOrEmpty(url))
                {
                    return WebResponseContent.Instance.Error($"未找到WCSAApi地址,请检查配置文件");
                }
                string response = HttpHelper.Post($"{url}/api/CTU_AGV/PutFinish?code=" + code);
                return JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("返回错误");
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// ä»»åŠ¡å®Œæˆ
@@ -140,7 +197,140 @@
            }
        }
        public WebResponseContent UpdateTaskStatus(int taskNum, int tasktype)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.TaskType == tasktype);
                if (task == null) return WebResponseContent.Instance.Error("未找到任务信息");
                if (TaskEnumHelper.GetTaskTypeGroup(task.TaskType) == TaskTypeGroup.InboundGroup)
                {
                    task.TaskStatus = TaskInStatusEnum.InFinish.ObjToInt();
                    content = UpdateTaskStatusInFinish(task);
                }
            }
            catch (Exception)
            {
                throw;
            }
            return content;
        }
        public WebResponseContent UpdateTaskStatusInFinish(Dt_Task task)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);//组盘库存
                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);//货位
                var result = CheckCompleted(stockInfo, locationInfo);
                if (!result.Item1)
                {
                    throw new Exception(result.Item2);
                }
                if (stockInfo.StockStatus != StockStatusEmun.入库中.ObjToInt()) throw new Exception($"托盘[{task.PalletCode}],该组盘状态不可入库");
                Dt_StockInfoDetail stockInfoDetail = stockInfo.Details.FirstOrDefault(x => x.StockId == stockInfo.Id);
                List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.Repository.LocationCodesGetStockInfos(new List<string> { stockInfo.LocationCode }).Where(x => x.StockStatus == (int)StockStatusEmun.已入库.ObjToInt()).ToList();
                if (task.TaskType == TaskTypeEnum.PalletInbound.ObjToInt())
                {
                    stockInfo.SerialNumber = stockInfos.Count + 1;
                    stockInfo.InDate = DateTime.Now;
                    stockInfo.StockStatus = StockStatusEmun.已入库.ObjToInt();
                    stockInfoDetail.Status = StockStatusEmun.已入库.ObjToInt();
                    locationInfo.LocationStatus = LocationStatusEnum.Pallet.ObjToInt();
                    task.CurrentAddress = task.NextAddress;
                    task.NextAddress = string.Empty;
                    Db.Ado.BeginTran();
                    BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                    _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
                    _stockService.StockInfoService.Repository.UpdateData(stockInfo);
                    _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetail);
                    Db.Ado.CommitTran();
                    return content;
                }
                #region å…¥åº“单
                Dt_InboundOrder inboundOrder = _inboundService.InbounOrderService.GetInboundOrder(stockInfoDetail.OrderNo);
                if (inboundOrder != null || inboundOrder.Details.Count < 1) throw new Exception($"未找到托盘[{task.PalletCode}]的入库单明细信息");
                Dt_InboundOrderDetail inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == stockInfoDetail.BatchNo && x.MaterielCode == stockInfoDetail.MaterielCode);
                inboundOrderDetail.OrderDetailStatus = inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity ? OrderDetailStatusEnum.Over.ObjToInt() : OrderDetailStatusEnum.GroupAndInbound.ObjToInt();
                if (inboundOrder.Details.FirstOrDefault(x => x.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()) == null)
                {
                    inboundOrder.OrderStatus = InboundStatusEnum.入库完成.ObjToInt();
                }
                else if (inboundOrder.OrderStatus == InboundStatusEnum.未开始.ObjToInt())
                {
                    inboundOrder.OrderStatus = InboundStatusEnum.入库中.ObjToInt();
                }
                stockInfo.SerialNumber = stockInfos.Count + 1;
                stockInfo.InDate = DateTime.Now;
                stockInfo.StockStatus = StockStatusEmun.已入库.ObjToInt();
                stockInfoDetail.Status = StockStatusEmun.已入库.ObjToInt();
                locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                task.CurrentAddress = task.NextAddress;
                task.NextAddress = string.Empty;
                Db.Ado.BeginTran();
                #region ä»»åŠ¡å’Œå…¥åº“å•
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                if (inboundOrder.OrderStatus != InboundStatusEnum.入库完成.ObjToInt())
                {
                    _inboundService.InbounOrderService.Repository.UpdateData(inboundOrder);
                    _inboundService.InboundOrderDetailService.Repository.UpdateData(inboundOrderDetail);
                }
                else
                {
                    List<Dt_InboundOrderDetail> orderDetails = inboundOrder.Details;
                    inboundOrder.Details = null;
                    _inboundService.InbounOrderService.Repository.DeleteAndMoveIntoHty(inboundOrder, OperateType.自动完成);
                    _inboundService.InboundOrderDetailService.Repository.DeleteAndMoveIntoHty(orderDetails, OperateType.自动完成);
                }
                #endregion
                _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
                _stockService.StockInfoService.Repository.UpdateData(stockInfo);
                _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetail);
                //_recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
                Db.Ado.CommitTran();
                SendInboundInfoToWMS(task, inboundOrder, stockInfoDetail);
                #endregion
            }
            catch (Exception ex)
            {
                Db.Ado.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// éªŒè¯æ•°æ®
        /// </summary>
        /// <param name="stockInfo"></param>
        /// <param name="locationInfo"></param>
        /// <returns></returns>
        private (bool, string) CheckCompleted(Dt_StockInfo stockInfo, Dt_LocationInfo locationInfo, bool isCheckStockDetail = true)
        {
            if (stockInfo == null)
            {
                return (false, "未找到组盘信息");
            }
            if (locationInfo == null)
            {
                return (false, "未找到货位信息");
            }
            if (isCheckStockDetail && (stockInfo.Details == null || stockInfo.Details.Count == 0))
            {
                return (false, "未找到组盘明细信息");
            }
            return (true, "成功");
        }
        #region å…¥åº“任务完成
        public WebResponseContent InboundTaskCompleted(int taskNum)
        {
            try
@@ -179,67 +369,886 @@
                {
                    return WebResponseContent.Instance.Error($"货位状态不正确");
                }
                int lastStatus = dt_LocationInfo.LocationStatus;
                dt_LocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                //int lastStatus = dt_LocationInfo.LocationStatus;
                //dt_LocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
                dt_StockInfo.LocationCode = dt_LocationInfo.LocationCode;
                Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == dt_StockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
                Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderNo == dt_StockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
                Dt_InboundOrderDetail? inboundOrderDetail = null;
                //判断单据类型是入库还是调拨入库。。。入库
                if (inboundOrder.OrderType == 0 && inboundOrder != null && dt_StockInfo.StockStatus == StockStatusEmun.入库确认.ObjToInt())
                {
                    #region //判断入库单据明细只有最后一条完成时删除入库单
                    //查询原完成的入库明细数量
                    int overCount = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
                    //明细id查询
                    inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.LinId == dt_StockInfo.Details.FirstOrDefault()?.LinId);
                    foreach (var item in dt_StockInfo.Details)
                    {
                        if (inboundOrderDetail == null)
                        {
                            continue;
                // 3. å¤„理入库逻辑
                return ProcessInbound(task, dt_StockInfo, dt_LocationInfo);
                        }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        private WebResponseContent ProcessInbound(Dt_Task task, Dt_StockInfo stockInfo, Dt_LocationInfo locationInfo)
        {
            int lastStatus = locationInfo.LocationStatus;
            locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
            Dt_InboundOrder inboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>()
                .Where(x => x.OrderNo == stockInfo.Details.FirstOrDefault().OrderNo)
                .Includes(x => x.Details)
                .First();
            if (inboundOrder == null) return WebResponseContent.Instance.Error("未找到入库单信息");
            Dt_InboundOrderDetail inboundOrderDetail = inboundOrder.Details
                .FirstOrDefault(x => x.LinId == stockInfo.Details.FirstOrDefault()?.LinId);
            if (inboundOrder.OrderType == 0 && inboundOrder != null && stockInfo.StockStatus == StockStatusEmun.入库确认.ObjToInt())
            {
                //入库数量回传
                return ProcessNormalInbound(task, stockInfo, locationInfo, lastStatus, inboundOrder, inboundOrderDetail);
            }
            else
            {
                //调拨出入库任务数量回传
                return ProcessAllocateInbound(task, stockInfo, locationInfo, lastStatus, inboundOrder, inboundOrderDetail);
            }
        }
        private WebResponseContent ProcessNormalInbound(Dt_Task task, Dt_StockInfo stockInfo, Dt_LocationInfo locationInfo,
            int lastStatus, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDetail)
        {
            // æ›´æ–°å…¥åº“单明细状态
            UpdateInboundOrderDetails(stockInfo, inboundOrder, ref inboundOrderDetail);
            // æ›´æ–°åº“存明细状态
            stockInfo.Details.ForEach(x => x.Status = StockStatusEmun.入库完成.ObjToInt());
            try
            {
                _unitOfWorkManage.BeginTran();
                // æ›´æ–°ä»»åŠ¡çŠ¶æ€
                UpdateTaskStatus(task);
                // æ›´æ–°è´§ä½çŠ¶æ€
                UpdateLocationStatus(locationInfo, lastStatus);
                // æ›´æ–°åº“存信息
                UpdateStockInfo(stockInfo);
                // æ·»åŠ è®°å½•
                AddRecords(task, stockInfo, locationInfo, lastStatus);
                // æ›´æ–°å…¥åº“单
                UpdateInboundOrder(inboundOrder, inboundOrderDetail);
                // å¦‚果是最后一条明细,处理WMS回传
                if (inboundOrder.Details.Count == 1)
                {
                    var stockInfoDetail = stockInfo.Details.FirstOrDefault();
                    SendInboundInfoToWMS(task, inboundOrder, stockInfoDetail);
                }
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK();
            }
            catch
            {
                _unitOfWorkManage.RollbackTran();
                throw;
            }
        }
        private WebResponseContent ProcessAllocateInbound(Dt_Task task, Dt_StockInfo stockInfo, Dt_LocationInfo locationInfo,
            int lastStatus, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDetail)
        {
            // å¦‚果是最后一条明细
            if (inboundOrder.Details.Count == 1)
            {
                try
                {
                    _unitOfWorkManage.BeginTran();
                    // å¤„理调拨入库单
                    //ProcessAllocateInboundOrder(inboundOrder, inboundOrderDetail);
                    // èŽ·å–ç›¸å…³åº“å­˜ä¿¡æ¯
                    var relatedStockInfo = _stockService.StockInfoService.Repository
                        .QueryData(x => x.BatchNo == inboundOrderDetail.BatchNo);
                    // å‘送调拨信息到WMS
                    SendAllocateInfoToWMS(task, inboundOrder, relatedStockInfo);
                    _unitOfWorkManage.CommitTran();
                }
                catch
                {
                    _unitOfWorkManage.RollbackTran();
                    throw;
                }
            }
            // æ·»åŠ åŽ†å²è®°å½•
            AddInboundOrderDetailHistory(inboundOrderDetail);
            return WebResponseContent.Instance.OK();
        }
        #region Helper Methods
        private void UpdateInboundOrderDetails(Dt_StockInfo stockInfo, Dt_InboundOrder inboundOrder,
            ref Dt_InboundOrderDetail inboundOrderDetail)
        {
            int overCount = inboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
            inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.LinId == stockInfo.Details.FirstOrDefault()?.LinId);
            foreach (var item in stockInfo.Details)
            {
                if (inboundOrderDetail == null) continue;
                        inboundOrderDetail.OverInQuantity += item.StockQuantity;
                        if (inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity)
                        {
                            inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                            overCount += 1;
                    overCount++;
                        }
                        else if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
                        {
                            inboundOrderDetail.OrderDetailStatus = InboundStatusEnum.入库中.ObjToInt();
                        }
                    }
                    dt_StockInfo.Details.ForEach(x =>
                    {
                        x.Status = StockStatusEmun.入库完成.ObjToInt();
                    });
        }
                    _unitOfWorkManage.BeginTran();
        private void UpdateTaskStatus(Dt_Task task)
        {
                    task.TaskStatus = InTaskStatusEnum.InFinish.ObjToInt();
                    BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateType.人工完成 : OperateType.自动完成);
        }
                    _basicService.LocationInfoService.Repository.UpdateData(dt_LocationInfo);
                    _stockRepository.StockInfoRepository.UpdateData(dt_StockInfo);
                    _stockRepository.StockInfoDetailRepository.UpdateData(dt_StockInfo.Details);
                    _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(dt_LocationInfo, lastStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum);
                    _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(dt_StockInfo, dt_StockInfo.Details, dt_StockInfo.Details.Sum(x => x.StockQuantity), dt_StockInfo.Details.Sum(x => x.StockQuantity), StockChangeType.Inbound, task.TaskNum);
        private void UpdateLocationStatus(Dt_LocationInfo locationInfo, int lastStatus)
        {
            _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
        }
        private void UpdateStockInfo(Dt_StockInfo stockInfo)
        {
            _stockRepository.StockInfoRepository.UpdateData(stockInfo);
            _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
        }
        private void AddRecords(Dt_Task task, Dt_StockInfo stockInfo, Dt_LocationInfo locationInfo, int lastStatus)
        {
            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(
                locationInfo, lastStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum);
            _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(
                stockInfo, stockInfo.Details,
                stockInfo.Details.Sum(x => x.StockQuantity),
                stockInfo.Details.Sum(x => x.StockQuantity),
                StockChangeType.Inbound, task.TaskNum);
        }
        private void UpdateInboundOrder(Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDetail)
        {
                    if (inboundOrder != null)
                    {
                        _inboundService.InbounOrderService.UpdateData(inboundOrder);
                        _inboundService.InboundOrderDetailService.UpdateData(inboundOrderDetail);
                    }
                    _unitOfWorkManage.CommitTran();
        }
                    if (inboundOrder.Details.Count == 1)
        private void SendInboundInfoToWMS(Dt_Task task, Dt_InboundOrder inboundOrder, Dt_StockInfoDetail stockInfoDetail)
                    {
                        var stockInfoDetail = dt_StockInfo.Details.FirstOrDefault();
            if (stockInfoDetail == null) return;
            var houseInboundPassBack = new HouseInboundPassBack
            {
                ApiType = "AsnController",
                Method = "AsrsGroudingAsn",
                Parameters = new List<HouseInboundPassBack.data>
        {
            new HouseInboundPassBack.data
            {
                Value = new List<data.data1>
                {
                    new data.data1
                    {
                        AsnNo = task.OrderNo,
                        InWarehouse = task.Roadway,
                        TransactionCode = inboundOrder.TransactionCode,
                        InoutType = inboundOrder.OrderType,
                        OrderType = inboundOrder.InoutType,
                        DetailList = new List<data.data1.Inbound>
                        {
                            new data.data1.Inbound
                            {
                                LinId = stockInfoDetail.LinId,
                                MaterielCode = stockInfoDetail.MaterielCode,
                                OrderQuantity = stockInfoDetail.StockQuantity,
                                BatchNo = stockInfoDetail.BatchNo,
                                FinishQty = stockInfoDetail.StockQuantity,
                                LocationName = task.TargetAddress
                            }
                        }
                    }
                }
            }
        }
            };
            var authResult = AuthenticateWithWMS();
            if (authResult.IsSuccess)
            {
                houseInboundPassBack.Context = new Dictionary<string, string>
        {
            { "Ticket", authResult.Ticket },
            { "InvOrgId", authResult.InvOrgId }
        };
                HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskin, houseInboundPassBack, "立库入库数量回传WMS");
            }
        }
        private void ProcessAllocateInboundOrder(Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDetail)
        {
            // æ·»åŠ åŽ†å²è®°å½•
            var history = new Dt_InboundOrder_Hty
            {
                OrderStatus = inboundOrder.OrderStatus,
                CreateType = inboundOrder.CreateType,
                UpperOrderNo = inboundOrder.UpperOrderNo,
                OrderNo = inboundOrder.OrderNo,
                TransactionCode = inboundOrder.TransactionCode,
                InoutType = inboundOrder.InoutType,
                OrderType = inboundOrder.OrderType,
                Creater = "WMS",
                CreateDate = DateTime.Now,
            };
            _inboundOrder_HtyService.AddData(history);
            // æ·»åŠ æ˜Žç»†åŽ†å²è®°å½•
            var detailHistory = new Dt_InboundOrderDetail_Hty
            {
                OrderId = inboundOrderDetail.OrderId,
                MaterielCode = inboundOrderDetail.MaterielCode,
                MaterielName = inboundOrderDetail.MaterielName,
                BatchNo = inboundOrderDetail.BatchNo,
                OrderQuantity = inboundOrderDetail.OrderQuantity,
                ReceiptQuantity = inboundOrderDetail.ReceiptQuantity,
                OverInQuantity = inboundOrderDetail.OverInQuantity,
                OrderDetailStatus = inboundOrderDetail.OrderDetailStatus,
                Creater = "WMS",
                CreateDate = DateTime.Now,
            };
            _inboundOrderDetail_HtyService.AddData(detailHistory);
            // åˆ é™¤åŽŸæ•°æ®
            _inboundService.InbounOrderService.DeleteData(inboundOrder);
            _inboundService.InboundOrderDetailService.DeleteData(inboundOrderDetail);
        }
        private void SendAllocateInfoToWMS(Dt_Task task, Dt_InboundOrder inboundOrder, List<Dt_StockInfo> stockInfos)
        {
            var detail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == stockInfos.FirstOrDefault().Id);
            var inventoryAllocate = new InventoryAllocate
            {
                ApiType = "AsnController",
                Method = "AsrsGroudingAsn",
                Parameters = new List<InventoryAllocate.Allocate>
        {
             new InventoryAllocate.Allocate
            {
                Value = new List<Allocate.data1>
                {
                    new Allocate.data1
                    {
                        No = task.OrderNo,
                        InWarehouse = task.Roadway,
                        TransactionCode = inboundOrder.TransactionCode,
                        InoutType = inboundOrder.OrderType,
                        OrderType = inboundOrder.InoutType,
                        DetailList = new List<Allocate.data1.Inventory>
                        {
                            new Allocate.data1.Inventory
                            {
                                LinId = detail.LinId,
                                MaterielCode = detail.MaterielCode,
                                OrderQuantity = detail.StockQuantity,
                                BatchNo = detail.BatchNo,
                                FinishQty = detail.StockQuantity,
                                LocationName = task.TargetAddress
                            }
                        }
                    }
                }
            }
        }
            };
            var authResult = AuthenticateWithWMS();
            if (authResult.IsSuccess)
            {
                inventoryAllocate.Context = new Dictionary<string, string>
        {
            { "Ticket", authResult.Ticket },
            { "InvOrgId", authResult.InvOrgId }
        };
                HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAllocatein, inventoryAllocate, "调拨入库数量回传WMS");
            }
        }
        private void AddInboundOrderDetailHistory(Dt_InboundOrderDetail inboundOrderDetail)
        {
            var history = new Dt_InboundOrderDetail_Hty
            {
                OrderId = inboundOrderDetail.OrderId,
                MaterielCode = inboundOrderDetail.MaterielCode,
                MaterielName = inboundOrderDetail.MaterielName,
                BatchNo = inboundOrderDetail.BatchNo,
                OrderQuantity = inboundOrderDetail.OrderQuantity,
                ReceiptQuantity = inboundOrderDetail.ReceiptQuantity,
                OverInQuantity = inboundOrderDetail.OverInQuantity,
                OrderDetailStatus = inboundOrderDetail.OrderDetailStatus,
                Creater = "WMS",
                CreateDate = DateTime.Now,
            };
            _inboundOrderDetail_HtyService.AddData(history);
            _inboundService.InboundOrderDetailService.DeleteData(inboundOrderDetail);
        }
        private (bool IsSuccess, string Ticket, string InvOrgId) AuthenticateWithWMS()
        {
            var authentication = new Authentication
            {
                ApiType = "AuthenticationController",
                Parameters = new List<Parameter>
        {
            new Parameter { Value = "LKAdmin" },
            new Parameter { Value = "LKAdmin" }
        },
                Method = "Login",
            };
            var response = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
            if (response.Status && response.Context != null)
            {
                return (true, response.Context["Ticket"].ToString(), response.Context["InvOrgId"].ToString());
            }
            return (false, null, null);
        }
        #endregion
        #endregion
        #region//出库任务完成
        public WebResponseContent OutboundTaskCompleted(int taskNum)
        {
            try
            {
                // 1. éªŒè¯ä»»åŠ¡å’ŒèŽ·å–åŸºç¡€æ•°æ®
                var validationResult = ValidateAndGetBaseData(taskNum, out var task, out var stockInfo,
                    out var locationInfo, out var outStockLockInfos);
                if (!validationResult.Status) return validationResult;
                // 2. å¤„理出库订单详情
                var outboundOrderDetails = ProcessOutboundOrderDetails(outStockLockInfos);
                // 3. æ‰§è¡Œæ ¸å¿ƒå‡ºåº“逻辑
                return ExecuteOutboundLogic(task, stockInfo, locationInfo, outboundOrderDetails);
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        #region ç§æœ‰æ–¹æ³•
        private WebResponseContent ValidateAndGetBaseData(int taskNum, out Dt_Task task,
            out Dt_StockInfo stockInfo, out Dt_LocationInfo locationInfo,
            out List<Dt_OutStockLockInfo> outStockLockInfos)
        {
            task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
            if (task == null)
            {
                stockInfo = null;
                locationInfo = null;
                outStockLockInfos = null;
                return WebResponseContent.Instance.Error("未找到任务信息");
            }
            var SourceAddress = task.SourceAddress;
            stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
            locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == SourceAddress);
            outStockLockInfos = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.TaskNum == taskNum);
            if (stockInfo == null) return WebResponseContent.Instance.Error("未找到库存信息");
            if (locationInfo == null) return WebResponseContent.Instance.Error("未找到货位信息");
            if (outStockLockInfos == null || outStockLockInfos.Count == 0)
                return WebResponseContent.Instance.Error("未找到出库详情信息");
            return WebResponseContent.Instance.OK();
        }
        private List<Dt_OutboundOrderDetail> ProcessOutboundOrderDetails(List<Dt_OutStockLockInfo> outStockLockInfos)
        {
            var outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
            foreach (var lockInfo in outStockLockInfos)
            {
                var detail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == lockInfo.OrderDetailId);
                if (detail != null)
                {
                    detail.OverOutQuantity = detail.LockQuantity;
                    if (detail.LockQuantity == detail.OrderQuantity)
                    {
                        detail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                    }
                    outboundOrderDetails.Add(detail);
                }
            }
            return outboundOrderDetails;
        }
        private WebResponseContent ExecuteOutboundLogic(Dt_Task task, Dt_StockInfo stockInfo,
            Dt_LocationInfo locationInfo, List<Dt_OutboundOrderDetail> outboundOrderDetails)
        {
            try
            {
                _unitOfWorkManage.BeginTran();
                // æ›´æ–°å‡ºåº“订单详情
                _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                // æ›´æ–°åº“存状态
                UpdateStockStatus(stockInfo, locationInfo);
                // æ›´æ–°è´§ä½çŠ¶æ€
                UpdateLocationStatus(locationInfo);
                // å¤„理任务完成
                CompleteTask(task);
                // æ·»åŠ çŠ¶æ€å˜æ›´è®°å½•
                AddStatusChangeRecord(task, stockInfo, locationInfo);
                // æ ¹æ®è®¢å•类型处理不同逻辑
                var outDetail = _outboundService.OutboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
                    .Where(x => x.LPNNo == stockInfo.PalletCode).First();
                var outboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>()
                    .Where(x => x.Id == outDetail.OrderId).Includes(x => x.Details).First();
                if (outboundOrder.OrderType == 1) // æ™®é€šå‡ºåº“
                {
                    ProcessNormalOutbound(task, stockInfo, outboundOrder, outDetail);
                }
                else if (outboundOrder.OrderType == 240) // ç›˜ç‚¹å‡ºåº“
                {
                    // ç›˜ç‚¹å‡ºåº“特殊处理逻辑
                }
                else // è°ƒæ‹¨å‡ºåº“
                {
                    ProcessAllocateOutbound(task, stockInfo, outboundOrder, outDetail);
                }
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK();
            }
            catch
            {
                _unitOfWorkManage.RollbackTran();
                throw;
            }
        }
        private void UpdateStockStatus(Dt_StockInfo stockInfo, Dt_LocationInfo locationInfo)
        {
            stockInfo.LocationCode = locationInfo.LocationCode;
            stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
            _stockService.StockInfoService.Repository.UpdateData(stockInfo);
        }
        private void UpdateLocationStatus(Dt_LocationInfo locationInfo)
        {
            int beforeStatus = locationInfo.LocationStatus;
            locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
            _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
        }
        private void CompleteTask(Dt_Task task)
        {
            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
        }
        private void AddStatusChangeRecord(Dt_Task task, Dt_StockInfo stockInfo, Dt_LocationInfo locationInfo)
        {
            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(
                locationInfo,
                locationInfo.LocationStatus,
                StockChangeType.Outbound.ObjToInt(),
                stockInfo.Details.FirstOrDefault()?.OrderNo ?? "",
                task.TaskNum);
        }
        private void ProcessNormalOutbound(Dt_Task task, Dt_StockInfo stockInfo,
            Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outDetail)
        {
            var stockInfoDetail = _stockRepository.StockInfoDetailRepository.Db.Queryable<Dt_StockInfoDetail>()
                .Where(x => x.StockId == stockInfo.Id).First();
            if (outboundOrder.Details.Count == 1)
            {
                MoveOutboundOrderToHistory(outboundOrder);
            }
            MoveOutboundDetailToHistory(outDetail);
            // å‘送出库信息到WMS
            SendNormalOutboundToWMS(task, outboundOrder, stockInfoDetail, outDetail);
            // åˆ é™¤åº“存信息
            DeleteStockInfo(stockInfo);
        }
        private void ProcessAllocateOutbound(Dt_Task task, Dt_StockInfo stockInfo,
            Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outDetail)
        {
            var relatedStockInfos = _stockService.StockInfoService.Repository.QueryData(x => x.BatchNo == outDetail.BatchNo);
            if (outboundOrder.Details.Count == 1)
            {
                MoveOutboundOrderToHistory(outboundOrder);
            }
            MoveOutboundDetailToHistory(outDetail);
            // å‘送调拨出库信息到WMS
            SendAllocateOutboundToWMS(task, outboundOrder, outDetail, relatedStockInfos);
            // åˆ é™¤åº“存信息
            DeleteStockInfo(stockInfo);
        }
        private void MoveOutboundOrderToHistory(Dt_OutboundOrder outboundOrder)
        {
            var history = new Dt_OutboundOrder_Hty
            {
                OrderStatus = outboundOrder.OrderStatus,
                CreateType = outboundOrder.CreateType,
                UpperOrderNo = outboundOrder.UpperOrderNo,
                OrderNo = outboundOrder.OrderNo,
                OutWareHouse = outboundOrder.OutWareHouse,
                TransactionCode = outboundOrder.TransactionCode,
                InoutType = outboundOrder.InoutType,
                OrderType = outboundOrder.OrderType,
                Creater = "WMS",
                CreateDate = DateTime.Now,
            };
            _outboundOrder_HtyService.AddData(history);
            _outboundService.OutboundOrderService.DeleteData(outboundOrder);
        }
        private void MoveOutboundDetailToHistory(Dt_OutboundOrderDetail outDetail)
        {
            var detailHistory = new Dt_OutboundOrderDetail_Hty
            {
                OrderId = outDetail.OrderId,
                MaterielCode = outDetail.MaterielCode,
                MaterielName = outDetail.MaterielName,
                BatchNo = outDetail.BatchNo,
                OrderQuantity = outDetail.OrderQuantity,
                OrderDetailStatus = outDetail.OrderDetailStatus,
                Creater = "WMS",
                CreateDate = DateTime.Now,
            };
            _outboundOrderDetail_HtyService.AddData(detailHistory);
            _outboundService.OutboundOrderService.DeleteData(outDetail);
        }
        private void SendNormalOutboundToWMS(Dt_Task task, Dt_OutboundOrder outboundOrder,
            Dt_StockInfoDetail stockInfoDetail, Dt_OutboundOrderDetail outDetail)
        {
            var passBack = new HouseoutboundPassBack
            {
                ApiType = "ShippingOrderController",
                Method = "AsrsOutboundSO",
                Parameters = new List<HouseoutboundPassBack.datas>
        {
            new HouseoutboundPassBack.datas
            {
                Value = new List<HouseoutboundPassBack.datas.data1>
                {
                    new HouseoutboundPassBack.datas.data1
                    {
                        No = outboundOrder.OrderNo,
                        OutWareHouse = task.Roadway,
                        TransactionCode = outboundOrder.TransactionCode,
                        InoutType = outboundOrder.OrderType,
                        OrderType = outboundOrder.InoutType,
                        DetailList = new List<HouseoutboundPassBack.datas.data1.Inbound>
                        {
                            new HouseoutboundPassBack.datas.data1.Inbound
                            {
                                LinId = outDetail.LinId,
                                LPN_No = task.PalletCode,
                                MaterielCode = stockInfoDetail.MaterielCode,
                                OrderQuantity = stockInfoDetail.OutboundQuantity,
                                BatchNo = stockInfoDetail.BatchNo,
                                FinishQty = stockInfoDetail.OutboundQuantity,
                                LocationName = task.SourceAddress
                            }
                        }
                    }
                }
            }
        }
            };
            var authResult = AuthenticateWithWMS();
            if (authResult.IsSuccess)
            {
                passBack.Context = new Dictionary<string, string>
        {
            { "Ticket", authResult.Ticket },
            { "InvOrgId", authResult.InvOrgId }
        };
                HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskin, passBack, "立库入库数量回传WMS");
            }
        }
        private void SendAllocateOutboundToWMS(Dt_Task task, Dt_OutboundOrder outboundOrder,
            Dt_OutboundOrderDetail outDetail, List<Dt_StockInfo> stockInfos)
        {
            var allocate = new InventoryAllocate
            {
                ApiType = "InventoryAllocateController",
                Method = "AsrsFinishedStockCount",
                Parameters = new List<Allocate>
        {
            new Allocate
            {
                Value = new List<Allocate.data1>
                {
                    new Allocate.data1
                    {
                        No = outboundOrder.OrderNo,
                        InWarehouse = task.Roadway,
                        TransactionCode = outboundOrder.TransactionCode,
                        InoutType = outboundOrder.OrderType,
                        OrderType = outboundOrder.InoutType,
                        DetailList = stockInfos.Select(item =>
                        {
                            var detail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == item.Id);
                            return new Allocate.data1.Inventory
                            {
                                LinId = outDetail.LinId,
                                LPN_No = item.PalletCode,
                                MaterielCode = detail.MaterielCode,
                                OrderQuantity = detail.OutboundQuantity,
                                BatchNo = detail.BatchNo,
                                FinishQty = detail.OutboundQuantity,
                                LocationName = task.SourceAddress
                            };
                        }).ToList()
                    }
                }
            }
        }
            };
            var authResult = AuthenticateWithWMS();
            if (authResult.IsSuccess)
            {
                allocate.Context = new Dictionary<string, string>
        {
            { "Ticket", authResult.Ticket },
            { "InvOrgId", authResult.InvOrgId }
        };
                HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskin, allocate, "立库入库数量回传WMS");
            }
        }
        private void DeleteStockInfo(Dt_StockInfo stockInfo)
        {
            _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo,
                App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
            _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details,
                App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
        }
        #endregion
        #endregion
        #region
        //public WebResponseContent InboundTaskCompleted(int taskNum)
        //{
        //    try
        //    {
        //        Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
        //        if (task == null)
        //        {
        //            return WebResponseContent.Instance.Error($"未找到该任务");
        //        }
        //        if (task.TaskType != TaskTypeEnum.Inbound.ObjToInt())
        //        {
        //            return WebResponseContent.Instance.Error($"任务类型错误");
        //        }
        //        Dt_StockInfo dt_StockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.Details).First();
        //        if (dt_StockInfo == null)
        //        {
        //            return WebResponseContent.Instance.Error($"未找到托盘对应的组盘信息");
        //        }
        //        if (!string.IsNullOrEmpty(dt_StockInfo.LocationCode))
        //        {
        //            return WebResponseContent.Instance.Error($"该托盘已绑定货位");
        //        }
        //        if (dt_StockInfo.Details == null || dt_StockInfo.Details.Count == 0)
        //        {
        //            return WebResponseContent.Instance.Error($"未找到该托盘库存明细信息");
        //        }
        //        Dt_LocationInfo dt_LocationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
        //        if (dt_LocationInfo == null)
        //        {
        //            return WebResponseContent.Instance.Error($"未找到目标货位信息");
        //        }
        //        if (dt_LocationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
        //        {
        //            return WebResponseContent.Instance.Error($"货位状态不正确");
        //        }
        //        int lastStatus = dt_LocationInfo.LocationStatus;
        //        dt_LocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
        //        Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
        //        dt_StockInfo.LocationCode = dt_LocationInfo.LocationCode;
        //        Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == dt_StockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
        //        Dt_InboundOrderDetail? inboundOrderDetail = null;
        //        //判断单据类型是入库还是调拨入库。。。入库
        //        if (inboundOrder.OrderType == 0 && inboundOrder != null && dt_StockInfo.StockStatus == StockStatusEmun.入库确认.ObjToInt())
        //        {
        //            #region //判断入库单据明细只有最后一条完成时删除入库单
        //            //查询原完成的入库明细数量
        //            int overCount = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
        //            //明细id查询
        //            inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.LinId == dt_StockInfo.Details.FirstOrDefault()?.LinId);
        //            foreach (var item in dt_StockInfo.Details)
        //            {
        //                if (inboundOrderDetail == null)
        //                {
        //                    continue;
        //                }
        //                inboundOrderDetail.OverInQuantity += item.StockQuantity;
        //                if (inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity)
        //                {
        //                    inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
        //                    overCount += 1;
        //                }
        //                else if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
        //                {
        //                    inboundOrderDetail.OrderDetailStatus = InboundStatusEnum.入库中.ObjToInt();
        //                }
        //            }
        //            dt_StockInfo.Details.ForEach(x =>
        //            {
        //                x.Status = StockStatusEmun.入库完成.ObjToInt();
        //            });
        //            _unitOfWorkManage.BeginTran();
        //            task.TaskStatus = InTaskStatusEnum.InFinish.ObjToInt();
        //            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateType.人工完成 : OperateType.自动完成);
        //            _basicService.LocationInfoService.Repository.UpdateData(dt_LocationInfo);
        //            _stockRepository.StockInfoRepository.UpdateData(dt_StockInfo);
        //            _stockRepository.StockInfoDetailRepository.UpdateData(dt_StockInfo.Details);
        //            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(dt_LocationInfo, lastStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum);
        //            _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(dt_StockInfo, dt_StockInfo.Details, dt_StockInfo.Details.Sum(x => x.StockQuantity), dt_StockInfo.Details.Sum(x => x.StockQuantity), StockChangeType.Inbound, task.TaskNum);
        //            if (inboundOrder != null)
        //            {
        //                _inboundService.InbounOrderService.UpdateData(inboundOrder);
        //                _inboundService.InboundOrderDetailService.UpdateData(inboundOrderDetail);
        //            }
        //            _unitOfWorkManage.CommitTran();
        //            if (inboundOrder.Details.Count == 1)
        //            {
        //                var stockInfoDetail = dt_StockInfo.Details.FirstOrDefault();
        //                #region//入库信息返回上位WMS。。立库入库数量回传
        //                HouseInboundPassBack houseInboundPassBack = new HouseInboundPassBack();
        //                houseInboundPassBack.ApiType = "AsnController";
        //                houseInboundPassBack.Method = "AsrsGroudingAsn";
        //                data data = new data();
        //                data.data1 data1 = new data.data1();
        //                data1.AsnNo = task.OrderNo;
        //                data1.InWarehouse = task.Roadway;
        //                data1.TransactionCode = inboundOrder.TransactionCode;
        //                data1.InoutType = inboundOrder.OrderType;
        //                data1.OrderType = inboundOrder.InoutType;
        //                data.data1.Inbound inbound = new data.data1.Inbound
        //                {
        //                    LinId = stockInfoDetail.LinId,
        //                    MaterielCode = stockInfoDetail.MaterielCode,
        //                    OrderQuantity = stockInfoDetail.StockQuantity,
        //                    BatchNo = stockInfoDetail.BatchNo,
        //                    FinishQty = stockInfoDetail.StockQuantity,
        //                    LocationName = task.TargetAddress
        //                };
        //                data.Value.Add(data1);
        //                data1.DetailList.Add(inbound);
        //                houseInboundPassBack.Parameters.Add(data);
        //                Authentication authentication = new Authentication()
        //                {
        //                    ApiType = "AuthenticationController",
        //                    Parameters = new List<Parameter>
        //        {
        //             new Parameter { Value = "LKAdmin"},
        //             new Parameter { Value = "LKAdmin"},
        //        },
        //                    Method = "Login",
        //                };
        //                var responses1 = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
        //                var Ticket = responses1.Context["Ticket"].ToString();
        //                var InvOrgId = responses1.Context["InvOrgId"].ToString();
        //                if (Ticket != null)
        //                {
        //                    houseInboundPassBack.Context = new Dictionary<string, string>();
        //                    houseInboundPassBack.Context.Add("Ticket", Ticket);
        //                    houseInboundPassBack.Context.Add("InvOrgId", InvOrgId);
        //                    var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskin, houseInboundPassBack, "立库入库数量回传WMS");
        //                }
        //                #endregion
        //            }
        //        }
        //        else
        //        {
        //            #region //判断调拨入库单据明细只有最后一条完成时删除入库单并一次返回入库明细信息
        //            if (inboundOrder.Details.Count == 1)
        //            {
        //                List<Dt_StockInfo> StockInfo = _stockService.StockInfoService.Repository.QueryData(x => x.BatchNo == inboundOrderDetail.BatchNo);
                        //    Dt_InboundOrder_Hty inboundOrder_Hty = new Dt_InboundOrder_Hty
                        //    {
                        //        OrderStatus = inboundOrder.OrderStatus,
@@ -254,9 +1263,74 @@
                        //        Creater = "WMS",
                        //        CreateDate = DateTime.Now,
                        //    };
                        //    //_inboundOrder_HtyService.AddData(inboundOrder_Hty);
                        //    //_inboundService.InbounOrderService.DeleteData(inboundOrder);
        //                _inboundOrder_HtyService.AddData(inboundOrder_Hty);
        //                _inboundService.InbounOrderService.DeleteData(inboundOrder);
        //                Dt_InboundOrderDetail_Hty dt_InboundOrderDetail_HtyS = new Dt_InboundOrderDetail_Hty
        //                {
        //                    OrderId = inboundOrderDetail.OrderId,
        //                    MaterielCode = inboundOrderDetail.MaterielCode,
        //                    MaterielName = inboundOrderDetail.MaterielName,
        //                    BatchNo = inboundOrderDetail.BatchNo,
        //                    OrderQuantity = inboundOrderDetail.OrderQuantity,
        //                    ReceiptQuantity = inboundOrderDetail.ReceiptQuantity,
        //                    OverInQuantity = inboundOrderDetail.OverInQuantity,
        //                    OrderDetailStatus = inboundOrderDetail.OrderDetailStatus,
        //                    Creater = "WMS",
        //                    CreateDate = DateTime.Now,
        //                };
        //                _inboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_HtyS);
        //                _inboundService.InboundOrderDetailService.DeleteData(inboundOrderDetail);
        //                #endregion
        //                #region//调拨任务数量回传WMS
        //                InventoryAllocate inventoryAllocate = new InventoryAllocate();
        //                inventoryAllocate.ApiType = "InventoryAllocateController";
        //                inventoryAllocate.Method = "AsrsFinishedStockCount";
        //                Allocate allocate = new Allocate();
        //                Allocate.data1 data1 = new Allocate.data1();
        //                data1.No = task.OrderNo;
        //                data1.InWarehouse = task.Roadway;
        //                data1.TransactionCode = inboundOrder.TransactionCode;
        //                data1.InoutType = inboundOrder.OrderType;
        //                data1.OrderType = inboundOrder.InoutType;
        //                foreach (var item in StockInfo)
        //                {
        //                    Dt_StockInfoDetail detail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == item.Id);
        //                    Allocate.data1.Inventory inbound = new Allocate.data1.Inventory();
        //                    inbound.LinId = detail.LinId;
        //                    inbound.LPN_No = item.PalletCode;
        //                    inbound.MaterielCode = detail.MaterielCode;
        //                    inbound.OrderQuantity = detail.StockQuantity;
        //                    inbound.BatchNo = detail.BatchNo;
        //                    inbound.FinishQty = detail.StockQuantity;
        //                    inbound.LocationName = item.LocationCode;
        //                    data1.DetailList.Add(inbound);
                        //}
        //                allocate.Value.Add(data1);
        //                inventoryAllocate.Parameters.Add(allocate);
        //                Authentication authentication = new Authentication()
        //                {
        //                    ApiType = "AuthenticationController",
        //                    Parameters = new List<Parameter>
        //            {
        //             new Parameter { Value = "LKAdmin"},
        //             new Parameter { Value = "LKAdmin"},
        //            },
        //                    Method = "Login",
        //                };
        //                var responses1 = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
        //                var Ticket = responses1.Context["Ticket"].ToString();
        //                var InvOrgId = responses1.Context["InvOrgId"].ToString();
        //                if (Ticket != null)
        //                {
        //                    inventoryAllocate.Context = new Dictionary<string, string>();
        //                    inventoryAllocate.Context.Add("Ticket", Ticket);
        //                    inventoryAllocate.Context.Add("InvOrgId", InvOrgId);
        //                    var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAllocatein, inventoryAllocate, "调拨入库数量回传WMS");
        //                }
        //            }
        //            #endregion
                        //Dt_InboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_InboundOrderDetail_Hty
                        //{
                        //    OrderId = inboundOrderDetail.OrderId,
@@ -272,417 +1346,268 @@
                        //};
                        //_inboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty);
                        //_inboundService.InboundOrderDetailService.DeleteData(inboundOrderDetail);
        //        }
        //        return WebResponseContent.Instance.OK();
        //    }
        //    catch (Exception ex)
        //    {
        //        _unitOfWorkManage.RollbackTran();
        //        return WebResponseContent.Instance.Error(ex.Message);
        //    }
        //}
                        #endregion
                        #region//入库信息返回上位WMS。。立库入库数量回传
                        HouseInboundPassBack houseInboundPassBack = new HouseInboundPassBack();
                        houseInboundPassBack.ApiType = "AsnController";
                        houseInboundPassBack.Method = "AsrsGroudingAsn";
                        data data = new data();
                        data.data1 data1 = new data.data1();
                        data1.AsnNo = task.OrderNo;
                        data1.InWarehouse = task.Roadway;
                        data1.TransactionCode = inboundOrder.TransactionCode;
                        data1.InoutType = inboundOrder.OrderType;
                        data1.OrderType = inboundOrder.InoutType;
                        data.data1.Inbound inbound = new data.data1.Inbound
                        {
                            LinId = stockInfoDetail.LinId,
                            MaterielCode = stockInfoDetail.MaterielCode,
                            OrderQuantity = stockInfoDetail.StockQuantity,
                            BatchNo = stockInfoDetail.BatchNo,
                            FinishQty = stockInfoDetail.StockQuantity,
                            LocationName = task.TargetAddress
                        };
                        data.Value.Add(data1);
                        data1.DetailList.Add(inbound);
                        houseInboundPassBack.Parameters.Add(data);
                        Authentication authentication = new Authentication()
                        {
                            ApiType = "AuthenticationController",
                            Parameters = new List<Parameter>
                {
                     new Parameter { Value = "LKAdmin"},
                     new Parameter { Value = "LKAdmin"},
                },
                            Method = "Login",
                        };
                        var responses1 = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
                        var Ticket = responses1.Context["Ticket"].ToString();
                        var InvOrgId = responses1.Context["InvOrgId"].ToString();
                        if (Ticket != null)
                        {
                            houseInboundPassBack.Context = new Dictionary<string, string>();
                            houseInboundPassBack.Context.Add("Ticket", Ticket);
                            houseInboundPassBack.Context.Add("InvOrgId", InvOrgId);
                            var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskin, houseInboundPassBack, "立库入库数量回传WMS");
                        }
        #region
        //public WebResponseContent OutboundTaskCompleted(int taskNum)
        //{
        //    try
        //    {
        //        Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
        //        if (task == null)
        //        {
        //            return WebResponseContent.Instance.Error($"未找到任务信息");
        //        }
        //        Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
        //        Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
        //        if (stockInfo == null)
        //        {
        //            return WebResponseContent.Instance.Error($"未找到库存信息");
        //        }
        //        if (locationInfo == null)
        //        {
        //            return WebResponseContent.Instance.Error($"未找到货位信息");
        //        }
        //        List<Dt_OutStockLockInfo> outStockLockInfos = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.TaskNum == taskNum);
        //        if (outStockLockInfos == null || outStockLockInfos.Count == 0)
        //        {
        //            return WebResponseContent.Instance.Error($"未找到出库详情信息");
        //        }
        //        List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
        //        for (int i = 0; i < outStockLockInfos.Count; i++)
        //        {
        //            Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == outStockLockInfos[i].OrderDetailId);
        //            if (outboundOrderDetail != null)
        //            {
        //                outboundOrderDetail.OverOutQuantity = outboundOrderDetail.LockQuantity;
        //                if (outboundOrderDetail.LockQuantity == outboundOrderDetail.OrderQuantity)
        //                {
        //                    outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
        //                }
        //                outboundOrderDetails.Add(outboundOrderDetail);
        //            }
        //        }
        //        _unitOfWorkManage.BeginTran();
        //        _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
        //        stockInfo.LocationCode = locationInfo.LocationCode;
        //        stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
        //        _stockService.StockInfoService.Repository.UpdateData(stockInfo);
        //        int beforeStatus = locationInfo.LocationStatus;
        //        locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
        //        _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
        //        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
        //        _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Outbound.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
        //        _unitOfWorkManage.CommitTran();
        //        Dt_StockInfoDetail stockInfoDetail = _stockRepository.StockInfoDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(x => x.StockId == stockInfo.Id).First();
        //        Dt_OutboundOrderDetail outDetail = _outboundService.OutboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>().Where(x => x.LPNNo == stockInfo.PalletCode).First();
        //        Dt_OutboundOrder outboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == outDetail.OrderId).Includes(x => x.Details).First();
        //        //判断单据类型是出库还是调拨出库。。。出库
        //        if (outboundOrder.OrderType == 1)
        //        {
        //            #region //判断出库单据明细只有最后一条完成时删除出库单
        //            if (outboundOrder.Details.Count == 1)
        //            {
        //                Dt_OutboundOrder_Hty inboundOrder_Hty = new Dt_OutboundOrder_Hty
        //                {
        //                    OrderStatus = outboundOrder.OrderStatus,
        //                    CreateType = outboundOrder.CreateType,
        //                    //SourceId = oldOutboundOrder.SourceId,
        //                    UpperOrderNo = outboundOrder.UpperOrderNo,
        //                    OrderNo = outboundOrder.OrderNo,
        //                    OutWareHouse = outboundOrder.OutWareHouse,
        //                    TransactionCode = outboundOrder.TransactionCode,
        //                    InoutType = outboundOrder.InoutType,
        //                    OrderType = outboundOrder.OrderType,
        //                    Creater = "WMS",
        //                    CreateDate = DateTime.Now,
        //                };
        //                _outboundOrder_HtyService.AddData(inboundOrder_Hty);
        //                _outboundService.OutboundOrderService.DeleteData(outboundOrder);
        //            }
        //            Dt_OutboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_OutboundOrderDetail_Hty
        //            {
        //                OrderId = outDetail.OrderId,
        //                MaterielCode = outDetail.MaterielCode,
        //                MaterielName = outDetail.MaterielName,
        //                BatchNo = outDetail.BatchNo,
        //                OrderQuantity = outDetail.OrderQuantity,
        //                //ReceiptQuantity = outDetail.ReceiptQuantity,
        //                //OverInQuantity = outDetail.OverInQuantity,
        //                OrderDetailStatus = outDetail.OrderDetailStatus,
        //                Creater = "WMS",
        //                CreateDate = DateTime.Now,
        //            };
        //            _outboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty);
        //            _outboundService.OutboundOrderService.DeleteData(outDetail);
        //            #endregion
        //            #region//出库信息返回上位WMS。。。立库出库数量回传
        //            HouseoutboundPassBack houseInboundPassBack = new HouseoutboundPassBack();
        //            houseInboundPassBack.ApiType = "ShippingOrderController";
        //            houseInboundPassBack.Method = "AsrsOutboundSO";
        //            datas datas = new datas();
        //            datas.data1 data1 = new datas.data1();
        //            data1.No = outboundOrder.OrderNo;
        //            data1.OutWareHouse = task.Roadway;
        //            data1.TransactionCode = outboundOrder.TransactionCode;
        //            data1.InoutType = outboundOrder.OrderType;
        //            data1.OrderType = outboundOrder.InoutType;
        //            datas.data1.Inbound inbound = new datas.data1.Inbound();
        //            inbound.LinId = outDetail.LinId;
        //            inbound.LPN_No = task.PalletCode;
        //            inbound.MaterielCode = stockInfoDetail.MaterielCode;
        //            inbound.OrderQuantity = stockInfoDetail.OutboundQuantity;
        //            inbound.BatchNo = stockInfoDetail.BatchNo;
        //            inbound.FinishQty = stockInfoDetail.OutboundQuantity;
        //            inbound.LocationName = task.SourceAddress;
        //            datas.Value.Add(data1);
        //            data1.DetailList.Add(inbound);
        //            houseInboundPassBack.Parameters.Add(datas);
        //            Authentication authentication = new Authentication()
        //            {
        //                ApiType = "AuthenticationController",
        //                Parameters = new List<Parameter>
        //            {
        //             new Parameter { Value = "LKAdmin"},
        //             new Parameter { Value = "LKAdmin"},
        //            },
        //                Method = "Login",
        //            };
        //            var responses1 = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
        //            var Ticket = responses1.Context["Ticket"].ToString();
        //            var InvOrgId = responses1.Context["InvOrgId"].ToString();
        //            if (Ticket != null)
        //            {
        //                houseInboundPassBack.Context = new Dictionary<string, string>();
        //                houseInboundPassBack.Context.Add("Ticket", Ticket);
        //                houseInboundPassBack.Context.Add("InvOrgId", InvOrgId);
        //                var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskout, houseInboundPassBack, "立库出库数量回传WMS");
        //            }
        //            #endregion
        //            //删除库存信息
        //            _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
        //            _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
        //        }
        //        else if (outboundOrder.OrderType == 240)
        //        {
        //            //盘点出库任务完成、、、、、、、、、不能删除库存等逻辑
        //        }
        //        else
        //        {
        //            List<Dt_StockInfo> StockInfo = _stockService.StockInfoService.Repository.QueryData(x => x.BatchNo == outDetail.BatchNo);
        //            if (outboundOrder.Details.Count == 1)
        //            {
        //                Dt_OutboundOrder_Hty inboundOrder_Hty = new Dt_OutboundOrder_Hty
        //                {
        //                    OrderStatus = outboundOrder.OrderStatus,
        //                    CreateType = outboundOrder.CreateType,
        //                    //SourceId = oldOutboundOrder.SourceId,
        //                    UpperOrderNo = outboundOrder.UpperOrderNo,
        //                    OrderNo = outboundOrder.OrderNo,
        //                    OutWareHouse = outboundOrder.OutWareHouse,
        //                    TransactionCode = outboundOrder.TransactionCode,
        //                    InoutType = outboundOrder.InoutType,
        //                    OrderType = outboundOrder.OrderType,
        //                    Creater = "WMS",
        //                    CreateDate = DateTime.Now,
        //                };
        //                _outboundOrder_HtyService.AddData(inboundOrder_Hty);
        //                _outboundService.OutboundOrderService.DeleteData(outboundOrder);
        //            }
        //            Dt_OutboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_OutboundOrderDetail_Hty
        //            {
        //                OrderId = outDetail.OrderId,
        //                MaterielCode = outDetail.MaterielCode,
        //                MaterielName = outDetail.MaterielName,
        //                BatchNo = outDetail.BatchNo,
        //                OrderQuantity = outDetail.OrderQuantity,
        //                //ReceiptQuantity = outDetail.ReceiptQuantity,
        //                //OverInQuantity = outDetail.OverInQuantity,
        //                OrderDetailStatus = outDetail.OrderDetailStatus,
        //                Creater = "WMS",
        //                CreateDate = DateTime.Now,
        //            };
        //            _outboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty);
        //            _outboundService.OutboundOrderService.DeleteData(outDetail);
        //            InventoryAllocate inventoryAllocate = new InventoryAllocate();
        //            inventoryAllocate.ApiType = "InventoryAllocateController";
        //            inventoryAllocate.Method = "AsrsFinishedStockCount";
        //            Allocate allocate = new Allocate();
        //            Allocate.data1 data1 = new Allocate.data1();
        //            data1.No = outboundOrder.OrderNo;
        //            data1.InWarehouse = task.Roadway;
        //            data1.TransactionCode = outboundOrder.TransactionCode;
        //            data1.InoutType = outboundOrder.OrderType;
        //            data1.OrderType = outboundOrder.InoutType;
        //            foreach (var item in StockInfo)
        //            {
        //                Dt_StockInfoDetail detail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == item.Id);
        //                Allocate.data1.Inventory inbound = new Allocate.data1.Inventory();
        //                inbound.LinId = outDetail.LinId;
        //                inbound.LPN_No = item.PalletCode;
        //                inbound.MaterielCode = detail.MaterielCode;
        //                inbound.OrderQuantity = detail.OutboundQuantity;
        //                inbound.BatchNo = detail.BatchNo;
        //                inbound.FinishQty = detail.OutboundQuantity;
        //                inbound.LocationName = task.SourceAddress;
        //                data1.DetailList.Add(inbound);
        //            }
        //            allocate.Value.Add(data1);
        //            inventoryAllocate.Parameters.Add(allocate);
        //            Authentication authentication = new Authentication()
        //            {
        //                ApiType = "AuthenticationController",
        //                Parameters = new List<Parameter>
        //            {
        //             new Parameter { Value = "LKAdmin"},
        //             new Parameter { Value = "LKAdmin"},
        //            },
        //                Method = "Login",
        //            };
        //            var responses1 = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
        //            var Ticket = responses1.Context["Ticket"].ToString();
        //            var InvOrgId = responses1.Context["InvOrgId"].ToString();
        //            if (Ticket != null)
        //            {
        //                inventoryAllocate.Context = new Dictionary<string, string>();
        //                inventoryAllocate.Context.Add("Ticket", Ticket);
        //                inventoryAllocate.Context.Add("InvOrgId", InvOrgId);
        //                var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAllocatein, inventoryAllocate, "调拨出库数量回传WMS");
        //            }
        //            _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
        //            _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
        //        }
        //        return WebResponseContent.Instance.OK();
        //    }
        //    catch (Exception ex)
        //    {
        //        _unitOfWorkManage.RollbackTran();
        //        return WebResponseContent.Instance.Error(ex.Message);
        //    }
        //}
                        #endregion
                    }
                }
                else
                {
                    #region //判断调拨入库单据明细只有最后一条完成时删除入库单并一次返回入库明细信息
                    if (inboundOrder.Details.Count == 1)
                    {
                        List<Dt_StockInfo> StockInfo = _stockService.StockInfoService.Repository.QueryData(x => x.BatchNo == inboundOrderDetail.BatchNo);
                        Dt_InboundOrder_Hty inboundOrder_Hty = new Dt_InboundOrder_Hty
                        {
                            OrderStatus = inboundOrder.OrderStatus,
                            CreateType = inboundOrder.CreateType,
                            //SourceId = oldOutboundOrder.SourceId,
                            UpperOrderNo = inboundOrder.UpperOrderNo,
                            OrderNo = inboundOrder.OrderNo,
                            //OutWareHouse = inboundOrder.OutWareHouse,
                            TransactionCode = inboundOrder.TransactionCode,
                            InoutType = inboundOrder.InoutType,
                            OrderType = inboundOrder.OrderType,
                            Creater = "WMS",
                            CreateDate = DateTime.Now,
                        };
                        _inboundOrder_HtyService.AddData(inboundOrder_Hty);
                        _inboundService.InbounOrderService.DeleteData(inboundOrder);
                        Dt_InboundOrderDetail_Hty dt_InboundOrderDetail_HtyS = new Dt_InboundOrderDetail_Hty
                        {
                            OrderId = inboundOrderDetail.OrderId,
                            MaterielCode = inboundOrderDetail.MaterielCode,
                            MaterielName = inboundOrderDetail.MaterielName,
                            BatchNo = inboundOrderDetail.BatchNo,
                            OrderQuantity = inboundOrderDetail.OrderQuantity,
                            ReceiptQuantity = inboundOrderDetail.ReceiptQuantity,
                            OverInQuantity = inboundOrderDetail.OverInQuantity,
                            OrderDetailStatus = inboundOrderDetail.OrderDetailStatus,
                            Creater = "WMS",
                            CreateDate = DateTime.Now,
                        };
                        _inboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_HtyS);
                        _inboundService.InboundOrderDetailService.DeleteData(inboundOrderDetail);
                        #endregion
                        #region//调拨任务数量回传WMS
                        InventoryAllocate inventoryAllocate = new InventoryAllocate();
                        inventoryAllocate.ApiType = "InventoryAllocateController";
                        inventoryAllocate.Method = "AsrsFinishedStockCount";
                        Allocate allocate = new Allocate();
                        Allocate.data1 data1 = new Allocate.data1();
                        data1.No = task.OrderNo;
                        data1.InWarehouse = task.Roadway;
                        data1.TransactionCode = inboundOrder.TransactionCode;
                        data1.InoutType = inboundOrder.OrderType;
                        data1.OrderType = inboundOrder.InoutType;
                        foreach (var item in StockInfo)
                        {
                            Dt_StockInfoDetail detail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == item.Id);
                            Allocate.data1.Inventory inbound = new Allocate.data1.Inventory();
                            inbound.LinId = detail.LinId;
                            inbound.LPN_No = item.PalletCode;
                            inbound.MaterielCode = detail.MaterielCode;
                            inbound.OrderQuantity = detail.StockQuantity;
                            inbound.BatchNo = detail.BatchNo;
                            inbound.FinishQty = detail.StockQuantity;
                            inbound.LocationName = item.LocationCode;
                            data1.DetailList.Add(inbound);
                        }
                        allocate.Value.Add(data1);
                        inventoryAllocate.Parameters.Add(allocate);
                        Authentication authentication = new Authentication()
                        {
                            ApiType = "AuthenticationController",
                            Parameters = new List<Parameter>
                    {
                     new Parameter { Value = "LKAdmin"},
                     new Parameter { Value = "LKAdmin"},
                    },
                            Method = "Login",
                        };
                        var responses1 = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
                        var Ticket = responses1.Context["Ticket"].ToString();
                        var InvOrgId = responses1.Context["InvOrgId"].ToString();
                        if (Ticket != null)
                        {
                            inventoryAllocate.Context = new Dictionary<string, string>();
                            inventoryAllocate.Context.Add("Ticket", Ticket);
                            inventoryAllocate.Context.Add("InvOrgId", InvOrgId);
                            var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAllocatein, inventoryAllocate, "调拨入库数量回传WMS");
                        }
                    }
                    #endregion
                    Dt_InboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_InboundOrderDetail_Hty
                    {
                        OrderId = inboundOrderDetail.OrderId,
                        MaterielCode = inboundOrderDetail.MaterielCode,
                        MaterielName = inboundOrderDetail.MaterielName,
                        BatchNo = inboundOrderDetail.BatchNo,
                        OrderQuantity = inboundOrderDetail.OrderQuantity,
                        ReceiptQuantity = inboundOrderDetail.ReceiptQuantity,
                        OverInQuantity = inboundOrderDetail.OverInQuantity,
                        OrderDetailStatus = inboundOrderDetail.OrderDetailStatus,
                        Creater = "WMS",
                        CreateDate = DateTime.Now,
                    };
                    _inboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty);
                    _inboundService.InboundOrderDetailService.DeleteData(inboundOrderDetail);
                }
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public WebResponseContent OutboundTaskCompleted(int taskNum)
        {
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null)
                {
                    return WebResponseContent.Instance.Error($"未找到任务信息");
                }
                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                if (stockInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到库存信息");
                }
                if (locationInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到货位信息");
                }
                List<Dt_OutStockLockInfo> outStockLockInfos = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.TaskNum == taskNum);
                if (outStockLockInfos == null || outStockLockInfos.Count == 0)
                {
                    return WebResponseContent.Instance.Error($"未找到出库详情信息");
                }
                List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
                for (int i = 0; i < outStockLockInfos.Count; i++)
                {
                    Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == outStockLockInfos[i].OrderDetailId);
                    if (outboundOrderDetail != null)
                    {
                        outboundOrderDetail.OverOutQuantity = outboundOrderDetail.LockQuantity;
                        if (outboundOrderDetail.LockQuantity == outboundOrderDetail.OrderQuantity)
                        {
                            outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                        }
                        outboundOrderDetails.Add(outboundOrderDetail);
                    }
                }
                _unitOfWorkManage.BeginTran();
                _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                stockInfo.LocationCode = locationInfo.LocationCode;
                stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
                _stockService.StockInfoService.Repository.UpdateData(stockInfo);
                int beforeStatus = locationInfo.LocationStatus;
                locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Outbound.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
                _unitOfWorkManage.CommitTran();
                Dt_StockInfoDetail stockInfoDetail = _stockRepository.StockInfoDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(x => x.StockId == stockInfo.Id).First();
                Dt_OutboundOrderDetail outDetail = _outboundService.OutboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>().Where(x => x.LPNNo == stockInfo.PalletCode).First();
                Dt_OutboundOrder outboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == outDetail.OrderId).Includes(x => x.Details).First();
                //判断单据类型是出库还是调拨出库。。。出库
                if (outboundOrder.OrderType == 1)
                {
                    #region //判断出库单据明细只有最后一条完成时删除出库单
                    if (outboundOrder.Details.Count == 1)
                    {
                        Dt_OutboundOrder_Hty inboundOrder_Hty = new Dt_OutboundOrder_Hty
                        {
                            OrderStatus = outboundOrder.OrderStatus,
                            CreateType = outboundOrder.CreateType,
                            //SourceId = oldOutboundOrder.SourceId,
                            UpperOrderNo = outboundOrder.UpperOrderNo,
                            OrderNo = outboundOrder.OrderNo,
                            OutWareHouse = outboundOrder.OutWareHouse,
                            TransactionCode = outboundOrder.TransactionCode,
                            InoutType = outboundOrder.InoutType,
                            OrderType = outboundOrder.OrderType,
                            Creater = "WMS",
                            CreateDate = DateTime.Now,
                        };
                        _outboundOrder_HtyService.AddData(inboundOrder_Hty);
                        _outboundService.OutboundOrderService.DeleteData(outboundOrder);
                    }
                    Dt_OutboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_OutboundOrderDetail_Hty
                    {
                        OrderId = outDetail.OrderId,
                        MaterielCode = outDetail.MaterielCode,
                        MaterielName = outDetail.MaterielName,
                        BatchNo = outDetail.BatchNo,
                        OrderQuantity = outDetail.OrderQuantity,
                        //ReceiptQuantity = outDetail.ReceiptQuantity,
                        //OverInQuantity = outDetail.OverInQuantity,
                        OrderDetailStatus = outDetail.OrderDetailStatus,
                        Creater = "WMS",
                        CreateDate = DateTime.Now,
                    };
                    _outboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty);
                    _outboundService.OutboundOrderService.DeleteData(outDetail);
                    #endregion
                    #region//出库信息返回上位WMS。。。立库出库数量回传
                    HouseoutboundPassBack houseInboundPassBack = new HouseoutboundPassBack();
                    houseInboundPassBack.ApiType = "ShippingOrderController";
                    houseInboundPassBack.Method = "AsrsOutboundSO";
                    datas datas = new datas();
                    datas.data1 data1 = new datas.data1();
                    data1.No = outboundOrder.OrderNo;
                    data1.OutWareHouse = task.Roadway;
                    data1.TransactionCode = outboundOrder.TransactionCode;
                    data1.InoutType = outboundOrder.OrderType;
                    data1.OrderType = outboundOrder.InoutType;
                    datas.data1.Inbound inbound = new datas.data1.Inbound();
                    inbound.LinId = outDetail.LinId;
                    inbound.LPN_No = task.PalletCode;
                    inbound.MaterielCode = stockInfoDetail.MaterielCode;
                    inbound.OrderQuantity = stockInfoDetail.OutboundQuantity;
                    inbound.BatchNo = stockInfoDetail.BatchNo;
                    inbound.FinishQty = stockInfoDetail.OutboundQuantity;
                    inbound.LocationName = task.SourceAddress;
                    datas.Value.Add(data1);
                    data1.DetailList.Add(inbound);
                    houseInboundPassBack.Parameters.Add(datas);
                    Authentication authentication = new Authentication()
                    {
                        ApiType = "AuthenticationController",
                        Parameters = new List<Parameter>
                    {
                     new Parameter { Value = "LKAdmin"},
                     new Parameter { Value = "LKAdmin"},
                    },
                        Method = "Login",
                    };
                    var responses1 = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
                    var Ticket = responses1.Context["Ticket"].ToString();
                    var InvOrgId = responses1.Context["InvOrgId"].ToString();
                    if (Ticket != null)
                    {
                        houseInboundPassBack.Context = new Dictionary<string, string>();
                        houseInboundPassBack.Context.Add("Ticket", Ticket);
                        houseInboundPassBack.Context.Add("InvOrgId", InvOrgId);
                        var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskout, houseInboundPassBack, "立库出库数量回传WMS");
                    }
                    #endregion
                    //删除库存信息
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                    _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                }
                else if (outboundOrder.OrderType == 240)
                {
                    //盘点出库任务完成、、、、、、、、、不能删除库存等逻辑
                }
                else
                {
                    List<Dt_StockInfo> StockInfo = _stockService.StockInfoService.Repository.QueryData(x => x.BatchNo == outDetail.BatchNo);
                    if (outboundOrder.Details.Count == 1)
                    {
                        Dt_OutboundOrder_Hty inboundOrder_Hty = new Dt_OutboundOrder_Hty
                        {
                            OrderStatus = outboundOrder.OrderStatus,
                            CreateType = outboundOrder.CreateType,
                            //SourceId = oldOutboundOrder.SourceId,
                            UpperOrderNo = outboundOrder.UpperOrderNo,
                            OrderNo = outboundOrder.OrderNo,
                            OutWareHouse = outboundOrder.OutWareHouse,
                            TransactionCode = outboundOrder.TransactionCode,
                            InoutType = outboundOrder.InoutType,
                            OrderType = outboundOrder.OrderType,
                            Creater = "WMS",
                            CreateDate = DateTime.Now,
                        };
                        _outboundOrder_HtyService.AddData(inboundOrder_Hty);
                        _outboundService.OutboundOrderService.DeleteData(outboundOrder);
                    }
                    Dt_OutboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_OutboundOrderDetail_Hty
                    {
                        OrderId = outDetail.OrderId,
                        MaterielCode = outDetail.MaterielCode,
                        MaterielName = outDetail.MaterielName,
                        BatchNo = outDetail.BatchNo,
                        OrderQuantity = outDetail.OrderQuantity,
                        //ReceiptQuantity = outDetail.ReceiptQuantity,
                        //OverInQuantity = outDetail.OverInQuantity,
                        OrderDetailStatus = outDetail.OrderDetailStatus,
                        Creater = "WMS",
                        CreateDate = DateTime.Now,
                    };
                    _outboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty);
                    _outboundService.OutboundOrderService.DeleteData(outDetail);
                    InventoryAllocate inventoryAllocate = new InventoryAllocate();
                    inventoryAllocate.ApiType = "InventoryAllocateController";
                    inventoryAllocate.Method = "AsrsFinishedStockCount";
                    Allocate allocate = new Allocate();
                    Allocate.data1 data1 = new Allocate.data1();
                    data1.No = outboundOrder.OrderNo;
                    data1.InWarehouse = task.Roadway;
                    data1.TransactionCode = outboundOrder.TransactionCode;
                    data1.InoutType = outboundOrder.OrderType;
                    data1.OrderType = outboundOrder.InoutType;
                    foreach (var item in StockInfo)
                    {
                        Dt_StockInfoDetail detail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == item.Id);
                        Allocate.data1.Inventory inbound = new Allocate.data1.Inventory();
                        inbound.LinId = outDetail.LinId;
                        inbound.LPN_No = item.PalletCode;
                        inbound.MaterielCode = detail.MaterielCode;
                        inbound.OrderQuantity = detail.OutboundQuantity;
                        inbound.BatchNo = detail.BatchNo;
                        inbound.FinishQty = detail.OutboundQuantity;
                        inbound.LocationName = task.SourceAddress;
                        data1.DetailList.Add(inbound);
                    }
                    allocate.Value.Add(data1);
                    inventoryAllocate.Parameters.Add(allocate);
                    Authentication authentication = new Authentication()
                    {
                        ApiType = "AuthenticationController",
                        Parameters = new List<Parameter>
                    {
                     new Parameter { Value = "LKAdmin"},
                     new Parameter { Value = "LKAdmin"},
                    },
                        Method = "Login",
                    };
                    var responses1 = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAUT, authentication, "登录WMS账号");
                    var Ticket = responses1.Context["Ticket"].ToString();
                    var InvOrgId = responses1.Context["InvOrgId"].ToString();
                    if (Ticket != null)
                    {
                        inventoryAllocate.Context = new Dictionary<string, string>();
                        inventoryAllocate.Context.Add("Ticket", Ticket);
                        inventoryAllocate.Context.Add("InvOrgId", InvOrgId);
                        var responses = HttpHelper.Post<WebResponseContent>(ReceiveWMSTaskAllocatein, inventoryAllocate, "调拨出库数量回传WMS");
                    }
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                    _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                }
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs
@@ -75,8 +75,8 @@
            ModifyDate = DateTime.Now,
            Modifier = task.Modifier,
            Remark = task.Remark,
            PLCTo=task.PLCTo,
            PalletCodequantity=task.PalletCodequantity,
            //PLCTo=task.PLCTo,
            //PalletCodequantity=task.PalletCodequantity,
            MaterialType = task.MaterialType
        };
        BaseDal.AddData(task_Hty);
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/PalletTypeInfoController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core.BaseController;
using WIDESEA_IBasicService;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.Basic
{
    [Route("api/palletTypeInfo")]
    [ApiController]
    public class PalletTypeInfoController : ApiBaseController<IPalletTypeInfoService, Dt_PalletTypeInfo>
    {
        public PalletTypeInfoController(IPalletTypeInfoService service) : base(service)
        {
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -40,9 +40,9 @@
        /// <param name="taskNum"></param>
        /// <returns></returns>
        [HttpPost, Route("InboundRequest"),AllowAnonymous]
        public WebResponseContent InboundRequest([FromBody] SaveModel saveModel)
        public WebResponseContent InboundRequest(string stationCode, string roadwayNo, string palletCode)
        {
            return Service.InboundRequest(saveModel);
            return Service.InboundRequest(stationCode, roadwayNo, palletCode);
        }
        /// <summary>
        /// åˆ¤æ–­å··é“内移库
@@ -117,6 +117,10 @@
            return Service.InventoryIn(name,qty);
        }
        
        [HttpPost,Route("UpdateTaskStatus") ,AllowAnonymous]
        public WebResponseContent UpdateTaskStatus(int tasknum, int tasktype)
        {
            return Service.UpdateTaskStatus(tasknum, tasktype);
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs
@@ -9,6 +9,7 @@
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Outbound;
using WIDESEA_DTO.System;
using WIDESEA_DTO.Task;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Filter
@@ -23,6 +24,7 @@
            CreateMap<Sys_Menu, MenuDTO>();
            CreateMap<InboundOrderDetailAddDTO, Dt_InboundOrderDetail>().ForMember(x => x.OrderDetailStatus, b => b.MapFrom(b => 0));
            CreateMap<InboundOrderAddDTO, Dt_InboundOrder>();
            CreateMap<Dt_Task, WMSTaskDTO>();
            CreateMap<MatSerialNumberDTO, Dt_StockInfoDetail>().ForMember(x => x.StockQuantity, b => b.MapFrom(b => b.MaterielQuantity));
            CreateMap<Dt_StockInfoDetail, Dt_StockQuantityChangeRecord>().ForMember(x => x.SerilNumber, b => b.MapFrom(b => b.SerialNumber)).ForMember(x => x.StockDetailId, b => b.MapFrom(b => b.Id)); 
            CreateMap<OutboundOrderDetailAddDTO, Dt_OutboundOrderDetail>().ForMember(x => x.OrderDetailStatus, b => b.MapFrom(b => 0));
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/AOPLogEx_1739464414.log
ÎļþÒÑɾ³ý
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/AOPLogEx_1739527794.log
ÎļþÒÑɾ³ý
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/AOPLogEx_1739531468.log
ÎļþÒÑɾ³ý
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/AOPLog_1739464413.log
ÎļþÒÑɾ³ý
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/AOPLog_1741358219.log
ÎļþÒÑɾ³ý
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Log/È«¾ÖÒì³£´íÎóÈÕÖ¾_1741356738.log
ÎļþÒÑɾ³ý
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs
@@ -34,7 +34,7 @@
}); ;
builder.ConfigureApplication();
App.ExpDateTime = DateTime.Parse("2025-05-31 00:00:00");
//App.ExpDateTime = DateTime.Parse("2025-05-31 00:00:00");
// 2、配置服务
builder.Services.AddSingleton(new AppSettings(builder.Configuration));//注册
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -6,7 +6,7 @@
            "Microsoft.AspNetCore": "Warning"
        }
    },
    "dics": "inOrderType,outOrderType,inboundState,createType,enableEnum,enableStatusEnum,locationStatusEnum,locationTypeEnum,taskTypeEnum,taskStatusEnum,outboundStatusEnum,orderDetailStatusEnum,stockStatusEmun,stockChangeType,outStockStatus,InventoryMaterialType,InventoryMaterialStatus",
    "dics": "inOrderType,inoutType,outOrderType,inboundState,createType,enableEnum,enableStatusEnum,locationStatusEnum,locationTypeEnum,taskTypeEnum,taskStatusEnum,outboundStatusEnum,orderDetailStatusEnum,stockStatusEmun,stockChangeType,outStockStatus,InventoryMaterialType,InventoryMaterialStatus",
    "AllowedHosts": "*",
    "ReceiveTask": "http://192.168.110.172:9291/api/Task/ReceiveTask", //下发出库任务至WCS
¼ª°²ÏîÄ¿×ÊÁÏ.zip
Binary files differ