huangxiaoqiang
15 小时以前 eaa7c0d999c6dd7901bf4f0de79b861eae38e978
代码提交
已添加9个文件
已修改29个文件
已复制1个文件
已重命名1个文件
已删除11个文件
3307 ■■■■■ 文件已修改
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/CodeChunks.db 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/CodeChunks.db-shm 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/CodeChunks.db-wal 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/SemanticSymbols.db 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/SemanticSymbols.db-shm 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/SemanticSymbols.db-wal 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json 330 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/LogLibrary/Log/LogFactory.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/LogLibrary/LogLibrary.csproj 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/Dt_StationManagerService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/AGVReceiveDTO.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/AgvRespone.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/SendTask.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_StationManager.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/RGV/CommonRGV.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerStationCrane.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Enum/StackerCraneStatus.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server.sln 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Partial/AGVTaskService.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs 700 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WIDESEAWCS_TaskInfoService.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs 522 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineDBName.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/StationHandler/EmptyTrayStationHandler.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/StationHandler/ExceptionPortStationHandler.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/StationHandler/IStationHandler.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/StationHandler/StationHandlerFactory.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/MemoryLockManager.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs 268 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/DeleteLog/CommonDeleteLogJob.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ElevatorJob/ElevatorDBName.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskCommand.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/Dt_BillGroupStock.jsx 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/widesea_wms/basicinfo/Dt_LocationInfo.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.441.19478/CodeChunks.db 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.441.19478/CodeChunks.db-shm 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.441.19478/CodeChunks.db-wal 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.441.19478/SemanticSymbols.db 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.441.19478/SemanticSymbols.db-wal 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/CodeChunks.db
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/CodeChunks.db-shm
copy from "\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.441.19478/SemanticSymbols.db-shm" copy to "\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/CodeChunks.db-shm" Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/CodeChunks.db-wal
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/SemanticSymbols.db
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/SemanticSymbols.db-shm
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.13.441.19478/SemanticSymbols.db-wal
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json
@@ -3,72 +3,40 @@
  "WorkspaceRootPath": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\deletelog\\commondeletelogjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\deletelog\\commondeletelogjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\agv\\agvcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\agv\\agvcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\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:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\agvjob\\agvsignal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\agvjob\\agvsignal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\taskinfo\\dt_task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\taskinfo\\dt_task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\elevatorjob\\elevatordbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\elevatorjob\\elevatordbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\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:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\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:{59D26679-7299-4251-A58E-3AC3C6FA717E}|WIDESEAWCS_SignalR\\WIDESEAWCS_SignalR.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_signalr\\hub\\simplehub.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{59D26679-7299-4251-A58E-3AC3C6FA717E}|WIDESEAWCS_SignalR\\WIDESEAWCS_SignalR.csproj|solutionrelative:wideseawcs_signalr\\hub\\simplehub.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\common\\commonstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\common\\commonstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{59D26679-7299-4251-A58E-3AC3C6FA717E}|WIDESEAWCS_SignalR\\WIDESEAWCS_SignalR.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_signalr\\service\\inoticeservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{59D26679-7299-4251-A58E-3AC3C6FA717E}|WIDESEAWCS_SignalR\\WIDESEAWCS_SignalR.csproj|solutionrelative:wideseawcs_signalr\\service\\inoticeservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\partial\\agvtaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\partial\\agvtaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{59D26679-7299-4251-A58E-3AC3C6FA717E}|WIDESEAWCS_SignalR\\WIDESEAWCS_SignalR.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_signalr\\hub\\isimplehub.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{59D26679-7299-4251-A58E-3AC3C6FA717E}|WIDESEAWCS_SignalR\\WIDESEAWCS_SignalR.csproj|solutionrelative:wideseawcs_signalr\\hub\\isimplehub.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_systemrepository\\sys_menurepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|solutionrelative:wideseawcs_systemrepository\\sys_menurepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{59D26679-7299-4251-A58E-3AC3C6FA717E}|WIDESEAWCS_SignalR\\WIDESEAWCS_SignalR.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_signalr\\globalusing.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{59D26679-7299-4251-A58E-3AC3C6FA717E}|WIDESEAWCS_SignalR\\WIDESEAWCS_SignalR.csproj|solutionrelative:wideseawcs_signalr\\globalusing.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\quartzextensions\\quartzjobhostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartzextensions\\quartzjobhostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\quartzextensions\\jobsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartzextensions\\jobsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_core\\extensions\\autofacmoduleregister.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\extensions\\autofacmoduleregister.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_core\\extensions\\sqlsugarsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\extensions\\sqlsugarsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\models\\dt_deviceinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_deviceinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\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}"
    }
  ],
  "DocumentGroupContainers": [
@@ -78,69 +46,111 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 1,
          "SelectedChildIndex": 5,
          "Children": [
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "Dt_Task.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAB0AAAAlAAAAAAAAAA==",
              "Title": "ElevatorDBName.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\ElevatorDBName.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ElevatorJob\\ElevatorDBName.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\ElevatorDBName.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ElevatorJob\\ElevatorDBName.cs",
              "ViewState": "AgIAABUAAAAAAAAAAAAywDMAAAAbAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-24T01:54:03.606Z",
              "WhenOpened": "2025-10-08T14:21:39.829Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "ConveyorLineDBName.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
              "ViewState": "AgIAAE8AAAAAAAAAAADwv1kAAAAQAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-10-08T14:11:12.19Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "CommonElevatorJob.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvx8AAAAeAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-10-08T13:53:47.304Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "Title": "TaskController.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAABJAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-10-08T13:27:06.033Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "AGVSignal.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGVJob\\AGVSignal.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\AGVJob\\AGVSignal.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGVJob\\AGVSignal.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\AGVJob\\AGVSignal.cs",
              "ViewState": "AgIAABEAAAAAAAAAAAAAABUAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-10-08T12:48:40.39Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "CommonDeleteLogJob.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\DeleteLog\\CommonDeleteLogJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\DeleteLog\\CommonDeleteLogJob.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\DeleteLog\\CommonDeleteLogJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\DeleteLog\\CommonDeleteLogJob.cs",
              "ViewState": "AgIAABYAAAAAAAAAAAAcwEUAAAAZAAAAAAAAAA==",
              "Title": "AGVController.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\AGV\\AGVController.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\AGV\\AGVController.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\AGV\\AGVController.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\AGV\\AGVController.cs",
              "ViewState": "AgIAABAAAAAAAAAAAAAuwCAAAABbAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-24T01:29:52.9Z",
              "WhenOpened": "2025-10-08T12:45:04.877Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 9,
              "Title": "CustomProfile.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\CustomProfile.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Filter\\CustomProfile.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\CustomProfile.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Filter\\CustomProfile.cs",
              "ViewState": "AgIAAAkAAAAAAAAAAADwvxYAAAArAAAAAAAAAA==",
              "DocumentIndex": 7,
              "Title": "AGVTaskService.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
              "ViewState": "AgIAACUAAAAAAAAAAAAcwDQAAAA3AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T09:20:35.273Z"
              "WhenOpened": "2025-10-08T08:13:55.933Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 10,
              "Title": "Sys_MenuRepository.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
              "RelativeToolTip": "WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
              "ViewState": "AgIAAB0AAAAAAAAAAAAAAB4AAABFAAAAAAAAAA==",
              "DocumentIndex": 8,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAABwDAAAAAAAAAAAAwCgDAAAhAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T09:17:11.269Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "SimpleHub.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SignalR\\Hub\\SimpleHub.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_SignalR\\Hub\\SimpleHub.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SignalR\\Hub\\SimpleHub.cs",
              "RelativeToolTip": "WIDESEAWCS_SignalR\\Hub\\SimpleHub.cs",
              "ViewState": "AgIAAA0AAAAAAAAAAAAxwBwAAAATAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T09:15:05.652Z"
              "WhenOpened": "2025-09-25T03:21:17.498Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
@@ -150,144 +160,10 @@
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ViewState": "AgIAAJoBAAAAAAAAAAAIwE0BAAARAAAAAAAAAA==",
              "ViewState": "AgIAANwAAAAAAAAAAAAIwP0AAABmAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T08:10:30.228Z",
              "WhenOpened": "2025-10-08T02:55:34.719Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "Title": "INoticeService.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SignalR\\Service\\INoticeService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_SignalR\\Service\\INoticeService.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SignalR\\Service\\INoticeService.cs",
              "RelativeToolTip": "WIDESEAWCS_SignalR\\Service\\INoticeService.cs",
              "ViewState": "AgIAABsAAAAAAAAAAAAiwCwAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T07:42:56.362Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "CommonConveyorLineJob.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ViewState": "AgIAAB4AAAAAAAAAAAAAAC0AAABPAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T07:04:33.408Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "ISimpleHub.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SignalR\\Hub\\ISimpleHub.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_SignalR\\Hub\\ISimpleHub.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SignalR\\Hub\\ISimpleHub.cs",
              "RelativeToolTip": "WIDESEAWCS_SignalR\\Hub\\ISimpleHub.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAABsAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T09:25:19.161Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 14,
              "Title": "AutofacModuleRegister.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Extensions\\AutofacModuleRegister.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Extensions\\AutofacModuleRegister.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Extensions\\AutofacModuleRegister.cs",
              "RelativeToolTip": "WIDESEAWCS_Core\\Extensions\\AutofacModuleRegister.cs",
              "ViewState": "AgIAAAwAAAAAAAAAAAAAAEQAAAAmAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T07:40:03.34Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "Program.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Program.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Program.cs",
              "ViewState": "AgIAAA8AAAAAAAAAAAAAACoAAAAlAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T07:37:22.784Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "Title": "CommonStackerCrane.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
              "ViewState": "AgIAANsAAAAAAAAAAAAqwPUAAAAMAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T09:27:50.227Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "Title": "QuartzJobHostedService.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
              "ViewState": "AgIAACYAAAAAAAAAAAAowD0AAAAQAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T08:04:20.937Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 11,
              "Title": "GlobalUsing.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SignalR\\GlobalUsing.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_SignalR\\GlobalUsing.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SignalR\\GlobalUsing.cs",
              "RelativeToolTip": "WIDESEAWCS_SignalR\\GlobalUsing.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAEAAAAQAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T09:02:55.551Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 13,
              "Title": "JobSetup.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAuwCYAAAA5AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T07:07:37.223Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 15,
              "Title": "SqlsugarSetup.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Extensions\\SqlsugarSetup.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Extensions\\SqlsugarSetup.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Extensions\\SqlsugarSetup.cs",
              "RelativeToolTip": "WIDESEAWCS_Core\\Extensions\\SqlsugarSetup.cs",
              "ViewState": "AgIAABcAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T07:34:36.863Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 16,
              "Title": "Dt_DeviceInfo.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
              "ViewState": "AgIAAGQAAAAAAAAAAAAUwHYAAAAnAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-23T07:03:49.846Z"
            }
          ]
        }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
@@ -3,8 +3,40 @@
  "WorkspaceRootPath": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\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:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\agv\\agvcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\agv\\agvcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\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:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\elevatorjob\\elevatordbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\elevatorjob\\elevatordbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\agvjob\\agvsignal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\agvjob\\agvsignal.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\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:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\partial\\agvtaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\partial\\agvtaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\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}"
    }
  ],
  "DocumentGroupContainers": [
@@ -14,19 +46,123 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 0,
          "SelectedChildIndex": 4,
          "Children": [
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "CommonConveyorLineJob.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ViewState": "AgIAAD4CAAAAAAAAAAAUwAAAAAAAAAAAAAAAAA==",
              "DocumentIndex": 3,
              "Title": "ElevatorDBName.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\ElevatorDBName.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ElevatorJob\\ElevatorDBName.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\ElevatorDBName.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ElevatorJob\\ElevatorDBName.cs",
              "ViewState": "AgIAADIAAAAAAAAAAAAswEwAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-24T05:55:47.05Z",
              "WhenOpened": "2025-10-08T14:21:39.829Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "Title": "CommonElevatorJob.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvx8AAAAeAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-10-08T13:53:47.304Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "TaskController.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAABJAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-10-08T13:27:06.033Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "AGVSignal.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGVJob\\AGVSignal.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\AGVJob\\AGVSignal.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\AGVJob\\AGVSignal.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\AGVJob\\AGVSignal.cs",
              "ViewState": "AgIAABEAAAAAAAAAAAAAABUAAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-10-08T12:48:40.39Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "AGVController.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\AGV\\AGVController.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\AGV\\AGVController.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\AGV\\AGVController.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\AGV\\AGVController.cs",
              "ViewState": "AgIAABsAAAAAAAAAAADwvzkAAAA2AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-10-08T12:45:04.877Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "Title": "AGVTaskService.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\Partial\\AGVTaskService.cs",
              "ViewState": "AgIAACUAAAAAAAAAAAAcwDQAAAA3AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-10-08T08:13:55.933Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAABwDAAAAAAAAAAAAwCgDAAAhAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-25T03:21:17.498Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "CommonStackerCraneJob.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ViewState": "AgIAANwAAAAAAAAAAAAIwP0AAABhAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-10-08T02:55:34.719Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "ConveyorLineDBName.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineDBName.cs",
              "ViewState": "AgIAAE8AAAAAAAAAAADwv1kAAAAQAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-10-08T14:11:12.19Z",
              "EditorCaption": ""
            }
          ]
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/LogLibrary/Log/LogFactory.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
using HslCommunication;
using System.Text;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.LogHelper;
namespace LogLibrary.Log
{
    public class LogFactory
    {
        public void WriteDebug(string fileName, string msg)
        {
            if (AppSettings.app(new string[] { "LogDeubgEnable" }).ObjToBool())
            {
                StringBuilder builder = new StringBuilder(msg);
                builder.Append(Environment.NewLine);
                builder.Append(Environment.NewLine);
                QuartzLogger.WriteLogToFile($"Debug_{fileName}", builder.ToString());
            }
        }
        public static void WriteInfo(string fileName, string msg)
        {
            StringBuilder builder = new StringBuilder(msg);
            builder.Append(Environment.NewLine);
            builder.Append(Environment.NewLine);
            QuartzLogger.WriteLogToFile($"Info_{fileName}", builder.ToString());
        }
        public static void WriteError(string fileName, string msg)
        {
            StringBuilder builder = new StringBuilder(msg);
            builder.Append(Environment.NewLine);
            builder.Append(Environment.NewLine);
            QuartzLogger.WriteLogToFile($"Error_{fileName}", builder.ToString());
        }
        public static void WriteError(string fileName, string msg, Exception ex)
        {
            StringBuilder builder = new StringBuilder(msg);
            builder.Append(Environment.NewLine);
            builder.Append(StringResources.Language.ExceptionMessage);
            builder.Append(ex.Message);
            builder.Append(Environment.NewLine);
            builder.Append(StringResources.Language.ExceptionSource);
            builder.Append(ex.Source);
            builder.Append(Environment.NewLine);
            builder.Append(StringResources.Language.ExceptionStackTrace);
            builder.Append(ex.StackTrace);
            builder.Append(Environment.NewLine);
            builder.Append(StringResources.Language.ExceptionType);
            builder.Append(ex.GetType().ToString());
            builder.Append(Environment.NewLine);
            builder.Append(StringResources.Language.ExceptionTargetSite);
            builder.Append(ex.TargetSite?.ToString());
            builder.Append(Environment.NewLine);
            builder.Append(Environment.NewLine);
            QuartzLogger.WriteLogToFile($"Error_{fileName}", builder.ToString());
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/LogLibrary/LogLibrary.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\WIDESEAWCS_Core\WIDESEAWCS_Core.csproj" />
    <ProjectReference Include="..\WIDESEAWCS_QuartzJob\WIDESEAWCS_QuartzJob.csproj" />
  </ItemGroup>
</Project>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/Dt_StationManagerService.cs
@@ -53,7 +53,7 @@
        public List<Dt_StationManager> GetAllStationByDeviceCode(string DeviceCode)
        {
            return BaseDal.QueryData(x => x.stationPLC == DeviceCode && x.stationStatus == "1").ToList();
            return BaseDal.QueryData(x => x.stationDeviceCode == DeviceCode && x.stationStatus == "1").ToList();
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs
@@ -15,7 +15,7 @@
        public const string WCSIP_BASE = "WCSIPAddress";
        public const string MOMIP_BASE = "MOMIP_BASE";
        public const string AGVIP_BASE = "AGVIPBASE";
        /// <summary>
        /// è¯·æ±‚任务
@@ -39,52 +39,10 @@
        public const string CompleteTask = "CompleteTask";
        /// <summary>
        /// è¯·æ±‚空托盘任务
        /// AGV任务下发
        /// </summary>
        public const string RequestTrayInTask = "RequestTrayInTask";
        public const string SendAGVTask = "SendAGVTask";
        /// <summary>
        /// ç©ºæ‰˜ç›˜å®žç›˜å‡ºåº“任务
        /// </summary>
        public const string RequestTrayOutTask = "RequestTrayOutTask";
        public const string RequestInTask = "RequestInTask";
        public const string RequestFlow = "RequestFlow";
        /// <summary>
        /// æ•´ç›˜ç”µèŠ¯èŽ·å–
        /// </summary>
        public const string TrayCellsStatus = "TrayCellsStatus";
        /// <summary>
        /// å¸¸æ¸©è¡¥ç©ºæ‰˜ç›˜è‡³åˆ†å®¹
        /// </summary>
        public const string GetFROutTrayToCW = "GetFROutTrayToCW";
        /// <summary>
        /// å¸¸æ¸©3 å‡ºåº“至包装
        /// </summary>
        public const string RequestOutTaskToBZ = "RequestOutTaskToBZ";
        /// <summary>
        /// é™ç½®NG入库
        /// </summary>
        public const string RequestInBoundTaskNG = "RequestInBoundTaskNG";
        /// <summary>
        /// é™ç½®NG入库站台
        /// </summary>
        public const string JZNGInBoundStation = "JZNGInBoundStation";
        /// <summary>
        /// åˆ†å®¹ç©ºæ¡†å…¥åº“改为直接出库
        /// </summary>
        public const string SetEmptyOutbyInToOutAsync = "SetEmptyOutbyInToOutAsync";
        /// <summary>
        /// åˆ†å®¹ç©ºæ¡†å‡ºåº“改为直接出库
        /// </summary>
        public const string SetEmptyOutbyInToOutOneAsync = "SetEmptyOutbyInToOutOneAsync";
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
@@ -15,41 +15,71 @@
        [Description("新建入库任务")]
        InNew = 200,
        ///// <summary>
        ///// AGV入库执行中
        ///// </summary>
        //[Description("AGV入库执行中")]
        //AGV_InExecuting = 210,
        /// <summary>
        /// AGV入库执行中
        /// </summary>
        [Description("AGV入库执行中")]
        AGV_InExecuting = 210,
        ///// <summary>
        ///// AGV入库完成
        ///// </summary>
        //[Description("AGV搬运完成")]
        //AGV_InFinish = 215,
        /// <summary>
        /// AGV入库完成
        /// </summary>
        [Description("AGV搬运完成")]
        AGV_InFinish = 215,
        /// <summary>
        /// AGV等待取货
        /// </summary>
        [Description("提升机等待AGV放货")]
        Elevator_AGVWaitPut = 220,
        /// <summary>
        /// æå‡æœºå…¥åº“执行中
        /// </summary>
        [Description("提升机入库执行中")]
        Elevator_InExecuting = 225,
        /// <summary>
        /// æå‡æœºå…¥åº“完成
        /// </summary>
        [Description("提升机入库完成")]
        Elevator_InFinish = 230,
        /// <summary>
        /// AGV等待取货
        /// </summary>
        [Description("提升机等待AGV取货")]
        Elevator_AGVWaitPickUp = 235,
        /// <summary>
        /// AGV等待取货
        /// </summary>
        [Description("输送线等待AGV取货")]
        Line_AGVWaitPickUp = 240,
        /// <summary>
        /// è¾“送线入库执行中
        /// </summary>
        [Description("输送线入库执行中")]
        Line_InExecuting = 220,
        Line_InExecuting = 240,
        /// <summary>
        /// è¾“送线入库完成
        /// </summary>
        [Description("输送线输送完成")]
        Line_InFinish = 225,
        [Description("输送线入库完成")]
        Line_InFinish = 245,
        /// <summary>
        /// å †åž›æœºå…¥åº“执行中
        /// </summary>
        [Description("堆垛机入库执行中")]
        SC_InExecuting = 230,
        SC_InExecuting = 250,
        /// <summary>
        /// å †åž›æœºå…¥åº“完成
        /// </summary>
        [Description("堆垛机入库完成")]
        SC_InFinish = 235,
        SC_InFinish = 255,
        /// <summary>
        /// å…¥åº“任务完成
@@ -105,20 +135,44 @@
        /// <summary>
        /// è¾“送线出库完成
        /// </summary>
        [Description("输送线输送完成")]
        [Description("输送线出库完成")]
        Line_OutFinish = 125,
        ///// <summary>
        ///// AGV出库执行中
        ///// </summary>
        //[Description("AGV出库执行中")]
        //AGV_OutExecuting = 130,
        /// <summary>
        /// è¾“送线等待AGV取货
        /// </summary>
        [Description("输送线等待AGV取货")]
        Line_AGVWaitPickUp = 130,
        ///// <summary>
        ///// AGV出库完成
        ///// </summary>
        //[Description("AGV搬运完成")]
        //AGV_OutFinish = 135,
        /// <summary>
        /// AGV出库执行中
        /// </summary>
        [Description("AGV出库执行中")]
        AGV_OutExecuting = 135,
        /// <summary>
        /// AGV出库完成
        /// </summary>
        [Description("AGV搬运完成")]
        AGV_OutFinish = 140,
        /// <summary>
        /// æå‡æœºæ‰§è¡Œä¸­
        /// </summary>
        [Description("提升机执行中")]
        Elevator_OutExecuting = 145,
        /// <summary>
        /// æå‡æœºå®Œæˆ
        /// </summary>
        [Description("提升机出库完成")]
        Elevator_OutFinish = 150,
        /// <summary>
        /// AGV等待取货
        /// </summary>
        [Description("提升机等待AGV取货")]
        Elevator_AGVWaitPickUp = 155,
        /// <summary>
        /// å‡ºåº“任务完成
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/AGVReceiveDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_DTO.AGV
{
    public class AGVReceiveDTO
    {
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public int TaskNum { get; set; }
        /// <summary>
        /// çŠ¶æ€ï¼š PutFinish放货完成、PickUpFinish取货完成、RequestPickUp请求取货、RequestPut请求放货
        /// </summary>
        public string Status { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/AgvRespone.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_DTO.AGV
{
    public class AgvRespone
    {
        public int code { get; set; }
        public string data { get; set; }
        public string desc { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/SendTask.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_DTO.AGV
{
    public class SendTask
    {
        /// <summary>
        /// ä»»åŠ¡æ¨¡æ¿
        /// </summary>
        public string modelProcessCode { get; set; }
        /// <summary>
        /// ä¼˜å…ˆçº§
        /// </summary>
        public int priority { get; set; }
        /// <summary>
        /// æ¥æºç³»ç»Ÿ
        /// </summary>
        public string fromSystem { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public string orderId { get; set; }
        /// <summary>
        /// è®¢å•明细
        /// </summary>
        public taskOrderDetail orderDetail { get; set; }
    }
    public class taskOrderDetail
    {
        public string subOrderId { get; set; }
        public string taskPath { get; set; }
        public string shelfNumber { get; set; }
        public string assignRobotIds { get; set; }
        public string releaseRobot { get; set; }
        public string deviceNum { get; set; }
        public string loadType { get; set; }
        public string robotType { get; set; }
        public string extraInfo { get; set; }
        public string shelfModel { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -58,51 +58,6 @@
        WebResponseContent ReceiveWMSTask([NotNull] List<WMSTaskDTO> taskDTOs);
        /// <summary>
        /// æŽ¥æ”¶WMS任务信息
        /// </summary>
        /// <param name="taskDTOs">WMS任务对象集合</param>
        /// <returns>返回处理结果</returns>
        WebResponseContent ReceiveByWMSTask([NotNull] WMSTaskDTO taskDTOs);
        /// <summary>
        /// æŽ¥æ”¶WMS任务信息
        /// </summary>
        /// <param name="taskDTOs">WMS任务对象集合</param>
        /// <returns>返回处理结果</returns>
        WebResponseContent ReceiveByWMSGWTask([NotNull] WMSTaskDTO taskDTO);
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å·ã€èµ·å§‹åœ°å€å‘WMS请求任务
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <param name="sourceAddress">起始地址</param>
        /// <returns></returns>
        Task<WebResponseContent> RequestWMSTask(string palletCode, string sourceAddress);
        /// <summary>
        /// è¯·æ±‚出库至包装
        /// </summary>
        /// <param name="stationManager"></param>
        /// <returns></returns>
        Task<WebResponseContent> RequestOutTaskToBZAsync(Dt_StationManager stationManager);
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å·ã€èµ·å§‹åœ°å€å‘WMS请求任务
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <param name="sourceAddress">起始地址</param>
        /// <returns></returns>
        Task<WebResponseContent> RequestTask(string palletCode, string EquiCodeMOM, string Roadways, string area,string currentChildeCode);
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å·ã€ç«™å°å‘WMS请求任务
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <param name="sourceAddress">起始地址</param>
        /// <returns></returns>
        Task<WebResponseContent> RequestTask(string palletCode, Dt_StationManager stationManager);
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址查询输送线未执行的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
@@ -292,8 +247,6 @@
        /// <returns>返回处理结果</returns>
        WebResponseContent StackCraneTaskCompleted(int taskNum);
        WebResponseContent StackCraneTaskCompletedByStation(int taskNum);
        /// <summary>
        /// æ¢å¤æŒ‚起任务
        /// </summary>
@@ -307,14 +260,6 @@
        /// <param name="taskNum">任务号</param>
        /// <returns>返回处理结果</returns>
        WebResponseContent RollbackTaskStatusToLast(int taskNum);
        /// <summary>
        ///
        /// </summary>
        /// <param name="palletCode"></param>
        /// <param name="Roadway"></param>
        /// <returns></returns>
        Dt_Task QueryTaskByPalletCode(string palletCode, string Roadway);
        /// <summary>
        /// æŸ¥è¯¢å½“前设备是否有移库任务
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_StationManager.cs
@@ -33,7 +33,7 @@
        public int stationID { get; set; }
        /// <summary>
        /// ç«™å°ç±»åž‹  1-入库站台 2-出库站台 3-异常排出站台 4-NG工站放料 5-NG工站取料 6-空框入库 7-空框出库,8-入库线体扫码确认,9-入库站台确认
        /// ç«™å°ç±»åž‹
        /// </summary>
        [ImporterHeader(Name = "站台类型")]
        [ExporterHeader(DisplayName = "站台类型")]
@@ -46,7 +46,7 @@
        [ImporterHeader(Name = "所属PLC")]
        [ExporterHeader(DisplayName = "所属PLC")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "所属PLC")]
        public string stationPLC { get; set; }
        public string stationDeviceCode { get; set; }
        /// <summary>
        /// å··é“号
@@ -88,32 +88,23 @@
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "坐标地址")]
        public string stationLocation { get; set; }
        /// <summary>
        /// MOM设备编号
        /// </summary>
        [ImporterHeader(Name = "MOM设备编号")]
        [ExporterHeader(DisplayName = "MOM设备编号")]
        [SugarColumn(IsNullable = false, ColumnDescription = "MOM设备编号")]
        public string stationEquipMOM { get; set; }
        /// <summary>
        ///
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "NG子设备编号")]
        public string stationNGChildCode { get; set; }
        /// <summary>
        ///
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "NG子设备坐标")]
        public string stationNGLocation { get; set; }
        public string remark { get; set; }
        /// <summary>
        /// è®¾å¤‡çŠ¶æ€
        /// </summary>
        [ImporterHeader(Name = "设备状态")]
        [ExporterHeader(DisplayName = "设备状态")]
        [SugarColumn(IsNullable = false, Length = 255, ColumnDescription = "设备状态")]
        public string stationStatus { get; set; }
        /// <summary>
        /// äº§çº¿
        /// æ¥¼å±‚
        /// </summary>
        public string productLine { get; set; }
        [ImporterHeader(Name = "楼层")]
        [ExporterHeader(DisplayName = "楼层")]
        [SugarColumn(IsNullable = false, Length = 255, ColumnDescription = "楼层")]
        public string stationFloor { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs
@@ -62,6 +62,14 @@
        public string Roadway { get; set; }
        /// <summary>
        /// è®¾å¤‡ç¼–号
        /// </summary>
        [ImporterHeader(Name = "设备编号")]
        [ExporterHeader(DisplayName = "设备编号")]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "设备编号")]
        public string DeviceCode { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç±»åž‹
        /// </summary>
        [ImporterHeader(Name = "任务类型")]
@@ -149,12 +157,5 @@
        [SugarColumn(IsNullable = true, Length = 255, ColumnDescription = "备注")]
        public string Remark { get; set; }
        /// <summary>
        /// æ‰˜ç›˜äº§çº¿
        /// </summary>
        [ImporterHeader(Name = "托盘产线")]
        [ExporterHeader(DisplayName = "托盘产线")]
        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "托盘产线")]
        public string ProductionLine { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/RGV/CommonRGV.cs
@@ -210,7 +210,7 @@
                {
                    return DeviceStatus.Idle;
                }
                else if (StackerCraneWorkStatusValue == StackerCraneWorkStatus.Putting || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUp || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpWalk || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpWait || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutWalk || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutWait || StackerCraneWorkStatusValue == StackerCraneWorkStatus.ReturnOrigin || StackerCraneWorkStatusValue == StackerCraneWorkStatus.ReverseOrigin || StackerCraneWorkStatusValue == StackerCraneWorkStatus.Walking || StackerCraneWorkStatusValue == StackerCraneWorkStatus.WorkCompleted || StackerCraneWorkStatusValue == StackerCraneWorkStatus.InStockStandby)
                else if (StackerCraneWorkStatusValue == StackerCraneWorkStatus.Puting || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUp || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpWalk || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpWait || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutWalk || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutWait || StackerCraneWorkStatusValue == StackerCraneWorkStatus.ReturnOrigin || StackerCraneWorkStatusValue == StackerCraneWorkStatus.ReverseOrigin || StackerCraneWorkStatusValue == StackerCraneWorkStatus.Walking || StackerCraneWorkStatusValue == StackerCraneWorkStatus.WorkCompleted || StackerCraneWorkStatusValue == StackerCraneWorkStatus.InStockStandby)
                {
                    return DeviceStatus.Working;
                }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs
@@ -230,7 +230,7 @@
                {
                    return DeviceStatus.Idle;
                }
                else if (StackerCraneWorkStatusValue == StackerCraneWorkStatus.Putting || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUp || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpWalk || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpWait || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutWalk || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutWait || StackerCraneWorkStatusValue == StackerCraneWorkStatus.ReturnOrigin || StackerCraneWorkStatusValue == StackerCraneWorkStatus.ReverseOrigin || StackerCraneWorkStatusValue == StackerCraneWorkStatus.Walking || StackerCraneWorkStatusValue == StackerCraneWorkStatus.WorkCompleted || StackerCraneWorkStatusValue == StackerCraneWorkStatus.InStockStandby)
                else if (StackerCraneWorkStatusValue == StackerCraneWorkStatus.Puting || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUp || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpWalk || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpWait || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutWalk || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutWait || StackerCraneWorkStatusValue == StackerCraneWorkStatus.ReturnOrigin || StackerCraneWorkStatusValue == StackerCraneWorkStatus.ReverseOrigin || StackerCraneWorkStatusValue == StackerCraneWorkStatus.Walking || StackerCraneWorkStatusValue == StackerCraneWorkStatus.WorkCompleted || StackerCraneWorkStatusValue == StackerCraneWorkStatus.InStockStandby)
                {
                    return DeviceStatus.Working;
                }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerStationCrane.cs
@@ -231,7 +231,7 @@
                {
                    return DeviceStatus.Idle;
                }
                else if (StackerCraneWorkStatusValue == StackerCraneWorkStatus.Putting || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUp || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpWalk || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpWait || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutWalk || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutWait || StackerCraneWorkStatusValue == StackerCraneWorkStatus.ReturnOrigin || StackerCraneWorkStatusValue == StackerCraneWorkStatus.ReverseOrigin || StackerCraneWorkStatusValue == StackerCraneWorkStatus.Walking || StackerCraneWorkStatusValue == StackerCraneWorkStatus.WorkCompleted || StackerCraneWorkStatusValue == StackerCraneWorkStatus.InStockStandby)
                else if (StackerCraneWorkStatusValue == StackerCraneWorkStatus.Puting || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUp || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpWalk || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PickUpWait || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutWalk || StackerCraneWorkStatusValue == StackerCraneWorkStatus.PutWait || StackerCraneWorkStatusValue == StackerCraneWorkStatus.ReturnOrigin || StackerCraneWorkStatusValue == StackerCraneWorkStatus.ReverseOrigin || StackerCraneWorkStatusValue == StackerCraneWorkStatus.Walking || StackerCraneWorkStatusValue == StackerCraneWorkStatus.WorkCompleted || StackerCraneWorkStatusValue == StackerCraneWorkStatus.InStockStandby)
                {
                    return DeviceStatus.Working;
                }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Enum/StackerCraneStatus.cs
@@ -128,7 +128,7 @@
        /// æ”¾è´§ä¸­
        /// </summary>
        [Description("放货中")]
        Putting,
        Puting,
        /// <summary>
        /// å›žåŽŸç‚¹
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server.sln
@@ -66,6 +66,8 @@
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_SignalR", "WIDESEAWCS_SignalR\WIDESEAWCS_SignalR.csproj", "{59D26679-7299-4251-A58E-3AC3C6FA717E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LogLibrary", "LogLibrary\LogLibrary.csproj", "{42364781-CE85-43D4-AEB0-CC4D6FE5085D}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
@@ -156,6 +158,10 @@
        {59D26679-7299-4251-A58E-3AC3C6FA717E}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {59D26679-7299-4251-A58E-3AC3C6FA717E}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {59D26679-7299-4251-A58E-3AC3C6FA717E}.Release|Any CPU.Build.0 = Release|Any CPU
        {42364781-CE85-43D4-AEB0-CC4D6FE5085D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {42364781-CE85-43D4-AEB0-CC4D6FE5085D}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {42364781-CE85-43D4-AEB0-CC4D6FE5085D}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {42364781-CE85-43D4-AEB0-CC4D6FE5085D}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,246 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using System.Reflection;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_DTO.AGV;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_Tasks;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using WIDESEAWCS_Tasks.ElevatorJob;
namespace WIDESEAWCS_Server.Controllers.AGV
{
    [Route("api/AGV")]
    [ApiController]
    public class AGVController : ControllerBase
    {
        private readonly ITaskRepository _taskRepository;
        public AGVController(ITaskRepository taskRepository)
        {
            _taskRepository = taskRepository;
        }
        /// <summary>
        /// AGV状态上报
        /// </summary>
        /// <param name="receiveDTO"></param>
        /// <returns></returns>
        [HttpPost, Route("AGVStatusReport"), AllowAnonymous]
        public WebResponseContent AGVStatusReport(AGVReceiveDTO receiveDTO) => SignalInteraction(receiveDTO);
        #region  AGV与设备信号交互
        /// <summary>
        /// AGV--设备交互
        /// </summary>
        /// <returns></returns>
        public WebResponseContent SignalInteraction(AGVReceiveDTO receiveDTO)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var task = _taskRepository.QueryFirst(t => t.TaskNum == receiveDTO.TaskNum);
                if (task == null)
                {
                    return content.Error("未找到任务");
                }
                MethodInfo? method = GetType().GetMethod(receiveDTO.Status);
                if (method != null)
                {
                    CommonConveyorLine? commonConveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == task.DeviceCode) as CommonConveyorLine;
                    CommonElevator? elevator = Storage.Devices.FirstOrDefault(x => x.DeviceCode == task.DeviceCode) as CommonElevator;
                    if (elevator == null && commonConveyorLine == null)
                        return content.Error("未找到设备");
                    else
                        return content = (WebResponseContent)method.Invoke(this, new object[] { task, commonConveyorLine, elevator });
                }
                else
                {
                    throw new Exception($"未找到该状态{receiveDTO.Status}定义");
                }
            }
            catch (Exception ex)
            {
                return content.Error(ex.Message);
            }
        }
        /// <summary>
        /// æ”¾è´§å®Œæˆ
        /// </summary>
        /// <param name="task"></param>
        /// <returns></returns>
        public WebResponseContent PutFinish(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    elevator.SetValue(ElevatorDBName.OneLayerPutFinish, 1);
                    elevator.SetValue(ElevatorDBName.StartCommand, 1);
                    content.OK();
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    if (task.DeviceCode.Contains("TSJ"))
                    {
                        elevator.SetValue(ElevatorDBName.TwoLayerPutFinish, 1);
                        elevator.SetValue(ElevatorDBName.StartCommand, 1);
                        content.OK();
                    }
                    else
                    {
                        commonConveyorLine.SetValue(ConveyorLineDBName.PutFinish, 1, "101");
                        commonConveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTaskNum, 9990, "101");
                    }
                }
                else
                {
                    throw new Exception("任务状态异常");
                }
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// å–货完成
        /// </summary>
        /// <param name="task"></param>
        /// <returns></returns>
        public WebResponseContent PickUpFinish(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    if (task.DeviceCode.Contains("TSJ"))
                    {
                        elevator.SetValue(ElevatorDBName.TwoLayerPutFinish, 1);
                        elevator.SetValue(ElevatorDBName.StartCommand, 1);
                        content.OK();
                    }
                    else
                    {
                        commonConveyorLine.SetValue(ConveyorLineDBName.PutFinish, 1, "101");
                        content.OK();
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    if (task.DeviceCode.Contains("TSJ"))
                    {
                        elevator.SetValue(ElevatorDBName.OneLayerPutFinish, 1);
                        elevator.SetValue(ElevatorDBName.StartCommand, 1);
                        content.OK();
                    }
                }
                else
                {
                    throw new Exception("任务状态异常");
                }
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// è¯·æ±‚取货
        /// </summary>
        /// <param name="task"></param>
        /// <returns></returns>
        public WebResponseContent RequestPickUp(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    int AllowPickUp = 0;
                    if (task.DeviceCode.Contains("TSJ"))
                        AllowPickUp = elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.TwoLayerAllowPickUp);
                    else
                        AllowPickUp = commonConveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.AllowPickUp, "101");
                    content = AllowPickUp == 1 ? content.OK() : content.Error("设备不允许取货");
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    int AllowPickUp = 0;
                    if (task.DeviceCode.Contains("TSJ"))
                        AllowPickUp = elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.OneLayerAllowPickUp);
                    content = AllowPickUp == 1 ? content.OK() : content.Error("设备不允许取货");
                }
                else
                {
                    throw new Exception("任务状态异常");
                }
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// è¯·æ±‚放货
        /// </summary>
        /// <param name="task"></param>
        /// <returns></returns>
        public WebResponseContent RequestPut(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    int AllowPickUp = 0;
                    if (task.DeviceCode.Contains("TSJ"))
                        AllowPickUp = elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.OneLayerAllowPut);
                    content = AllowPickUp == 1 ? content.OK() : content.Error("设备不允许放货");
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    int AllowPickUp = 0;
                    if (task.DeviceCode.Contains("TSJ"))
                        AllowPickUp = elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.TwoLayerAllowPut);
                    else
                        AllowPickUp = commonConveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.AllowPut, "101");
                    content = AllowPickUp == 1 ? content.OK() : content.Error("设备不允许放货");
                }
                else
                {
                    throw new Exception("任务状态异常");
                }
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        #endregion
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
@@ -25,19 +25,6 @@
            return Service.ReceiveWMSTask(taskDTOs);
        }
        [HttpPost, Route("ReceiveByWMSTask"), AllowAnonymous]
        public WebResponseContent ReceiveByWMSTask([FromBody] WMSTaskDTO taskDTOs)
        {
            return Service.ReceiveByWMSTask(taskDTOs);
        }
        [HttpPost, Route("ReceiveByWMSGWTask"), AllowAnonymous]
        public WebResponseContent ReceiveByWMSGWTask([FromBody] WMSTaskDTO taskDTOs)
        {
            return Service.ReceiveByWMSGWTask(taskDTOs);
        }
        [HttpPost, HttpGet, Route("UpdateTaskExceptionMessage")]
        public WebResponseContent UpdateTaskExceptionMessage(int taskNum, string message)
        {
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Partial/AGVTaskService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
using AngleSharp.Io;
using HslCommunication;
using Mapster;
using Newtonsoft.Json;
using SkiaSharp;
using System.Diagnostics.CodeAnalysis;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_DTO.AGV;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
namespace WIDESEAWCS_TaskInfoService
{
    public partial class TaskService
    {
        #region AGV接口
        private string GetAGVIPAddress(string baseIp, string name)
        {
            var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var wcsBasez = configz.Where(x => x.ConfigKey == baseIp).FirstOrDefault()?.ConfigValue;
            var address = configz.Where(x => x.ConfigKey == name).FirstOrDefault()?.ConfigValue;
            if (wcsBasez == null || address == null)
            {
                throw new InvalidOperationException("WMS IP æœªé…ç½®");
            }
            return wcsBasez + address;
        }
        public async Task<WebResponseContent> SendAgvTask(string modelProcessCode,Dt_Task task)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                SendTask sendTask = new SendTask()
                {
                    modelProcessCode = modelProcessCode,
                    priority = 1,
                    fromSystem = "WMS",
                    orderId = task.TaskNum.ToString(),
                    orderDetail = new taskOrderDetail()
                    {
                        taskPath = $"{task.CurrentAddress},{task.NextAddress}",
                        shelfNumber = "",
                    }
                };
                var AgvSendTaskAddrss = GetAGVIPAddress(SysConfigKeyConst.AGVIP_BASE, SysConfigKeyConst.SendAGVTask);
                // å‘送请求并等待响应
                var result = await HttpHelper.PostAsync(AgvSendTaskAddrss, sendTask.ToJsonString());
                var respone = JsonConvert.DeserializeObject<AgvRespone>(result.ToString());
                if (respone.code != 1000)
                {
                    content.Error(respone.desc);
                }
                content.OK("任务下发至AGV系统");
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        #endregion
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -1,5 +1,6 @@
using AutoMapper;
using HslCommunication;
using LogLibrary.Log;
using Mapster;
using Newtonsoft.Json;
using SqlSugar;
@@ -25,8 +26,6 @@
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_TaskInfoRepository;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
namespace WIDESEAWCS_TaskInfoService
{
@@ -138,26 +137,7 @@
                    // åˆ¤æ–­ä»»åŠ¡ç±»åž‹æ˜¯å¦ä¸ºå…¥åº“ä»»åŠ¡
                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                    {
                        var value = _sys_ConfigService.GetByConfigKey(CateGoryConst.CONFIG_SYS_InStation, SysConfigKeyConst.JZNGInBoundStation).ConfigValue;
                        var valueList = value.Split(',').ToList();
                        // åˆ¤æ–­æºåœ°å€æ˜¯å¦ä¸ç­‰äºŽ"1359-4"
                        //if (task.SourceAddress != "1359-4" && task.SourceAddress != "1357-4")
                        if (!valueList.Contains(task.SourceAddress))
                        {
                            // æŸ¥è¯¢ä»Žæºåœ°å€åˆ°ç›®æ ‡åœ°å€çš„路由
                            List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress);
                            if (routers.Count > 0)
                            {
                                // è®¾ç½®ä»»åŠ¡çŠ¶æ€ä¸ºå…¥åº“æ–°å»º
                                task.TaskState = (int)TaskInStatusEnum.InNew;
                                // è®¾ç½®å½“前地址为源地址
                                task.CurrentAddress = item.SourceAddress;
                                // è®¾ç½®ä¸‹ä¸€ä¸ªåœ°å€ä¸ºç¬¬ä¸€ä¸ªå­ä½ç½®
                                task.NextAddress = routers.FirstOrDefault().ChildPosi;
                            }
                        }
                        else
                        {
                            task.CurrentAddress = string.Empty;
                            if (task.SourceAddress == "1325-6")
                                // è®¾ç½®å½“前地址为"001-021-001"
@@ -167,7 +147,6 @@
                                task.CurrentAddress = "002-021-001";
                            // è®¾ç½®ä¸‹ä¸€ä¸ªåœ°å€ä¸ºç›®æ ‡åœ°å€
                            task.NextAddress = item.TargetAddress;
                        }
                    }
                    // å°†è½¬æ¢åŽçš„任务添加到任务列表中
                    tasks.Add(task);
@@ -188,77 +167,6 @@
            }
            // è¿”回结果
            return content;
        }
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å·ã€èµ·å§‹åœ°å€å‘WMS请求任务
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <param name="sourceAddress">起始地址</param>
        /// <returns></returns>
        public async Task<WebResponseContent> RequestWMSTask(string palletCode, string sourceAddress)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var hasTask = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode);
                if (hasTask != null)
                {
                    var taskExecuting = BaseDal.QueryFirst(x => x.PalletCode == palletCode && x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting);
                    if (taskExecuting != null)
                    {
                        taskExecuting.ExceptionMessage = "未接收到线体完成信号系统内部自动完成";
                        Delete(taskExecuting);
                    }
                    ConsoleHelper.WriteErrorLine($"当前托盘存在任务:【{palletCode}】");
                    QuartzLogger.WriteLogToFile($"任务异常未完成", $"当前托盘存在任务:【{palletCode}】{Environment.NewLine}");
                }
                var wmsIpAddrss = string.Empty;
                var stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == sourceAddress);
                if (stationManager.stationType == 5)
                {
                    wmsIpAddrss = GetIpAddress(SysConfigKeyConst.WMSIP_BASE, SysConfigKeyConst.RequestInBoundTaskNG);
                }
                else
                {
                    wmsIpAddrss = GetIpAddress(SysConfigKeyConst.WMSIP_BASE, SysConfigKeyConst.RequestTask);
                }
                var result = await HttpHelper.PostAsync(wmsIpAddrss, new { Position = sourceAddress, PalletCode = palletCode, stationManager.productLine }.ToJsonString());
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                if (!content.Status)
                {
                    // wms失败返回去NG口任务
                    return content;
                }
                var task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                if (task.TaskType == (int)TaskInboundTypeEnum.InNG)
                {
                    var station = await _stationManagerRepository.QueryFirstAsync(x => x.stationChildCode == task.SourceAddress);
                    Dt_Task _Task = _mapper.Map<Dt_Task>(task);
                    _Task.TaskState = (int)TaskInStatusEnum.InNew;
                    _Task.CurrentAddress = task.SourceAddress;
                    _Task.NextAddress = station.stationNGChildCode;
                    _Task.TargetAddress = task.TargetAddress;
                    BaseDal.AddData(_Task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(_Task.TaskNum, "接收WMS任务");
                    return content.OK();
                }
                else
                {
                    return ReceiveWMSTask(new List<WMSTaskDTO> { task });
                }
            }
            catch (Exception ex)
            {
                QuartzLogger.WriteLogToFile($"接收任务异常", $"托盘号:【{palletCode}】请求点位:【{sourceAddress}】异常信息【{ex.Message}】异常行【{ex.StackTrace}】");
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
@@ -838,9 +746,9 @@
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】");
                QuartzLogger.WriteLogToFile($"Info_任务完成", $"任务完成异常,任务号:【{taskNum}】异常信息【{ex.Message}】{Environment.NewLine}异常信息【{ex.StackTrace}】{Environment.NewLine}");
                LogFactory.WriteError($"Info_任务完成", $"任务完成异常,任务号:【{taskNum}】", ex);
            }
            QuartzLogger.WriteLogToFile($"Info_任务完成", $"任务完成,任务号:【{taskNum}】返回参数【{JsonConvert.SerializeObject(content)}】{Environment.NewLine}{Environment.NewLine}");
            LogFactory.WriteInfo($"Info_任务完成", $"任务完成,任务号:【{taskNum}】返回参数【{JsonConvert.SerializeObject(content)}】{Environment.NewLine}{Environment.NewLine}");
            return content;
        }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WIDESEAWCS_TaskInfoService.csproj
@@ -7,6 +7,7 @@
    </PropertyGroup>
    <ItemGroup>
        <ProjectReference Include="..\LogLibrary\LogLibrary.csproj" />
        <ProjectReference Include="..\WIDESEAWCS_BasicInfoService\WIDESEAWCS_BasicInfoService.csproj" />
        <ProjectReference Include="..\WIDESEAWCS_ITaskInfoService\WIDESEAWCS_ITaskInfoService.csproj" />
        <ProjectReference Include="..\WIDESEAWCS_SystemServices\WIDESEAWCS_SystemServices.csproj" />
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -76,28 +76,7 @@
                CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
                if (conveyorLine != null)
                {
                    // æŸ¥è¯¢æ‰€æœ‰å­è®¾å¤‡çš„位置
                    List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
                    // èŽ·å–æ‰€æœ‰ç«™ç‚¹ç®¡ç†å™¨
                    List<Dt_StationManager> stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode);
                    // å¹¶è¡Œå¤„理每个子设备
                    var tasks = childDeviceCodes.Select(childDeviceCode => ProcessDeviceAsync(conveyorLine, childDeviceCode)).ToList();
                    // å¹¶è¡Œå¤„理每个站点管理器
                    tasks = stationManagers.Select(station => Task.Run(async () =>
                    {
                        ConveyorLineTaskCommand command = ReadCommand(conveyorLine, station.stationChildCode);
                        if (command == null )
                        {
                            return;
                        }
                        IStationHandler handler = StationHandlerFactory.GetHandler(station.stationType, this);
                        await handler.HandleStationAsync(conveyorLine, station, command);
                    })).ToList();
                    await Task.WhenAll(tasks);
                }
            }
            catch (Exception ex)
@@ -106,507 +85,6 @@
                Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
            }
            return;
        }
        private Task ProcessDeviceAsync(CommonConveyorLine conveyorLine, string childDeviceCode)
        {
            try
            {
                // è¯»å–任务命令和设备命令
                ConveyorLineTaskCommand command = ReadCommand(conveyorLine, childDeviceCode);
                if (command != null)
                {
                    #region è°ƒç”¨äº‹ä»¶æ€»çº¿é€šçŸ¥å‰ç«¯
                    // èŽ·å–ç¼“å­˜ä¸­çš„ç”¨æˆ·ä¿¡æ¯
                    var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken");
                    if (tokenInfos != null && tokenInfos.Any())
                    {
                        userTokenIds = tokenInfos.Select(x => x.Token_ID).ToList();
                        userIds = tokenInfos.Select(x => x.UserId).ToList();
                        // æž„造通知数据
                        object obj = new
                        {
                            command
                        };
                        // å‘送通知
                        _noticeService.LineData(userIds.FirstOrDefault(), userTokenIds, new { conveyorLine.DeviceName, childDeviceCode, data = obj });
                    }
                    #endregion è°ƒç”¨äº‹ä»¶æ€»çº¿é€šçŸ¥å‰ç«¯
                    var structs = BitConverter.GetBytes(command.InteractiveSignal).Reverse().ToArray().ToBoolArray();
                    // èŽ·å–è®¾å¤‡åè®®è¯¦æƒ…
                    List<DeviceProtocolDetailDTO>? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.Where(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand.InteractiveSignal)).ToList();
                    if (deviceProtocolDetails != null)
                    {
                        foreach (var item in deviceProtocolDetails)
                        {
                            int itemValue = item.ProtocalDetailValue.ObjToInt();
                            if (structs[itemValue] == true)
                            {
                                // èŽ·å–å¤„ç†æ–¹æ³•
                                MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType);
                                if (method != null)
                                {
                                    // è°ƒç”¨å¤„理方法
                                    method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, itemValue });
                                }
                            }
                        }
                    }
               }
            }
            catch (Exception ex)
            {
            }
            return Task.CompletedTask;
        }
        #region å…¥åº“
        /// <summary>
        /// è¾“送线请求入库
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
        public async Task RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
        {
            try
            {
                // è¾“出警告信息,表示任务已到达子设备并请求扫码入库
                var log = $"时间:【{DateTime.Now}】【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】请求扫码入库";
                ConsoleHelper.WriteWarningLine(log);
                // å‘送通知
                await _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
                WriteInfo(conveyorLine.DeviceName, log);
                // æŸ¥è¯¢æ¡ç å¯¹åº”的任务
                var task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode.ToString(), childDeviceCode);
                if (task != null)
                {
                    // å¦‚果任务类型是出库或出托盘,则处理出库任务
                    if (task.TaskType == (int)TaskOutboundTypeEnum.OutTray || task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                    {
                        HandleTaskOut(conveyorLine, command, childDeviceCode, ProtocalDetailValue, task);
                    }
                    else
                    {
                        // èŽ·å–ä»»åŠ¡çš„ä¸‹ä¸€ç›®æ ‡åœ°å€
                        var next = task.NextAddress;
                        // å°†ä»»åŠ¡æ˜ å°„ä¸ºå‘½ä»¤
                        var taskCommand = MapTaskCommand(task, command);
                        // æ¢å¤ä»»åŠ¡çš„ä¸‹ä¸€ç›®æ ‡åœ°å€
                        task.NextAddress = next;
                        // å‘送命令到子设备
                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
                        // è¾“出警告信息,表示任务已到达子设备并请求扫码入库,下一目标地址
                        var logs = $"时间:【{DateTime.Now}】【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】请求扫码入库,下一目标地址【{taskCommand.TargetAddress}】";
                        ConsoleHelper.WriteWarningLine(logs);
                        await _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" });
                        WriteInfo(conveyorLine.DeviceName, logs);
                        // å‘送任务完成通知
                        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                        // æ›´æ–°ä»»åŠ¡çŠ¶æ€ä¸ºä¸‹ä¸€çŠ¶æ€
                        _taskService.UpdateTaskStatusToNext(task);
                    }
                }
                else
                {
                    // å¦‚果任务为空且条码不为"NoRead"且条码不为空,则处理新任务
                    if (task == null && command.Barcode.ToString() != "NoRead" && command.Barcode.IsNotEmptyOrNull())
                    {
                        // æŸ¥è¯¢æ¡ç å¯¹åº”的任务
                        task = _taskService.QueryBarcodeTask(command.Barcode.ToString(), childDeviceCode);
                        if (task == null)
                            // å¼‚步处理新任务
                            await HandleNewTaskAsync(conveyorLine, command, childDeviceCode, ProtocalDetailValue);
                    }
                }
            }
            catch (Exception ex)
            {
                // æ•获并输出异常信息
                Console.Out.WriteLine(ex.ToString());
            }
        }
        #region è¾“送线请求入库下一地址
        /// <summary>
        /// è¾“送线请求入库下一地址
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void RequestInNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode)
        {
            var log = $"时间:【{DateTime.Now}】【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】请求入库下一地址";
            ConsoleHelper.WriteWarningLine(log);
            _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
            WriteInfo(conveyorLine.DeviceName, log);
            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode, command.Barcode.ToString());
            if (task != null)
            {
                if (command.Barcode.ToString() == task.PalletCode)
                {
                    Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
                    if (newTask != null)
                    {
                        //ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(newTask);
                        //taskCommand.InteractiveSignal = command.InteractiveSignal;
                        var next = newTask.NextAddress;
                        var taskCommand = MapTaskCommand(newTask, command);
                        newTask.NextAddress = next;
                        var logs = $"【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】请求入库下一地址,下一目标地址【{taskCommand.TargetAddress}】";
                        ConsoleHelper.WriteWarningLine(logs);
                        _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" });
                        WriteInfo(conveyorLine.DeviceName, logs);
                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
                        _taskService.UpdateData(newTask);
                    }
                }
            }
        }
        #endregion è¾“送线请求入库下一地址
        /// <summary>
        /// è¾“送线入库完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
        public void ConveyorLineInFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
        {
            try
            {
                var log = $"时间:【{DateTime.Now}】【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】输送线入库完成";
                ConsoleHelper.WriteWarningLine(log);
                _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
                WriteInfo(conveyorLine.DeviceName, log);
                var task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode, command.Barcode.ToString());
                if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish)
                {
                    if (command.Barcode.ToString() == task.PalletCode && childDeviceCode == task.NextAddress)
                    {
                        if (task.TaskType == (int)TaskInboundTypeEnum.InNG)
                        {
                            int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress);
                            task.CurrentAddress = station.stationLocation;
                            task.NextAddress = station.stationNGLocation;
                            task.TargetAddress = task.NextAddress;
                            task.TaskState = nextStatus;
                            task.ModifyDate = DateTime.Now;
                            task.Modifier = "System";
                            _taskRepository.UpdateData(task);
                            conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, "1000", childDeviceCode);
                            var logs = $"【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】输送线入库完成,下一目标地址【等待分配货位,并写入1000】";
                            ConsoleHelper.WriteWarningLine(logs);
                            _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" });
                            WriteInfo(conveyorLine.DeviceName, logs);
                            ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                        }
                        else
                        {
                            WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
                            WriteInfo(conveyorLine.DeviceName, content.ToJsonString());
                            if (!content.Status)
                            {
                                ConsoleHelper.WriteWarningLine($"【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】输送线入库完成,任务执行失败{JsonConvert.SerializeObject(content)}");
                                return;
                            }
                            conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, "1000", childDeviceCode);
                            var logs = $"【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】输送线入库完成,下一目标地址【等待分配货位,并写入1000】";
                            ConsoleHelper.WriteWarningLine(logs);
                            _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" });
                            WriteInfo(conveyorLine.DeviceName, logs);
                            ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                            Console.Out.WriteLine(content.ToJsonString());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
        #endregion å…¥åº“
        #region å‡ºåº“
        /// <summary>
        /// è¾“送线请求出信息
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
        public void RequestOutbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
        {
            try
            {
                // æŸ¥è¯¢è¾“送线任务,根据输送线设备和子设备代码获取任务信息
                var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
                // è¾“出成功信息,包括输送线名称、任务号、托盘条码和子设备代码,以及任务信息
                var logs = $"时间:【{DateTime.Now}】【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】输送线请求出库,task{task.ToJsonString()}";
                ConsoleHelper.WriteSuccessLine(logs);
                _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" });
                WriteInfo(conveyorLine.DeviceName, logs);
                // å¦‚果任务不为空,则执行以下操作
                if (task != null)
                {
                    // èŽ·å–ä»»åŠ¡çš„ä¸‹ä¸€ç›®æ ‡åœ°å€
                    var next = task.NextAddress;
                    // å°†ä»»åŠ¡å‘½ä»¤æ˜ å°„åˆ°å½“å‰ä»»åŠ¡
                    var taskCommand = MapTaskCommand(task, command);
                    // æ¢å¤ä»»åŠ¡çš„ä¸‹ä¸€ç›®æ ‡åœ°å€
                    task.NextAddress = next;
                    // è¾“出成功信息,包括输送线名称、任务号、托盘条码、子设备代码和下一目标地址
                    var log = $"【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】输送线请求出库,下一目标地址【{taskCommand.TargetAddress}】";
                    ConsoleHelper.WriteSuccessLine(log);
                    _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
                    WriteInfo(conveyorLine.DeviceName, log);
                    // å‘输送线发送命令
                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
                    // å®Œæˆè¾“送线发送任务,并更新任务状态
                    ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                    // æ›´æ–°ä»»åŠ¡çŠ¶æ€åˆ°ä¸‹ä¸€ä¸ªçŠ¶æ€
                    _taskService.UpdateTaskStatusToNext(task);
                    // å¦‚果任务的目标地址是"1020-1",则再次更新任务状态到下一个状态
                    if (task.TargetAddress == "1020-1"|| task.TargetAddress == "1049-8")
                    {
                        _taskService.UpdateTaskStatusToNext(task);
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
        /// <summary>
        /// è¾“送线请求出库下一地址
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void RequestOutNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
        {
            // æ‰“印成功日志,显示当前设备名称、任务号、托盘条码以及请求出库下一地址的子设备代码
            var log = $"【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】输送线请求出库下一地址";
            ConsoleHelper.WriteSuccessLine(log);
            _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
            WriteInfo(conveyorLine.DeviceName, log);
            // æŸ¥è¯¢æ­£åœ¨æ‰§è¡Œçš„输送线任务,根据任务号和子设备代码获取任务信息
            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode, command.Barcode.ToString());
            // å¦‚果任务存在
            if (task != null)
            {
                // æ£€æŸ¥ä»»åŠ¡ä¸­çš„æ‰˜ç›˜æ¡ç æ˜¯å¦ä¸Žå‘½ä»¤ä¸­çš„æ‰˜ç›˜æ¡ç ä¸€è‡´
                if (command.Barcode.ToString() == task.PalletCode)
                {
                    // æ›´æ–°ä»»åŠ¡çš„ä½ç½®ä¿¡æ¯ï¼Œå¹¶èŽ·å–æ›´æ–°åŽçš„ä»»åŠ¡å¯¹è±¡
                    Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
                    // å¦‚果更新后的任务对象不为空
                    if (newTask != null)
                    {
                        // èŽ·å–ä¸‹ä¸€ç›®æ ‡åœ°å€
                        var next = newTask.NextAddress;
                        // å°†æ–°ä»»åŠ¡å¯¹è±¡æ˜ å°„ä¸ºä»»åŠ¡å‘½ä»¤å¯¹è±¡
                        var taskCommand = MapTaskCommand(newTask, command);
                        // æ¢å¤æ–°ä»»åŠ¡å¯¹è±¡çš„ä¸‹ä¸€ç›®æ ‡åœ°å€
                        newTask.NextAddress = next;
                        // æ‰“印成功日志,显示当前设备名称、任务号、托盘条码、子设备代码以及下一目标地址
                        var logs = $"【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】输送线请求出库下一地址,下一目标地址【{taskCommand.TargetAddress}】";
                        ConsoleHelper.WriteSuccessLine(logs);
                        _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" });
                        WriteInfo(conveyorLine.DeviceName, logs);
                        // å‘送任务命令到子设备
                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
                        // æ ‡è®°è¾“送线发送任务完成
                        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                        _taskService.UpdateData(newTask);
                    }
                }
            }
        }
        /// <summary>
        /// è¾“送线出库完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
        {
            try
            {
                // æ‰“印成功信息,表示托盘已到达指定输送线并完成出库
                var logs = $"【{conveyorLine.DeviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】输送线出库完成";
                ConsoleHelper.WriteSuccessLine(logs);
                _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = logs, time = DateTime.Now.ToString("G"), color = "red" });
                WriteInfo(conveyorLine.DeviceName, logs);
                // æŸ¥è¯¢æ­£åœ¨æ‰§è¡Œçš„输送线任务
                var task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode, command.Barcode.ToString());
                // å¦‚果任务存在
                if (task != null)
                {
                    // å¦‚果任务中的托盘条码与命令中的托盘条码一致
                    if (command.Barcode.ToString() == task.PalletCode)
                    {
                        // åˆ›å»ºä¸€ä¸ªç©ºçš„WebResponseContent对象
                        WebResponseContent content = new WebResponseContent();
                        // ä¿å­˜ä»»åŠ¡çš„ä¸‹ä¸€ç›®æ ‡åœ°å€
                        var next = task.NextAddress;
                        // å°†ä»»åŠ¡æ˜ å°„ä¸ºå‘½ä»¤
                        var taskCommand = MapTaskCommand(task, command);
                        // æ¢å¤ä»»åŠ¡çš„ä¸‹ä¸€ç›®æ ‡åœ°å€
                        task.NextAddress = next;
                        // å¦‚果任务的托盘条码与命令中的托盘条码不一致或者任务备注为"NG"
                        if (task.PalletCode != command.Barcode.ToString() || task.Remark == "NG")
                        {
                            // è®¾ç½®å‘½ä»¤çš„目标地址为NG地址
                            taskCommand.TargetAddress = 1;
                        }
                        else
                        {
                            // è®¾ç½®å‘½ä»¤çš„目标地址为1000
                            taskCommand.TargetAddress = 1000;
                        }
                        // æ‰“印成功信息,表示托盘已到达指定输送线并完成出库,下一目标地址已确定
                        var log = $"【{conveyorLine.DeviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】输送线出库完成,下一目标地址【{taskCommand.TargetAddress}】";
                        ConsoleHelper.WriteSuccessLine(log);
                        _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
                        WriteInfo(conveyorLine.DeviceName, log);
                        // å‘送命令到输送线
                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
                        // å®Œæˆè¾“送线发送
                        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                        // æ›´æ–°ä»»åŠ¡çŠ¶æ€åˆ°ä¸‹ä¸€ä¸ªçŠ¶æ€
                        content = _taskService.UpdateTaskStatusToNext(task);
                    }
                    else
                    {
                        // å®Œæˆè¾“送线发送
                        ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                        // æ›´æ–°ä»»åŠ¡çŠ¶æ€åˆ°ä¸‹ä¸€ä¸ªçŠ¶æ€
                        _taskService.UpdateTaskStatusToNext(task);
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
        #endregion å‡ºåº“
        /// <summary>
        /// è¾“送线交互完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
        /// <param name="value">值</param>
        public void ConveyorLineSendFinish(CommonConveyorLine conveyorLine, string childDeviceCode, int ProtocalDetailValue, bool value)
        {
            // ä»ŽconveyorLine中的DeviceProDTOs列表中查找第一个符合条件的DeviceProDTO对象
            // æ¡ä»¶æ˜¯DeviceProParamType等于DeviceCommand,且DeviceChildCode等于childDeviceCode
            // æŸ¥æ‰¾ç»“果按DeviceProOffset升序排列
            DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
            // å°†devicePro的DeviceProAddress按'.'分割成字符串数组x
            string[] x = devicePro.DeviceProAddress.Split('.');
            // å°†æ•°ç»„x的最后一个元素替换为ProtocalDetailValue加1后的字符串形式
            x[x.Length - 1] = (ProtocalDetailValue + 1).ToString();
            // å°†ä¿®æ”¹åŽçš„æ•°ç»„x重新拼接成字符串,作为新的DeviceProAddress
            string DeviceProAddress = string.Join(".", x);
            var writeBool = conveyorLine.Communicator.Read<bool>(DeviceProAddress);
            if (writeBool != value)
            {
                // ä½¿ç”¨conveyorLine的Communicator对象的Write方法,将value写入新的DeviceProAddress地址
                conveyorLine.Communicator.Write(DeviceProAddress, value);
            }
        }
        public async Task LogAndWarn(string deviceName, string log, string color = "red")
        {
            ConsoleHelper.WriteWarningLine(log);
            await _noticeService.Logs(userTokenIds, new { deviceName, log = log, time = DateTime.Now.ToString("G"), color = color });
            WriteInfo(deviceName, log);
        }
        private ConveyorLineTaskCommand ReadCommand(CommonConveyorLine conveyorLine,string childDeviceCode)
        {
            ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(childDeviceCode);
            DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceChildCode == childDeviceCode && x.DeviceProParamName == "ConveyorLineBarcode").FirstOrDefault();
            byte[] Barcode = conveyorLine.Communicator.Read(devicePro.DeviceProAddress, 10);
            command.Barcode = Encoding.ASCII.GetString(Barcode);
            return command;
        }
    }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineDBName.cs
@@ -81,8 +81,30 @@
        /// <summary>
        /// æ‰˜ç›˜ç±»åž‹
        /// </summary>
        WriteConveyorLineTrayType
        WriteConveyorLineTrayType,
        #endregion
        #region AGVDevice
        /// <summary>
        /// å…è®¸æ”¾è´§
        /// </summary>
        AllowPut,
        /// <summary>
        /// å…è®¸å–è´§
        /// </summary>
        AllowPickUp,
        /// <summary>
        /// AGV放货完成
        /// </summary>
        PutFinish,
        /// <summary>
        /// AGV取货完成
        /// </summary>
        PickUpFinish
        #endregion
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/StationHandler/EmptyTrayStationHandler.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/StationHandler/ExceptionPortStationHandler.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/StationHandler/IStationHandler.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/StationHandler/StationHandlerFactory.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/MemoryLockManager.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/DeleteLog/CommonDeleteLogJob.cs
@@ -1,4 +1,5 @@
using Newtonsoft.Json;

using Newtonsoft.Json;
using Quartz;
using System;
using System.Collections.Generic;
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ElevatorJob/ElevatorDBName.cs
@@ -34,22 +34,22 @@
        /// <summary>
        /// ä¸€æ¥¼å…è®¸æ”¾è´§
        /// </summary>
        OneLayerPut,
        OneLayerAllowPut,
        /// <summary>
        /// ä¸€æ¥¼å…è®¸å–è´§
        /// </summary>
        OneLayerPickU,
        OneLayerAllowPickUp,
        /// <summary>
        /// äºŒæ¥¼å…è®¸æ”¾è´§
        /// </summary>
        TwoLayerPut,
        TwoLayerAllowPut,
        /// <summary>
        /// äºŒæ¥¼å…è®¸å–è´§
        /// </summary>
        TwoLayerPickUp,
        TwoLayerAllowPickUp,
        /// <summary>
        /// ä»»åŠ¡å·
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -1,4 +1,6 @@
using Mapster;
using HslCommunication;
using Mapster;
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using Quartz;
using System.Diagnostics.CodeAnalysis;
@@ -20,6 +22,7 @@
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_SignalR;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using WIDESEAWCS_Tasks.StackerCraneJob;
namespace WIDESEAWCS_Tasks
@@ -230,7 +233,21 @@
                    var task = _taskRepository.QueryFirst(x => x.TaskNum == e.TaskNum);
                    if (task == null) commonStackerCrane.SetValue(StackerCraneDBName.FinishConfirm, 1);
                    string x = $"【{commonStackerCrane.StackerCraneWorkStatusValue}】";
                    //if(task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    //{
                    //    CommonConveyorLine? conveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1001") as CommonConveyorLine;
                    //    if (conveyorLine != null)
                    //    {
                    //        short InteractiveSignal = conveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.InteractiveSignal, "101");
                    //        var structs = BitConverter.GetBytes(InteractiveSignal).Reverse().ToArray().ToBoolArray();
                    //        if (structs[0])
                    //        {
                    //            conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTaskNum, "9999", "101");
                    //        }
                    //    }
                    //}
                    var content = _taskService.StackCraneTaskCompleted(e.TaskNum);
@@ -238,7 +255,7 @@
                    str = $"{commonStackerCrane.DeviceName}】WMS|WCS任务完成:【{content.Status}{content.Message}】,堆垛机完成信号写入:【{isWorkType}】,任务号:【{e.TaskNum}】时间【{DateTime.Now}】";
                    WriteInfo(commonStackerCrane.DeviceName, str);
                    WriteInfo(commonStackerCrane.DeviceName, str+x);
                    ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
                }
            }
@@ -281,30 +298,30 @@
            if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
            {
                // æ£€æŸ¥å½“前出库任务站台是否允许放货
                var occupiedStation = OutTaskStationIsOccupied(task);
                if (occupiedStation == null)
                {
                    // å¦‚果当前出库任务站台不允许放货,排除当前任务,查找其他出库任务
                //    // æ£€æŸ¥å½“前出库任务站台是否允许放货
                //    var occupiedStation = OutTaskStationIsOccupied(task);
                //    if (occupiedStation == null)
                //    {
                //        // å¦‚果当前出库任务站台不允许放货,排除当前任务,查找其他出库任务
                    var log = $"任务号:【{task.TaskNum}】出库地址:【{task.NextAddress}】不允许放货";
                    ConsoleHelper.WriteErrorLine(log);
                //        var log = $"任务号:【{task.TaskNum}】出库地址:【{task.NextAddress}】不允许放货";
                //        ConsoleHelper.WriteErrorLine(log);
                    _noticeService.Logs(userTokenIds, new { commonStackerCrane.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
                    WriteInfo(commonStackerCrane.DeviceName, log);
                //        _noticeService.Logs(userTokenIds, new { commonStackerCrane.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
                //        WriteInfo(commonStackerCrane.DeviceName, log);
                    task = FindAnotherOutboundTask(commonStackerCrane.DeviceCode, task.TaskId);
                //        task = FindAnotherOutboundTask(commonStackerCrane.DeviceCode, task.TaskId);
                    if (task == null)
                    {
                        task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                    }
                }
                else
                {
                //        if (task == null)
                //        {
                //            task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                //        }
                //    }
                //    else
                //    {
                //        return task;
                //    }
                    return task;
                }
            }
            else if (task == null)
            {
@@ -390,48 +407,11 @@
        {
            StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand();
            stackerCraneTaskCommand.Barcode = task.PalletCode;
            stackerCraneTaskCommand.TaskNum = task.TaskNum;
            stackerCraneTaskCommand.WorkType = 1;
            stackerCraneTaskCommand.StartCommand = 1;
            stackerCraneTaskCommand.TaskNum = Convert.ToInt16(task.TaskNum);
            stackerCraneTaskCommand.WorkType = Convert.ToInt16(1);
            stackerCraneTaskCommand.StartCommand = Convert.ToInt16(1);
            if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//判断是否是入库任务
            {
                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway);
                if (routers.Count > 0)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
                    string[] targetCodes = task.NextAddress.Split("-");
                    if (targetCodes.Length == 3)
                    {
                        stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                    }
                    else
                    {
                        //数据配置错误
                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"入库任务终点错误,起点:【{task.NextAddress}】");
                        return null;
                    }
                }
                else
                {
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到站台【{task.NextAddress}】信息,无法获取对应的堆垛机取货站台信息");
                    return null;
                }
            }
            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
            {
                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.Roadway, task.TargetAddress);
                if (routers.Count > 0)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
                    string[] sourceCodes = task.CurrentAddress.Split("-");
                    if (sourceCodes.Length == 3)
                    {
@@ -445,15 +425,7 @@
                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务起点错误,起点:【{task.CurrentAddress}】");
                        return null;
                    }
                }
                else
                {
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到站台【{task.NextAddress}】信息,无法获取对应的堆垛机放货站台信息");
                    return null;
                }
            }
            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
            {
                string[] targetCodes = task.NextAddress.Split("-");
                if (targetCodes.Length == 3)
                {
@@ -464,9 +436,12 @@
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"移库任务终点错误,起点:【{task.NextAddress}】");
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务终点错误,起点:【{task.CurrentAddress}】");
                    return null;
                }
            }
            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
            {
                string[] sourceCodes = task.CurrentAddress.Split("-");
                if (sourceCodes.Length == 3)
                {
@@ -477,7 +452,52 @@
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"移库任务起点错误,起点:【{task.CurrentAddress}】");
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务起点错误,起点:【{task.CurrentAddress}】");
                    return null;
                }
                string[] targetCodes = task.NextAddress.Split("-");
                if (targetCodes.Length == 3)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务终点错误,起点:【{task.CurrentAddress}】");
                    return null;
                }
            }
            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
            {
                string[] sourceCodes = task.CurrentAddress.Split("-");
                if (sourceCodes.Length == 3)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务起点错误,起点:【{task.CurrentAddress}】");
                    return null;
                }
                string[] targetCodes = task.NextAddress.Split("-");
                if (targetCodes.Length == 3)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务终点错误,起点:【{task.CurrentAddress}】");
                    return null;
                }
            }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskCommand.cs
@@ -34,7 +34,7 @@
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public int TaskNum { get; set; }
        public short TaskNum { get; set; }
        /// <summary>
        /// ä½œä¸šç±»åž‹
@@ -70,12 +70,6 @@
        /// ç›®æ ‡å±‚
        /// </summary>
        public short EndLayer { get; set; }
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        [DataLength(30)]
        public string Barcode { get; set; }
        /// <summary>
        /// å¯åЍ命令
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/Dt_BillGroupStock.jsx
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/widesea_wms/basicinfo/Dt_LocationInfo.vue
@@ -52,13 +52,10 @@
        { field: 'row', title: '行', type: 'string', width: 70, align: 'left' },
        { field: 'column', title: '列', type: 'string', width: 70, align: 'left' },
        { field: 'layer', title: '层', type: 'string', width: 110, align: 'left' },
        { field: 'depth', title: '深度', type: 'string', width: 110, align: 'left', hidden: true  },
        { field: 'scNo', title: '对应堆垛机号', type: 'string', width: 110, align: 'left', hidden: true },
        { field: 'depth', title: '深度', type: 'string', width: 110, align: 'left'},
        { field: 'locationType', title: '货位类型', type: 'int', width: 110, align: 'left',bind: { key: "LocationType", data: [] } },
        { field: 'locationStatus', title: '货位状态', type: 'int', width: 110, align: 'left', bind: { key: "LocationState", data: [] } },
        { field: 'enalbeStatus', title: '是否禁用', type: 'int', width: 75, align: 'left', bind: { key: "EnalbeStatus", data: [] }}, 
        // { field: 'isLocked', title: '是否锁定', type: 'bool', width: 110, align: 'left', bind: { key: "IsLocked", data: [] } },
        { field: 'locationDesc', title: '货位描述', type: 'string', width: 110, align: 'left', hidden: true },
        { field: 'remark', title: '检测柜允许', type: 'string', width: 110, align: 'left' ,bind: { key: "AllowStatus", data: [] }},
        { field: 'creater', title: '创建人', type: 'string', sort: true, width: 110, align: 'left' },
        { field: 'createDate', title: '创建时间', type: 'datetime', sort: true, width: 150, align: 'left', sort: true },
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.441.19478/CodeChunks.db
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.441.19478/CodeChunks.db-shm
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.441.19478/CodeChunks.db-wal
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.441.19478/SemanticSymbols.db
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.441.19478/SemanticSymbols.db-wal
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json
@@ -7,16 +7,8 @@
      "RelativeMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|solutionrelative:widesea_storagetaskservices\\task\\dt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{986CA639-B3B4-4D4F-B12B-3D8FBA48B2B1}|WIDESEA_IStorageTaskService\\WIDESEA_IStorageTaskServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_istoragetaskservice\\task\\idt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{986CA639-B3B4-4D4F-B12B-3D8FBA48B2B1}|WIDESEA_IStorageTaskService\\WIDESEA_IStorageTaskServices.csproj|solutionrelative:widesea_istoragetaskservice\\task\\idt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -26,47 +18,8 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 3,
          "SelectedChildIndex": 0,
          "Children": [
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "IDt_TaskService.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
              "RelativeToolTip": "WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
              "ViewState": "AgIAAAEAAAAAAAAAAAAUwBMAAAAmAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-24T09:29:59.707Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "appsettings.json",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\appsettings.json",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
              "RelativeToolTip": "WIDESEA_WMSServer\\appsettings.json",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwwAAABEAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
              "WhenOpened": "2025-09-24T09:23:47.789Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "Program.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Program.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Program.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Program.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Program.cs",
              "ViewState": "AgIAAF0AAAAAAAAAAAAAAH0AAAAJAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-24T08:56:28.562Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
@@ -75,9 +28,22 @@
              "RelativeDocumentMoniker": "WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
              "RelativeToolTip": "WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
              "ViewState": "AgIAANMAAAAAAAAAAAAAAOgAAAAdAAAAAAAAAA==",
              "ViewState": "AgIAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-24T08:36:32.274Z",
              "WhenOpened": "2025-09-25T03:08:03.698Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "appsettings.json",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\appsettings.json",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
              "RelativeToolTip": "WIDESEA_WMSServer\\appsettings.json",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAABcAAAAUAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
              "WhenOpened": "2025-09-24T09:23:47.789Z",
              "EditorCaption": ""
            }
          ]
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json
@@ -3,6 +3,10 @@
  "WorkspaceRootPath": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_storagetaskservices\\task\\dt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|solutionrelative:widesea_storagetaskservices\\task\\dt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|e:\\get\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
    }
@@ -19,12 +23,25 @@
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "Dt_TaskService.cs",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
              "RelativeToolTip": "WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
              "ViewState": "AgIAAHQBAAAAAAAAAAAmwG4BAAAXAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-09-25T03:08:03.698Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "appsettings.json",
              "DocumentMoniker": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\appsettings.json",
              "ToolTip": "E:\\GET\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
              "RelativeToolTip": "WIDESEA_WMSServer\\appsettings.json",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAABcAAAAUAAAAAAAAAA==",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAEAAAAOAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
              "WhenOpened": "2025-09-24T09:23:47.789Z",
              "EditorCaption": ""