1
HuBingJie
2025-11-13 d58196721475e968769d708d9c14f60dd8d5671f
1
已删除1个文件
已添加4个文件
已修改37个文件
29819 ■■■■ 文件已修改
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.794.21998/CodeChunks.db 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.794.21998/CodeChunks.db-shm 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.794.21998/CodeChunks.db-wal 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.794.21998/SemanticSymbols.db 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.794.21998/SemanticSymbols.db-shm 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.794.21998/SemanticSymbols.db-wal 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 174 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/package-lock.json 13937 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/pnpm-lock.yaml 13217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue 120 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/vue.config.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.794.21998/CodeChunks.db 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.794.21998/CodeChunks.db-shm 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.794.21998/CodeChunks.db-wal 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.794.21998/SemanticSymbols.db 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.794.21998/SemanticSymbols.db-shm 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.794.21998/SemanticSymbols.db-wal 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json 238 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json 226 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_Core/Const/ConfigConst.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpHelper.cs 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_DTO/ToMes/AllocationTaskReceived.cs 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_DTO/ToMes/RelocationTaskMes.cs 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Allocation.cs 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 226 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs 497 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ToMes.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.794.21998/CodeChunks.db
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.794.21998/CodeChunks.db-shm
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.794.21998/CodeChunks.db-wal
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.794.21998/SemanticSymbols.db
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.794.21998/SemanticSymbols.db-shm
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.794.21998/SemanticSymbols.db-wal
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json
@@ -3,16 +3,16 @@
  "WorkspaceRootPath": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\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|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\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:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\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:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\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}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\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}"
    }
  ],
  "DocumentGroupContainers": [
@@ -22,7 +22,7 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 3,
          "SelectedChildIndex": 5,
          "Children": [
            {
              "$type": "Bookmark",
@@ -38,41 +38,41 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "CommonConveyorLineJob.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ViewState": "AgIAAHMAAAAAAAAAAAAnwKYAAABnAAAAAAAAAA==",
              "DocumentIndex": 1,
              "Title": "TaskService.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAC4BAAAAAAAAAAAEwD4BAAAIAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-06T08:50:46.677Z",
              "WhenOpened": "2025-11-13T07:42:51.303Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "Dt_Task.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ViewState": "AgIAALIAAAAAAAAAAAAAAMQAAAAQAAAAAAAAAA==",
              "Title": "CommonConveyorLineJob.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ViewState": "AgIAAGMAAAAAAAAAAAAQwH0AAAAhAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-06T08:26:43.922Z",
              "WhenOpened": "2025-11-13T03:47:39.733Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "DocumentIndex": 0,
              "Title": "CommonStackerCraneJob.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ViewState": "AgIAADIAAAAAAAAAAAAvwEoAAAAYAAAAAAAAAA==",
              "ViewState": "AgIAAEQBAAAAAAAAAAAMwFcBAAAqAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-06T08:17:18.56Z",
              "WhenOpened": "2025-11-13T02:38:04.697Z",
              "EditorCaption": ""
            }
          ]
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
@@ -3,16 +3,16 @@
  "WorkspaceRootPath": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\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}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\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|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\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:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\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}"
    }
  ],
  "DocumentGroupContainers": [
@@ -39,40 +39,40 @@
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "CommonConveyorLineJob.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ViewState": "AgIAAHMAAAAAAAAAAAAnwKIAAAAqAAAAAAAAAA==",
              "Title": "TaskService.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAEYDAAAAAAAAAAAMwEwDAAAXAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-06T08:50:46.677Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "Dt_Task.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
              "ViewState": "AgIAALIAAAAAAAAAAAAAAMQAAAAQAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-06T08:26:43.922Z",
              "WhenOpened": "2025-11-13T07:42:51.303Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "CommonConveyorLineJob.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ViewState": "AgIAAJwAAAAAAAAAAAAQwKAAAABHAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-13T03:47:39.733Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "CommonStackerCraneJob.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
              "ViewState": "AgIAADIAAAAAAAAAAAAvwEoAAAAYAAAAAAAAAA==",
              "ViewState": "AgIAAEQBAAAAAAAAAAAMwFcBAAAqAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-06T08:17:18.56Z",
              "WhenOpened": "2025-11-13T02:38:04.697Z",
              "EditorCaption": ""
            }
          ]
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -133,6 +133,9 @@
        /// <returns>返回任务实体对象集合,可能为null</returns>
        List<Dt_Task> QueryStackerCraneOutTasks(string deviceNo);
        List<Dt_Task> QueryStackerCraneYKTasks(string deviceNo);
        /// <summary>
        /// æ›´æ–°ä»»åŠ¡ä¿¡æ¯åŠæ·»åŠ ä»»åŠ¡æ˜Žç»†è®°å½•
@@ -195,7 +198,7 @@
        /// </summary>
        /// <param name="taskNum">任务编号</param>
        /// <returns>返回处理结果</returns>
        WebResponseContent StackCraneTaskCompleted(int taskNum);
        bool StackCraneTaskCompleted(int taskNum);
        /// <summary>
        /// ä»»åŠ¡å®Œæˆ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -407,7 +407,9 @@
                    //int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    task.TaskState = (int)TaskOutStatusEnum.SC_OutExecuting;
                    task.Dispatchertime = DateTime.Now;
                }
                else if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)
@@ -497,7 +499,7 @@
        /// </summary>
        /// <param name="taskNum">任务编号</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent StackCraneTaskCompleted(int taskNum)
        /*public WebResponseContent StackCraneTaskCompleted(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
@@ -509,44 +511,31 @@
                {
                    task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.UpdateData(task);
                    content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}");
                    Console.WriteLine("任务完成,wms反馈信息:"+content.Message);
                    //BaseDal.DeleteData(task);
                    // _task_HtyService.AddTaskHty(task); éœ€è¦æ·»åŠ ç§»å…¥åŽ†å²
                    //_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"出库完成");
                }
                else if (task.TaskType == (int)TaskInboundTypeEnum.Inbound && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                {
                    task.TaskState = (int)TaskInStatusEnum.InFinish;
                    BaseDal.UpdateData(task);
                    content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}");
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.DeleteData(task);
                    // _task_HtyService.AddTaskHty(task); éœ€è¦æ·»åŠ ç§»å…¥åŽ†å²
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"入库完成");
                }
                else if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation)
                {
                    task.TaskState = (int)TaskRelocationStatusEnum.SC_RelocationFinish;
                    BaseDal.UpdateData(task);
                    content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}");
                    task.ModifyDate = DateTime.Now;
                    BaseDal.DeleteData(task);
                   // _task_HtyService.AddTaskHty(task); éœ€è¦æ·»åŠ ç§»å…¥åŽ†å²
                    BaseDal.UpdateData(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"移库完成");
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
                {
                    BaseDal.DeleteData(task);
                    content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}");
                   // _task_HtyService.AddTaskHty(task); éœ€è¦æ·»åŠ ç§»å…¥åŽ†å²
                }
                else
                {
@@ -559,6 +548,145 @@
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】,原因:{ex.Message}");
            }
            return content;
        }*/
        public bool StackCraneTaskCompleted(int taskNum)
        {
            bool res;
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return false;
                // éªŒè¯ä»»åŠ¡çŠ¶æ€æ˜¯å¦å…è®¸å®Œæˆ
                if (!IsTaskStateValidForCompletion(task))return false;
                // æ ¹æ®ä»»åŠ¡ç±»åž‹å¤„ç†
                 res = ProcessTaskCompletion(task);
            }
            catch (Exception ex)
            {
                res = false;
            }
            return res;
        }
        /// <summary>
        /// éªŒè¯ä»»åŠ¡çŠ¶æ€æ˜¯å¦å…è®¸å®Œæˆ
        /// </summary>
        private bool IsTaskStateValidForCompletion(Dt_Task task)
        {
            return task.TaskType switch
            {
                (int)TaskOutboundTypeEnum.Outbound => task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting,
                (int)TaskInboundTypeEnum.Inbound => task.TaskState == (int)TaskInStatusEnum.SC_InExecuting,
                (int)TaskRelocationTypeEnum.Relocation => true, // ç§»åº“任务没有特定状态要求
                _ => false
            };
        }
        /// <summary>
        /// å¤„理任务完成逻辑
        /// </summary>
        private bool ProcessTaskCompletion(Dt_Task task)
        {
            // æ›´æ–°ä»»åŠ¡åŸºç¡€ä¿¡æ¯
            UpdateTaskBaseInfo(task);
            bool result = task.TaskType switch
            {
                (int)TaskOutboundTypeEnum.Outbound => ProcessOutboundTask(task),
                (int)TaskInboundTypeEnum.Inbound => ProcessInboundTask(task),
                (int)TaskRelocationTypeEnum.Relocation => ProcessRelocationTask(task),
                _ => throw new Exception($"未知的任务类型:【{task.TaskType}】")
            };
            // é€šçŸ¥ä»»åŠ¡å®Œæˆ
            if (result == true)
            {
                NotifyTaskCompleted(task.TaskNum);
            }
            return result;
        }
        /// <summary>
        /// æ›´æ–°ä»»åŠ¡åŸºç¡€ä¿¡æ¯
        /// </summary>
        private void UpdateTaskBaseInfo(Dt_Task task)
        {
            task.ModifyDate = DateTime.Now;
            task.Modifier = "System";
        }
        /// <summary>
        /// å¤„理出库任务
        /// </summary>
        private bool ProcessOutboundTask(Dt_Task task)
        {
            task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish;
            bool res = BaseDal.UpdateData(task);
            return res;
        }
        /// <summary>
        /// å¤„理入库任务
        /// </summary>
        private bool ProcessInboundTask(Dt_Task task)
        {
            task.TaskState = (int)TaskInStatusEnum.InFinish;
            BaseDal.UpdateData(task);
            // æ·»åŠ å…¥åº“åŽ†å²è®°å½•
            // _task_HtyService.AddTaskHty(task);
            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "入库完成");
            // å…¥åº“完成后删除任务
            bool res = BaseDal.DeleteData(task);
            return res;
        }
        /// <summary>
        /// å¤„理移库任务
        /// </summary>
        private bool ProcessRelocationTask(Dt_Task task)
        {
            task.TaskState = (int)TaskRelocationStatusEnum.SC_RelocationFinish;
            BaseDal.UpdateData(task);
            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "移库完成");
            // ç§»åº“完成后删除任务
            bool res = BaseDal.DeleteData(task);
            // _task_HtyService.AddTaskHty(task);
            return res;
        }
        /// <summary>
        /// é€šçŸ¥ä»»åŠ¡å®Œæˆ
        /// </summary>
        private void NotifyTaskCompleted(int taskNum)
        {
            try
            {
                var response = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={taskNum}");
                if (!response.Status)
                {
                    // è®°å½•通知失败日志,但不影响主流程
                     //_logger.Warn($"任务完成通知失败,任务号:【{taskNum}】,响应:【{response.Message}】");
                }
            }
            catch (Exception ex)
            {
                // è®°å½•异常日志,但不影响主流程
                // _logger.Error($"任务完成通知异常,任务号:【{taskNum}】", ex);
            }
        }
        /// <summary>
@@ -721,7 +849,13 @@
        public Dt_Task GetOutTaskInfo2(string PalletCode)
        {
            return BaseDal.QueryFirst(x => x.PalletCode == PalletCode && x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting, TaskOrderBy);
            return BaseDal.QueryFirst(x => x.PalletCode == PalletCode && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish, TaskOrderBy);
        }
        public List<Dt_Task> QueryStackerCraneYKTasks(string deviceNo)
        {
            return BaseDal.QueryData(x => x.Roadway == deviceNo && x.TaskType == (int)TaskRelocationTypeEnum.Relocation && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew, TaskOrderBy);
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -51,38 +51,38 @@
            if (flag && value != null)
            {
                OtherDevice device = (OtherDevice)value;
                List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).Distinct().ToList();
                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
                List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).Distinct().ToList();//获取设备下的站台
                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode); //获取设备下的站台
                try
                {
                    foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
                    foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode))) //循环设备下的站台
                    {
                        DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); //读取
                        DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); //输送线读取的全部协议
                        DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(W_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); //写入
                        DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(W_ConveyorLineDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); //输送线写入的全部协议
                        if (deviceProRead != null && deviceProWrite != null) //读取写入
                        if (deviceProRead != null && deviceProWrite != null) //读取写入的协议判断是否为null
                        {
                            R_ConveyorLineInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineInfo>(deviceProRead.DeviceProAddress);
                            R_ConveyorLineInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineInfo>(deviceProRead.DeviceProAddress); //读取协议
                            W_ConveyorLineInfo conveyorLineInfoWrite = device.Communicator.ReadCustomer<W_ConveyorLineInfo>(deviceProWrite.DeviceProAddress);
                            W_ConveyorLineInfo conveyorLineInfoWrite = device.Communicator.ReadCustomer<W_ConveyorLineInfo>(deviceProWrite.DeviceProAddress); //写入协议
                            if (conveyorLineInfoRead == null || conveyorLineInfoWrite == null)
                            {
                                continue;
                            }
                            R_ConveyorLineStatus conveyorLineStatus = conveyorLineInfoRead.Status.ByteToBoolObject<R_ConveyorLineStatus>();
                            R_ConveyorLineStatus conveyorLineStatus = conveyorLineInfoRead.Status.ByteToBoolObject<R_ConveyorLineStatus>(); //获取设备状态
                            ConveyorLineSignal conveyorLineSignalRead = conveyorLineInfoRead.Signal.ByteToBoolObject<ConveyorLineSignal>();
                            bool ACK = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.ACK, item.StationCode);
                            ConveyorLineSignal conveyorLineSignalRead = conveyorLineInfoRead.Signal.ByteToBoolObject<ConveyorLineSignal>(); //获取设备信号
                            bool ACK = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.ACK, item.StationCode); //获取ACK确认信息
                            bool STB = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.STB, item.StationCode);
                            bool STB = device.GetValue<W_ConveyorLineDB, bool>(W_ConveyorLineDB.STB, item.StationCode); //获取STB请求信息
                            //ConveyorLineSignal conveyorLineSignalWrite = conveyorLineInfoWrite.Signal.ByteToBoolObject<ConveyorLineSignal>();
                            //出库站台
                            if (item.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt())
                            if (item.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt())  //2007交互口进入
                            {
                                // å‡ºåº“
                                if (conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//出库
                                if (conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//2楼出库
                                {
                                    if (!string.IsNullOrEmpty(conveyorLineInfoRead.Barcode))
                                    {
@@ -90,9 +90,9 @@
                                        Dt_Task dt_Ta = _taskService.GetOutTaskInfo2(conveyorLineInfoRead.Barcode);
                                        if (dt_Ta != null)
                                        {
                                            device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
                                            device.SetValue(W_ConveyorLineDB.EndPos, dt_Ta.OutboundPlatform, item.StationCode);
                                            device.SetValue(W_ConveyorLineDB.TaskNo, dt_Ta.TaskNum, item.StationCode);
                                            device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
                                            //删除任务
                                            _taskRepository.DeleteData(dt_Ta);
@@ -107,12 +107,12 @@
                            //出入库站台
                            else if (item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt())
                            {
                                //入库生成堆垛机入库任务
                                //输送线完成修改成输送线完成状态待堆垛机执行任务
                                if (conveyorLineSignalRead.STB && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !ACK)
                                {
                                    if (!string.IsNullOrEmpty(conveyorLineInfoRead.Barcode))//采购入库
                                    if (!string.IsNullOrEmpty(conveyorLineInfoRead.Barcode))
                                    {
                                        WebResponseContent contentweb = _taskService.UpdateTaskIninfo(conveyorLineInfoRead.Barcode,item.StationCode);
                                        WebResponseContent contentweb = _taskService.UpdateTaskIninfo(conveyorLineInfoRead.Barcode,item.StationCode); //根据条码跟设备编号去查询并修改任务
                                        if (contentweb.Status)
                                        {
                                            device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
@@ -155,12 +155,13 @@
                                        }
                                    }
                                }*/
                                else if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//出库
                                else if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//其他楼层出库
                                {
                                    
                                    Dt_Task dt_Ta = _taskService.GetOutTaskInfo(item.StationCode);
                                    Dt_Task dt_Ta = _taskService.GetOutTaskInfo(item.StationCode);  //获取出库任务
                                    if (dt_Ta != null)
                                    {.1111
                                    {
                                        device.SetValue(W_ConveyorLineDB.TaskNo, dt_Ta.TaskNum, item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.EndPos, dt_Ta.OutboundPlatform, item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.STB, true, item.StationCode);
@@ -180,20 +181,19 @@
                                else if (!conveyorLineSignalRead.STB && conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && STB && !ACK)
                                {
                                    device.SetValue(W_ConveyorLineDB.STB, false, item.StationCode);
                                }
                                }//清楚确认信号
                            }
                            //入库站台
                            else if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt())
                            else if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt()) //2014交互口
                            {
                                if (conveyorLineSignalRead.STB && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !ACK)
                                {
                                    if (conveyorLineInfoRead.TaskNo == 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.Barcode))//采购入库
                                    {
                                        Dt_Task dt_Ta = _taskService.GetTaskIninfo(conveyorLineInfoRead.Barcode);
                                        Dt_Task dt_Ta = _taskService.GetTaskIninfo(conveyorLineInfoRead.Barcode); //通过条码去查询任务
                                        if(dt_Ta != null)
                                        {
                                            device.SetValue(W_ConveyorLineDB.EndPos, dt_Ta.SourceAddress, item.StationCode);
                                            device.SetValue(W_ConveyorLineDB.TaskNo, dt_Ta.TaskNum, item.StationCode);
                                            device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -45,6 +45,7 @@
        private readonly ICacheService _cacheService; private readonly IRepository<Dt_Router> _routerRepository;
        private readonly IRepository<Dt_StationManger> _stationMangerRepository;
        private readonly IRepository<Dt_Task> _taskRepository;
        //bool SCres = false;
        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, ICacheService cacheService, IRepository<Dt_Router> routerRepository, IRepository<Dt_StationManger> stationMangerRepository, IRepository<Dt_Task> taskRepository)
        {
@@ -57,22 +58,86 @@
        }
        public Task Execute(IJobExecutionContext context)
         {
             try
             {
                 SpeStackerCrane speStackerCrane = (SpeStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                 if (speStackerCrane != null)
                 {
                     GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
                     if (!getStackerObject.IsEventSubscribed)
                     {
                         getStackerObject.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;
                     }
                     getStackerObject.CheckStackerCraneTaskCompleted();
                     if (getStackerObject.StackerCraneStatusValue == StackerCraneStatus.Normal)
                     {
                         //var a = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum);
                         Dt_Task? task = GetTasks(speStackerCrane);
                         if (task != null)
                         {
                             WriteInfo("查找堆垛机任务号", $"任务信息,任务号:{task.TaskNum},堆垛机编号{speStackerCrane.DeviceCode}");
                             bool sendFlag = true;
                             if (sendFlag)
                             {
                                 StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); //转换为堆垛机任务
                                 if (stackerCraneTaskCommand != null)
                                 {
                                     sendFlag = getStackerObject.SendCommand(stackerCraneTaskCommand); //发送堆垛机任务
                                     if (sendFlag)
                                     {
                                         speStackerCrane.SetValue(StackerCraneDBName.CommandSend, 1);//启动命令
                                         speStackerCrane.LastTaskType = task.TaskType;
                                         task.Dispatchertime = DateTime.Now;
                                         task.ExceptionMessage = "";
                                         WebResponseContent webResponseContent = _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                         //延时1s
                                         Thread.Sleep(1000);
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
             catch (Exception)
             {
                 throw;
             }
             return Task.CompletedTask;
         }
        /*
        // æ·»åŠ äº‹ä»¶è®¢é˜…çŠ¶æ€æ ‡è®°
        private static readonly Dictionary<string, bool> _eventSubscribedMap = new Dictionary<string, bool>();
        private static readonly object _lockObject = new object();
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                SpeStackerCrane speStackerCrane = (SpeStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                if (speStackerCrane != null)
                {
                    GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
                    if (!getStackerObject.IsEventSubscribed)
                    // ä½¿ç”¨é”ç¡®ä¿çº¿ç¨‹å®‰å…¨çš„事件订阅
                    lock (_lockObject)
                    {
                        getStackerObject.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;
                        string deviceKey = speStackerCrane.DeviceCode;
                        if (!_eventSubscribedMap.ContainsKey(deviceKey) || !_eventSubscribedMap[deviceKey])
                        {
                            getStackerObject.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;
                            _eventSubscribedMap[deviceKey] = true;
                        }
                    }
                    getStackerObject.CheckStackerCraneTaskCompleted();
                    if (getStackerObject.StackerCraneStatusValue == StackerCraneStatus.Normal)
                    {
                        var a = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum);
                        Dt_Task? task = GetTasks(speStackerCrane);
                        if (task != null)
                        {
@@ -80,16 +145,17 @@
                            bool sendFlag = true;
                            if (sendFlag)
                            {
                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); //转换为堆垛机任务
                                if (stackerCraneTaskCommand != null)
                                {
                                    sendFlag = getStackerObject.SendCommand(stackerCraneTaskCommand);
                                    sendFlag = getStackerObject.SendCommand(stackerCraneTaskCommand); //发送堆垛机任务
                                    if (sendFlag)
                                    {
                                        speStackerCrane.SetValue(StackerCraneDBName.CommandSend, 1);//启动命令
                                        speStackerCrane.LastTaskType = task.TaskType;
                                        task.Dispatchertime = DateTime.Now;
                                        task.ExceptionMessage = "";
                                        WebResponseContent webResponseContent = _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                        //延时1s
                                        Thread.Sleep(1000);
@@ -100,14 +166,41 @@
                    }
                }
            }
            catch (Exception)
            catch (Exception ex)
            {
                WriteError("堆垛机任务执行异常", ex.Message);
                throw;
            }
            return Task.CompletedTask;
        }
        private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, StackerCraneTaskCompletedEventArgs e)
        {
            SpeStackerCrane? speStackerCrane = sender as SpeStackerCrane;
            if (speStackerCrane != null)
            {
                // ä½¿ç”¨é”ç¡®ä¿åŒä¸€ä»»åŠ¡ä¸ä¼šè¢«å¹¶å‘å¤„ç†
                lock (_lockObject)
                {
                    if (speStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                    {
                        var currentTaskNum = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum);
                        WriteInfo("堆垛机任务完成", $"PLC任务号:{currentTaskNum}, ç³»ç»Ÿä»»åŠ¡å·:{e.TaskNum}, æ—¶é—´:{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}");
                        _taskService.StackCraneTaskCompleted(e.TaskNum);
                        WriteInfo("堆垛机任务完成反馈任务号", $"任务信息,任务号:{e.TaskNum}");
                        speStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                        WriteInfo("堆垛机任务状态更新", $"任务{e.TaskNum}完成状态已设置");
                    }
                    else
                    {
                        WriteInfo("堆垛机任务重复完成事件", $"任务号:{e.TaskNum} å·²è¢«å¤„理,忽略重复事件");
                    }
                }
            }
        }
        */
        private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, StackerCraneTaskCompletedEventArgs e)
        {
@@ -118,13 +211,19 @@
                {
                    var TaskNum = speStackerCrane.GetValue<StackerCraneDBName, Int32>(StackerCraneDBName.CurrentTaskNum);
                    WriteInfo("堆垛机任务完成", $"任务号:{TaskNum}");
                    _taskService.StackCraneTaskCompleted(e.TaskNum);
                   bool res =  _taskService.StackCraneTaskCompleted(e.TaskNum);
                    if(res == true)
                    {
                        speStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                    }
                    WriteInfo("堆垛机任务完成反馈任务号", $"任务信息,任务号:{e.TaskNum}");
                    speStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                    return;
                    //SCres=true;
                }
            }
        }
        /// <summary>
        /// èŽ·å–ä»»åŠ¡
        /// </summary>
@@ -141,6 +240,9 @@
            }
            task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);         //获取入库任务
            List<Dt_Task> YKtasks = _taskService.QueryStackerCraneYKTasks(commonStackerCrane.DeviceCode);
            if (task != null)
            {
                if(task.Roadway=="SC02") return task;    //如果有任务则直接下发给堆垛机
@@ -149,6 +251,25 @@
                Dt_Task dt_Task = _taskService.RequestWMSTaskMovelibrary(task);
                if (dt_Task != null) return dt_Task;
            }
            else if (YKtasks.Count > 0)
            {
                foreach (var item in YKtasks)
                {
                        if (item.Roadway == "SC01")
                        {
                            if (item.Depth == 1) return item;
                            //调取WMS接口进行判断是否需要进行移库
                            Dt_Task dt_Task = OutTaskMovelibrary(item);
                            if (dt_Task != null) return dt_Task;
                        else
                        {
                            return item;
                        }
                    }
                }
            }
            else
            {
@@ -174,6 +295,7 @@
                }
            }
            return task;
        }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs
@@ -129,6 +129,11 @@
        /// æ•…障代码
        /// </summary>
        Err_Status,
        /// <summary>
        /// å †åž›æœºæ”¾è´§å®ŒæˆçŠ¶æ€
        /// </summary>
        StackerCraneWorkStatus
        #endregion
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/package-lock.json
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/pnpm-lock.yaml
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/stock/stockInfo.vue
@@ -27,92 +27,80 @@
        sortName: "id",
      });
      const editFormFields = ref({
        deviceCode: "",
        deviceName: "",
        deviceType: "",
        deviceStatus: "",
        deviceIp: "",
        devicePort: "",
        devicePlcType: "",
        deviceRemark: "",
        palletCode: "",
        palletType: "",
        locationCode: "",
        warehouseId: "",
        stockStatus: "",
        mesSubPalletCode: "",
        remark: "",
      });
      const editFormOptions = ref([
        [
        { title: "托盘编号", field: "palletCode" },
        {
          title: "物料类型",
          field: "materialType",
          type: "select",
          dataKey: "InventoryMaterialType",
          data: [],
        },
          { title: "货位编号", field: "locationCode" },
          {
          title: "库存状态",
          field: "stockStatus",
          type: "select",
          dataKey: "stockStatusEmun",
          data: [],
        },
        { title: "货位编号", field: "locationCode" },
        ],
        [
        { title: "重量", field: "materialweight" },
        {
          title: "物料状态",
          field: "wlstatus",
          title: "托盘类型",
          field: "palletType",
          type: "select",
          dataKey: "InventoryMaterialStatus",
          data: []
          dataKey: "InventoryMaterialType",
          data: [],
        },
        { title: "仓库主键", field: "warehouseId", type: "int" },
        { title: "子托盘编号", field: "mesSubPalletCode" },
        ],
        [
        {
          title: "备注", field: "Remark"
          title: "备注", field: "remark"
        }
        ],
      ]);
      const searchFormFields = ref({
        deviceCode: "",
        deviceType: "",
        deviceStatus: "",
        palletCode: "",
        locationCode: "",
        stockStatus: "",
        warehouseId: "",
        palletType: "",
        mesSubPalletCode: "",
        creater: "",
        createDate: "",
      });
      const searchFormOptions = ref([
        [
          { title: "托盘编号",
            field: "palletCode",
            type: "like",
        },
          { title: "托盘编号", field: "palletCode", type: "like" },
          {
          title: "物料类型",
          field: "materialType",
          type: "select",
          dataKey: "InventoryMaterialType",
          data: [],
        },
          { title: "货位编号", field: "locationCode",type: "like", },
            title: "库存状态",
            field: "stockStatus",
            type: "selectList",
            dataKey: "stockStatusEmun",
            data: [],
          },
          { title: "货位编号", field: "locationCode", type: "like" },
          { title: "库存编号", field: "id", type: "like" },
        ],
        [
        {
          title: "库存状态",
          field: "stockStatus",
          type: "selectList",
          dataKey: "stockStatusEmun",
          data: [],
        },
        {
          title: "物料状态",
          field: "wlstatus",
          type: "selectList",
          dataKey: "InventoryMaterialStatus",
          data: [],
        },
        { title: "库存编号",
            field: "id",
            type: "like",
        },
          {
            title: "托盘类型",
            field: "palletType",
            type: "selectList",
            dataKey: "InventoryMaterialType",
            data: [],
          },
          { title: "仓库主键", field: "warehouseId", type: "int" },
          { title: "子托盘编号", field: "mesSubPalletCode", type: "like" },
        ],
        [
        { title: "创建时间", field: "createDate", type: "datetime" },
        { title: "生产时间", field: "mgeneratetime", type: "datetime" },
          { title: "创建人", field: "creater", type: "like" },
          { title: "创建时间", field: "createDate", type: "datetime" },
        ]
      ]);
      const columns = ref([
@@ -129,11 +117,10 @@
        {
          field: "id",
          title: "库存编号",
          type: "string",
          type: "int",
          width: 90,
          align: "left",
          DisplayType:"link",
          DisplayType: "link",
        },
        {
          field: "palletCode",
@@ -144,12 +131,11 @@
          //sort:true,
        },
        {
          field: "materialType",
          title: "物料类型",
          type: "string",
          width: 150,
          field: "palletType",
          title: "托盘类型",
          type: "int",
          width: 100,
          align: "left",
          //sort:true,
          bind: { key: "InventoryMaterialType", data: [] },
        },
        {
@@ -161,47 +147,37 @@
          //sort:true,
        },
        {
          field: "wlstatus",
          title: "物料状态",
          type: "string",
          width: 150,
          field: "warehouseId",
          title: "仓库主键",
          type: "int",
          width: 100,
          align: "left",
         // sort:true,
          bind: { key: "InventoryMaterialStatus", data: [] },
        },{
          field: "mgeneratetime",
          title: "生产时间",
          type: "datetime",
          width: 160,
          align: "left",
         // sort:true,
        },
        {
          field: "isFull",
          title: "是否满盘",
          type: "string",
          width: 150,
          align: "left",
         // sort:true,
          bind: { key: "yesno", data: [] },
          hidden: true,
        },
        {
          field: "stockStatus",
          title: "库存状态",
          type: "string",
          type: "int",
          width: 150,
          align: "left",
         // sort:true,
          bind: { key: "stockStatusEmun", data: [] },
        },
        {
          field: "materialweight",
          title: "重量(数量)",
          field: "mesSubPalletCode",
          title: "子托盘编号",
          type: "string",
          width: 150,
          width: 120,
          align: "left",
        //  sort:true,
        },{
        },
        {
          field: "details",
          title: "库存明细",
          type: "string",
          width: 100,
          align: "left",
          hidden: true,
        },
        {
          field: "remark",
          title: "备注",
          type: "string",
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue
@@ -38,6 +38,9 @@
      targetAddress: "",
      currentAddress: "",
      nextAddress: "",
      orderNo: "",
      grade: "",
      warehouseId: "",
      creater: "",
      createDate: "",
    });
@@ -68,6 +71,11 @@
      ],
      [
        { title: "巷道号", field: "roadway", type: "like" },
        { title: "单据编号", field: "orderNo", type: "like" },
        { title: "优先级", field: "grade", type: "int" },
        { title: "仓库主键", field: "warehouseId", type: "int" },
      ],
      [
        { title: "创建人", field: "creater", type: "like" },
        { title: "创建时间", field: "createDate", type: "datetime" },
      ],
@@ -123,7 +131,7 @@
      {
        field: "sourceAddress",
        title: "起始地址",
        type: "int",
        type: "string",
        width: 120,
        align: "left",
      },
@@ -176,7 +184,60 @@
        type: "datetime",
        width: 150,
        align: "left",
        hidden:true,
        hidden: true,
      },
      {
        field: "orderNo",
        title: "单据编号",
        type: "string",
        width: 120,
        align: "left",
      },
      {
        field: "warehouseId",
        title: "仓库主键",
        type: "int",
        width: 100,
        align: "left",
        hidden: true,
      },
      {
        field: "palletType",
        title: "托盘类型",
        type: "int",
        width: 100,
        align: "left",
      },
      {
        field: "mesTaskId",
        title: "MES任务ID",
        type: "string",
        width: 120,
        align: "left",
        hidden: true,
      },
      {
        field: "mesBusinessId",
        title: "MES业务流ID",
        type: "string",
        width: 120,
        align: "left",
        hidden: true,
      },
      {
        field: "mesSubPalletCode",
        title: "子托盘编号",
        type: "string",
        width: 120,
        align: "left",
        hidden: true,
      },
      {
        field: "outboundPlatform",
        title: "出库口",
        type: "string",
        width: 100,
        align: "left",
      },
      {
        field: "wMSId",
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue
@@ -38,9 +38,13 @@
      targetAddress: "",
      currentAddress: "",
      nextAddress: "",
      orderNo: "",
      grade: "",
      warehouseId: "",
      operateType: "",
      creater: "",
      createDate: "",
      materialType:""
      materialType: ""
    });
    const searchFormOptions = ref([
      [
@@ -69,11 +73,15 @@
      ],
      [
        { title: "巷道号", field: "roadway", type: "like" },
        { title: "创建人", field: "creater", type: "like" },
        { title: "创建时间", field: "createDate", type: "datetime" },
        { title: "单据编号", field: "orderNo", type: "like" },
        { title: "优先级", field: "grade", type: "int" },
        { title: "仓库主键", field: "warehouseId", type: "int" },
      ],
      [
      {
        { title: "操作类型", field: "operateType", type: "like" },
        { title: "创建人", field: "creater", type: "like" },
        { title: "创建时间", field: "createDate", type: "datetime" },
        {
          title: "物料类型",
          field: "materialType",
          type: "selectList",
@@ -106,7 +114,7 @@
        type: "string",
        width: 200,
        align: "left",
        sort:true,
        sort: true,
      },
      {
        field: "roadway",
@@ -114,7 +122,7 @@
        type: "string",
        width: 90,
        align: "left",
        sort:true,
        sort: true,
      },
      {
        field: "taskType",
@@ -123,7 +131,7 @@
        width: 90,
        align: "left",
        bind: { key: "taskTypeEnum", data: [] },
        sort:true,
        sort: true,
      },
      {
        field: "taskStatus",
@@ -132,19 +140,20 @@
        width: 150,
        align: "left",
        bind: { key: "taskStatusEnum", data: [] },
        sort:true,
      },{
          field: "materialType",
          title: "物料类型",
          type: "string",
          width: 100,
          align: "left",
          bind: { key: "InventoryMaterialType", data: [] },
        },
        sort: true,
      },
      {
        field: "materialType",
        title: "物料类型",
        type: "string",
        width: 100,
        align: "left",
        bind: { key: "InventoryMaterialType", data: [] },
      },
      {
        field: "sourceAddress",
        title: "起始地址",
        type: "int",
        type: "string",
        width: 120,
        align: "left",
      },
@@ -190,7 +199,76 @@
        type: "datetime",
        width: 150,
        align: "left",
        sort:true,
        sort: true,
      },
      {
        field: "orderNo",
        title: "单据编号",
        type: "string",
        width: 120,
        align: "left",
      },
      {
        field: "warehouseId",
        title: "仓库主键",
        type: "int",
        width: 100,
        align: "left",
        hidden: true,
      },
      {
        field: "palletType",
        title: "托盘类型",
        type: "int",
        width: 100,
        align: "left",
      },
      {
        field: "mesTaskId",
        title: "MES任务ID",
        type: "string",
        width: 120,
        align: "left",
        hidden: true,
      },
      {
        field: "mesBusinessId",
        title: "MES业务流ID",
        type: "string",
        width: 120,
        align: "left",
        hidden: true,
      },
      {
        field: "mesSubPalletCode",
        title: "子托盘编号",
        type: "string",
        width: 120,
        align: "left",
        hidden: true,
      },
      {
        field: "outboundPlatform",
        title: "出库口",
        type: "string",
        width: 100,
        align: "left",
      },
      {
        field: "sourceId",
        title: "原表主键",
        type: "int",
        width: 100,
        align: "left",
        hidden: true,
      },
      {
        field: "insertTime",
        title: "移入历史时间",
        type: "datetime",
        width: 150,
        align: "left",
        sort: true,
      },
      {
        field: "wMSId",
@@ -213,7 +291,7 @@
        type: "datetime",
        width: 150,
        align: "left",
        sort:true,
        sort: true,
      },
      {
        field: "modifier",
@@ -228,11 +306,11 @@
        type: "datetime",
        width: 160,
        align: "left",
        sort:true,
        sort: true,
      },
      {
        field: "operateType",
        title: "备注",
        title: "操作类型",
        type: "string",
        width: 100,
        align: "left",
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/vue.config.js
@@ -31,6 +31,9 @@
      ]
    }
  },
  transpileDependencies: [
    'vue-draggable-next'
  ],
  //https://cli.vuejs.org/zh/guide/html-and-static-assets.html#html
  chainWebpack: (config) => {
    // ç§»é™¤ prefetch æ’ä»¶
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.794.21998/CodeChunks.db
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.794.21998/CodeChunks.db-shm
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.794.21998/CodeChunks.db-wal
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.794.21998/SemanticSymbols.db
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.794.21998/SemanticSymbols.db-shm
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.794.21998/SemanticSymbols.db-wal
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json
@@ -3,16 +3,60 @@
  "WorkspaceRootPath": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_taskinfoservice\\partialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\partialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|solutionrelative:widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_wmsserver\\controllers\\tomes.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\tomes.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_taskinfoservice\\partialtaskservice_inbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\partialtaskservice_inbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{5F260E03-095A-4870-8419-5B72CB62929E}|WIDESEA_IBasicService\\WIDESEA_IBasicService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_ibasicservice\\ilocationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{5F260E03-095A-4870-8419-5B72CB62929E}|WIDESEA_IBasicService\\WIDESEA_IBasicService.csproj|solutionrelative:widesea_ibasicservice\\ilocationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_basicservice\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_wmsserver\\controllers\\basic\\locationinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\basic\\locationinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_common\\locationenum\\locationtypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\locationenum\\locationtypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_common\\locationenum\\locationstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\locationenum\\locationstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_core\\helper\\httphelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\helper\\httphelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_dto\\tomes\\relocationtaskmes.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\tomes\\relocationtaskmes.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_taskinfoservice\\partialtaskservice_allocation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\partialtaskservice_allocation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -22,34 +66,8 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 1,
          "SelectedChildIndex": 9,
          "Children": [
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "PartialTaskService_Inbound.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ViewState": "AgIAAK0AAAAAAAAAAAAQwCUAAABnAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-06T09:28:34.626Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "PartialTaskService_Outbound.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "ViewState": "AgIAADkAAAAAAAAAAAAWwEwAAAA4AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-06T09:28:05.519Z",
              "EditorCaption": ""
            },
            {
              "$type": "Bookmark",
              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
@@ -64,16 +82,176 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "ToMes.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\ToMes.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\ToMes.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\ToMes.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\ToMes.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAB0AAAAlAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-10T05:50:37.867Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "PartialTaskService_Inbound.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ViewState": "AgIAAI0AAAAAAAAAAADgv5kAAABRAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-11T10:02:21.429Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "Title": "LocationInfoController.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "ViewState": "AgIAAAUAAAAAAAAAAAAiwCIAAAAxAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-11T20:06:01.154Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "ILocationInfoService.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_IBasicService\\ILocationInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_IBasicService\\ILocationInfoService.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_IBasicService\\ILocationInfoService.cs",
              "RelativeToolTip": "WIDESEA_IBasicService\\ILocationInfoService.cs",
              "ViewState": "AgIAAD8AAAAAAAAAAAAkwE0AAAAjAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-11T10:44:14.653Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 11,
              "Title": "HttpHelper.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\HttpHelper.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\Helper\\HttpHelper.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\HttpHelper.cs",
              "RelativeToolTip": "WIDESEA_Core\\Helper\\HttpHelper.cs",
              "ViewState": "AgIAAA4AAAAAAAAAAAAnwJwAAABDAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-11T03:00:56.867Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "TaskController.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ViewState": "AgIAADQAAAAAAAAAAAAiwEcAAAAeAAAAAAAAAA==",
              "ViewState": "AgIAAAsAAAAAAAAAAAAowCIAAAAoAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-06T08:33:30.145Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "ITaskService.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeToolTip": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ViewState": "AgIAAB4AAAAAAAAAAAAnwDIAAAAgAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-10T15:27:40.812Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "TaskService.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAOIAAAAAAAAAAAAqwBMBAAARAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-11T12:45:03.457Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 10,
              "Title": "LocationStatusEnum.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Common\\LocationEnum\\LocationStatusEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\LocationEnum\\LocationStatusEnum.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Common\\LocationEnum\\LocationStatusEnum.cs",
              "RelativeToolTip": "WIDESEA_Common\\LocationEnum\\LocationStatusEnum.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvxEAAAARAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-10T14:42:41.677Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 9,
              "Title": "LocationTypeEnum.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Common\\LocationEnum\\LocationTypeEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\LocationEnum\\LocationTypeEnum.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Common\\LocationEnum\\LocationTypeEnum.cs",
              "RelativeToolTip": "WIDESEA_Common\\LocationEnum\\LocationTypeEnum.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-10T14:43:39.24Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "Title": "LocationInfoService.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_BasicService\\LocationInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\LocationInfoService.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_BasicService\\LocationInfoService.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\LocationInfoService.cs",
              "ViewState": "AgIAALUBAAAAAAAAAAAswMkBAACzAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-12T15:29:31.672Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "TaskTypeEnum.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "RelativeToolTip": "WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "ViewState": "AgIAADwAAAAAAAAAAAAIwFgAAAAdAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-10T14:43:12.456Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "Title": "RelocationTaskMes.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_DTO\\ToMes\\RelocationTaskMes.cs",
              "RelativeDocumentMoniker": "WIDESEA_DTO\\ToMes\\RelocationTaskMes.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_DTO\\ToMes\\RelocationTaskMes.cs",
              "RelativeToolTip": "WIDESEA_DTO\\ToMes\\RelocationTaskMes.cs",
              "ViewState": "AgIAAK4AAAAAAAAAAIA0wL8AAAAwAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-12T08:33:49.909Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 13,
              "Title": "PartialTaskService_Allocation.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Allocation.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Allocation.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Allocation.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Allocation.cs",
              "ViewState": "AgIAAHoAAAAAAAAAAADwv5wAAABEAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-10T15:03:09.887Z"
            }
          ]
        }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json
@@ -3,16 +3,60 @@
  "WorkspaceRootPath": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_taskinfoservice\\partialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\partialtaskservice_outbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|solutionrelative:widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_wmsserver\\controllers\\tomes.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\tomes.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_taskinfoservice\\partialtaskservice_inbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\partialtaskservice_inbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{5F260E03-095A-4870-8419-5B72CB62929E}|WIDESEA_IBasicService\\WIDESEA_IBasicService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_ibasicservice\\ilocationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{5F260E03-095A-4870-8419-5B72CB62929E}|WIDESEA_IBasicService\\WIDESEA_IBasicService.csproj|solutionrelative:widesea_ibasicservice\\ilocationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_basicservice\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D11C804C-2FF4-4C18-A3EE-2F0574427BB3}|WIDESEA_BasicService\\WIDESEA_BasicService.csproj|solutionrelative:widesea_basicservice\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_wmsserver\\controllers\\basic\\locationinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\basic\\locationinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_common\\locationenum\\locationtypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\locationenum\\locationtypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_common\\locationenum\\locationstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\locationenum\\locationstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_core\\helper\\httphelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\helper\\httphelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_dto\\tomes\\relocationtaskmes.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\tomes\\relocationtaskmes.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|f:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\shenyangliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\widesea_taskinfoservice\\partialtaskservice_allocation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\partialtaskservice_allocation.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -22,7 +66,7 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 4,
          "SelectedChildIndex": 9,
          "Children": [
            {
              "$type": "Bookmark",
@@ -39,41 +83,175 @@
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "PartialTaskService_Inbound.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ViewState": "AgIAABUAAAAAAAAAAADwv4YAAABCAAAAAAAAAA==",
              "Title": "ToMes.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\ToMes.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\ToMes.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\ToMes.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\ToMes.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAB0AAAAlAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-06T09:28:34.626Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "PartialTaskService_Outbound.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Outbound.cs",
              "ViewState": "AgIAAEgAAAAAAAAAAAAWwFQAAAAvAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-06T09:28:05.519Z",
              "WhenOpened": "2025-11-10T05:50:37.867Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "PartialTaskService_Inbound.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "ViewState": "AgIAAI0AAAAAAAAAAADgv5kAAABRAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-11T10:02:21.429Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "Title": "LocationInfoController.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Basic\\LocationInfoController.cs",
              "ViewState": "AgIAAAUAAAAAAAAAAAAiwCIAAAAxAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-11T20:06:01.154Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "ILocationInfoService.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_IBasicService\\ILocationInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_IBasicService\\ILocationInfoService.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_IBasicService\\ILocationInfoService.cs",
              "RelativeToolTip": "WIDESEA_IBasicService\\ILocationInfoService.cs",
              "ViewState": "AgIAAD8AAAAAAAAAAAAkwE0AAAAjAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-11T10:44:14.653Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 11,
              "Title": "HttpHelper.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\HttpHelper.cs",
              "RelativeDocumentMoniker": "WIDESEA_Core\\Helper\\HttpHelper.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\HttpHelper.cs",
              "RelativeToolTip": "WIDESEA_Core\\Helper\\HttpHelper.cs",
              "ViewState": "AgIAAA4AAAAAAAAAAAAnwJwAAABDAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-11T03:00:56.867Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "TaskController.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
              "ViewState": "AgIAAA8AAAAAAAAAAAAAAEcAAAAeAAAAAAAAAA==",
              "ViewState": "AgIAAAsAAAAAAAAAAAAowCIAAAAoAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-06T08:33:30.145Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "ITaskService.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
              "RelativeToolTip": "WIDESEA_ITaskInfoService\\ITaskService.cs",
              "ViewState": "AgIAAB4AAAAAAAAAAAAnwDIAAAAgAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-10T15:27:40.812Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "TaskService.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAAOIAAAAAAAAAAAAqwBMBAAARAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-11T12:45:03.457Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 10,
              "Title": "LocationStatusEnum.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Common\\LocationEnum\\LocationStatusEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\LocationEnum\\LocationStatusEnum.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Common\\LocationEnum\\LocationStatusEnum.cs",
              "RelativeToolTip": "WIDESEA_Common\\LocationEnum\\LocationStatusEnum.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvxEAAAARAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-10T14:42:41.677Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 9,
              "Title": "LocationTypeEnum.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Common\\LocationEnum\\LocationTypeEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\LocationEnum\\LocationTypeEnum.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Common\\LocationEnum\\LocationTypeEnum.cs",
              "RelativeToolTip": "WIDESEA_Common\\LocationEnum\\LocationTypeEnum.cs",
              "ViewState": "AgIAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-10T14:43:39.24Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "Title": "LocationInfoService.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_BasicService\\LocationInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEA_BasicService\\LocationInfoService.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_BasicService\\LocationInfoService.cs",
              "RelativeToolTip": "WIDESEA_BasicService\\LocationInfoService.cs",
              "ViewState": "AgIAALUBAAAAAAAAAAAswMkBAACzAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-12T15:29:31.672Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "TaskTypeEnum.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "RelativeDocumentMoniker": "WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "RelativeToolTip": "WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
              "ViewState": "AgIAADwAAAAAAAAAAAAIwFgAAAAdAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-10T14:43:12.456Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "Title": "RelocationTaskMes.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_DTO\\ToMes\\RelocationTaskMes.cs",
              "RelativeDocumentMoniker": "WIDESEA_DTO\\ToMes\\RelocationTaskMes.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_DTO\\ToMes\\RelocationTaskMes.cs",
              "RelativeToolTip": "WIDESEA_DTO\\ToMes\\RelocationTaskMes.cs",
              "ViewState": "AgIAAK4AAAAAAAAAAIA0wL8AAAAwAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-12T08:33:49.909Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 13,
              "Title": "PartialTaskService_Allocation.cs",
              "DocumentMoniker": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Allocation.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Allocation.cs",
              "ToolTip": "F:\\\u6C88\u9633\u53F2\u8FBE\u514B\u5229\u5E93\u9879\u76EE\\2025.11.6\\ShenYangLiku\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Allocation.cs",
              "RelativeToolTip": "WIDESEA_TaskInfoService\\PartialTaskService_Allocation.cs",
              "ViewState": "AgIAAHoAAAAAAAAAAADwv5wAAABEAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-11-10T15:03:09.887Z"
            }
          ]
        }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs
@@ -137,7 +137,7 @@
                                LocationType = LocationTypeEnum.Undefined.ObjToInt(),
                                RoadwayNo = $"{initializationLocationDTO.Roadway.ToString()}",
                                Row = i + 1,
                                Depth = depth,
                                Depth = 1,
                            };
                            locationInfo.LocationCode = $"{locationInfo.RoadwayNo}-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}-{locationInfo.Depth.ToString().PadLeft(2, '0')}";
                            locationInfo.LocationName = $"{locationInfo.RoadwayNo}巷道{locationInfo.Row.ToString().PadLeft(3, '0')}行{locationInfo.Column.ToString().PadLeft(3, '0')}列{locationInfo.Layer.ToString().PadLeft(3, '0')}层{locationInfo.Depth.ToString().PadLeft(2, '0')}æ·±";
@@ -453,6 +453,11 @@
            return groupLocations;
        }
        public Dt_LocationInfo? GetLocationInfoSC(string v)
        {
            Dt_LocationInfo dt_Location = BaseDal.QueryFirst(x=>x.LocationStatus == (int)LocationStatusEnum.Free&& x.RoadwayNo == v&&x.EnableStatus == (int)EnableStatusEnum.Normal);
            return dt_Location;
        }
        public class LocationCache
        {
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
@@ -64,5 +64,8 @@
        [Description("入库撤销")]
        å…¥åº“撤销 = 199,
        [Description("调拨中")]
        è°ƒæ‹¨ä¸­ = 200,
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_Core/Const/ConfigConst.cs
@@ -32,8 +32,8 @@
        /// <summary>
        /// ç§»åº“任务完成
        /// </summary>
        public const string MESTransferCompletionFeedback = "MESTransferCompletionFeedback";
        public const string MESTaskFeedback = "MESTaskFeedback";
        public const string MESTransferCompletionFeedback = "onHandMoveReport";
        public const string MESTaskFeedback = "resultReport";
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpHelper.cs
@@ -1,4 +1,4 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
@@ -132,5 +132,124 @@
                Logger.Add(serviceAddress, requestJson, result, beginDate);
            }
        }
        /// <summary>
        /// POST请求(异步版本)- è§£å†³405问题
        /// </summary>
        /// <param name="serviceAddress">服务地址</param>
        /// <param name="requestJson">请求JSON</param>
        /// <param name="contentType">内容类型</param>
        /// <param name="headers">请求头</param>
        /// <returns>响应结果</returns>
        /// <summary>
        /// POST请求(同步版本,兼容原有代码)
        /// </summary>
        // å¦‚果上面的方法还有问题,使用这个简化版本
        public static string PostSync(string serviceAddress, string requestJson = "", string contentType = "application/json", Dictionary<string, string>? headers = null)
        {
            string result = string.Empty;
            DateTime beginDate = DateTime.Now;
            try
            {
                using (var httpContent = new StringContent(requestJson, Encoding.UTF8, contentType))
                using (var httpClient = new HttpClient())
                {
                    httpClient.Timeout = TimeSpan.FromSeconds(600);
                    // è®¾ç½®é»˜è®¤è¯·æ±‚头 - ä½¿ç”¨ç®€å•çš„ User-Agent
                    httpClient.DefaultRequestHeaders.Add("Accept", "*/*");
                    httpClient.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate");
                    httpClient.DefaultRequestHeaders.Add("Connection", "keep-alive");
                    httpClient.DefaultRequestHeaders.Add("User-Agent", "WMS-Client/1.0"); // ç®€å•çš„ User-Agent
                    if (headers != null)
                    {
                        foreach (var header in headers)
                            httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
                    }
                    var response = httpClient.PostAsync(serviceAddress, httpContent).Result;
                    Console.WriteLine($"HTTP状态码: {(int)response.StatusCode} - {response.StatusCode}");
                    if (!response.IsSuccessStatusCode)
                    {
                        throw new HttpRequestException($"HTTP请求失败: {(int)response.StatusCode} - {response.StatusCode}");
                    }
                    result = response.Content.ReadAsStringAsync().Result;
                    return result;
                }
            }
            catch (Exception e)
            {
                throw new Exception($"POST请求失败: {e.Message}");
            }
            finally
            {
                Logger.Add(serviceAddress, requestJson, result, beginDate);
            }
        }
        /// <summary>
        /// GET请求
        /// </summary>
        /// <param name="serviceAddress">服务地址</param>
        /// <param name="parameters">请求参数</param>
        /// <param name="headers">请求头</param>
        /// <returns>响应结果</returns>
        public static string GetRequest(string serviceAddress, Dictionary<string, string>? parameters = null, Dictionary<string, string>? headers = null)
        {
            string result = string.Empty;
            DateTime beginDate = DateTime.Now;
            try
            {
                using (var httpClient = new HttpClient())
                {
                    httpClient.Timeout = TimeSpan.FromSeconds(60);
                    // è®¾ç½®è¯·æ±‚头
                    httpClient.DefaultRequestHeaders.Add("Accept", "*/*");
                    httpClient.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate");
                    httpClient.DefaultRequestHeaders.Add("Connection", "keep-alive");
                    httpClient.DefaultRequestHeaders.Add("User-Agent", "WMS-Client/1.0");
                    if (headers != null)
                    {
                        foreach (var header in headers)
                            httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
                    }
                    // æž„建带参数的 URL
                    string url = serviceAddress;
                    if (parameters != null && parameters.Count > 0)
                    {
                        var queryParams = string.Join("&", parameters.Select(p => $"{Uri.EscapeDataString(p.Key)}={Uri.EscapeDataString(p.Value)}"));
                        url += (url.Contains("?") ? "&" : "?") + queryParams;
                    }
                    var response = httpClient.GetAsync(url).Result;
                    Console.WriteLine($"GET çŠ¶æ€ç : {(int)response.StatusCode} - {response.StatusCode}");
                    if (!response.IsSuccessStatusCode)
                    {
                        throw new HttpRequestException($"GET è¯·æ±‚失败: {(int)response.StatusCode} - {response.StatusCode}");
                    }
                    result = response.Content.ReadAsStringAsync().Result;
                    return result;
                }
            }
            catch (Exception e)
            {
                throw new Exception($"GET è¯·æ±‚失败: {e.Message}");
            }
            finally
            {
                Logger.Add(serviceAddress, parameters != null ? JsonConvert.SerializeObject(parameters) : "No Parameters", result, beginDate);
            }
        }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_DTO/ToMes/AllocationTaskReceived.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace WIDESEA_DTO.ToMes
{
    /// <summary>
    /// MES下发库位调拨任务接收DTO
    /// </summary>
    public class AllocationTaskReceived
    {
        /// <summary>
        /// ä¸šåŠ¡ID
        /// </summary>
        [Required(ErrorMessage = "业务ID不能为空")]
        public string businessId { get; set; }
        /// <summary>
        /// ä»»åŠ¡ID
        /// </summary>
        [Required(ErrorMessage = "任务ID不能为空")]
        public string taskId { get; set; }
        /// <summary>
        /// ç›®æ ‡è´§ä½ç¼–码
        /// </summary>
        [Required(ErrorMessage = "目标货位编码不能为空")]
        public string locationCode { get; set; }
        /// <summary>
        /// åŽŸè´§ä½ç¼–ç 
        /// </summary>
        [Required(ErrorMessage = "原货位编码不能为空")]
        public string sourceLocationCode { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç¼–码
        /// </summary>
        [Required(ErrorMessage = "托盘编码不能为空")]
        public string palletCode { get; set; }
    }
    /// <summary>
    /// åº“位调拨任务反馈DTO
    /// </summary>
    public class AllocationTaskFeedback
    {
        /// <summary>
        /// ä»»åŠ¡ID
        /// </summary>
        public string TaskId { get; set; }
        /// <summary>
        /// ä¸šåŠ¡ID
        /// </summary>
        public string BusinessId { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç¼–码
        /// </summary>
        public string PalletCode { get; set; }
        /// <summary>
        /// æºè´§ä½ç¼–码
        /// </summary>
        public string SourceLocationCode { get; set; }
        /// <summary>
        /// ç›®æ ‡è´§ä½ç¼–码
        /// </summary>
        public string TargetLocationCode { get; set; }
        /// <summary>
        /// ä»»åŠ¡çŠ¶æ€ï¼šRECEIVED-已接收,EXECUTING-执行中,COMPLETED-已完成,FAILED-失败
        /// </summary>
        public string TaskStatus { get; set; }
        /// <summary>
        /// å®Œæˆæ—¶é—´
        /// </summary>
        public DateTime? CompletedTime { get; set; }
        /// <summary>
        /// å¼‚常状态:NORMAL-正常,ERROR-异常
        /// </summary>
        public string ErrorStatus { get; set; } = "NORMAL";
        /// <summary>
        /// å¼‚常信息
        /// </summary>
        public string ErrorInfo { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹ï¼šAUTO-自动完成,MANUAL-人工完成
        /// </summary>
        public string OperateType { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_DTO/ToMes/RelocationTaskMes.cs
@@ -19,37 +19,37 @@
        /// <summary>
        /// ä»»åŠ¡ID
        /// </summary>
        public string TaskId { get; set; }
        public string taskId { get; set; }
        /// <summary>
        /// åŽŸè´§ä½
        /// </summary>
        public string SourceLocationCode { get; set; }
        public string sourceLocationCode { get; set; }
        /// <summary>
        /// ç›®æ ‡è´§ä½ç¼–码
        /// </summary>
        public string LocationCode { get; set; }
        public string locationCode { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç¼–码
        /// </summary>
        public string PalletCode { get; set; }
        public string palletCode { get; set; }
        /// <summary>
        /// çŠ¶æ€: FINISH-已完成, TRANSFER-转移中
        /// </summary>
        public string Status { get; set; }
        public string status { get; set; }
        /// <summary>
        /// å¼‚常状态: NORMAL-正常,ERROR-异常
        /// </summary>
        public string ErrorStatus { get; set; }
        public string errorStatus { get; set; }
        /// <summary>
        /// å¼‚常信息
        /// </summary>
        public string ErrorInfo { get; set; }
        public string errorInfo { get; set; }
    }
    /// <summary>
@@ -113,37 +113,37 @@
        /// <summary>
        /// ä»»åŠ¡ID
        /// </summary>
        public string TaskId { get; set; }
        public string taskId { get; set; }
        /// <summary>
        /// ä¸šåŠ¡ID
        /// </summary>
        public string BusinessId { get; set; }
        public string businessId { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç¼–码
        /// </summary>
        public string PalletCode { get; set; }
        public string palletCode { get; set; }
        /// <summary>
        /// å­æ‰˜ç›˜ç¼–码
        /// </summary>
        public string SubPalletCode { get; set; }
        public string subPalletCode { get; set; }
        /// <summary>
        /// è´§ä½ç¼–码
        /// </summary>
        public string LocationCode { get; set; }
        public string locationCode { get; set; }
        /// <summary>
        /// å¼‚常状态:NORMAL-正常,ERROR-异常
        /// </summary>
        public string ErrorStatus { get; set; }
        public string errorStatus { get; set; }
        /// <summary>
        /// å¼‚常信息
        /// </summary>
        public string ErrorInfo { get; set; }
        public string errorInfo { get; set; }
    }
    
@@ -188,8 +188,10 @@
        /// <summary>
        /// è´§ä½ç¼–码
        /// </summary>
        //public string locationCode { get; set; }= "SC02-001-002-007-01";
        public string locationCode { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç¼–码
        /// </summary>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs
@@ -75,7 +75,6 @@
        /// <param name="roadway"></param>
        /// <returns></returns>
        Dt_LocationInfo? GetLocation(string roadway);
        Dt_LocationInfo? GetLocationInfoSC(string v);
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -1,4 +1,4 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEA_ITaskInfoService
 * åˆ›å»ºè€…:胡童庆
@@ -57,6 +57,13 @@
        /// <returns></returns>
        ApiResponse<object> sendEnTask(InOutboundTaskReceived outbound);
        /// <summary>
        /// MES下发库位调拨任务
        /// </summary>
        /// <param name="allocationTask">库位调拨任务信息</param>
        /// <returns></returns>
        ApiResponse<object> sendAllocationTask(AllocationTaskReceived allocationTask);
        /// <summary>
        /// ä»»åŠ¡å®ŒæˆæŽ¥å£
@@ -71,6 +78,13 @@
        /// <param name="TaskNum"></param>
        /// <returns></returns>
        WebResponseContent IsRelocations(int TaskNum);
        /// <summary>
        /// å–消任务接口
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns></returns>
        WebResponseContent Cancelinventory(int taskNum);
@@ -91,5 +105,6 @@
        /// <param name="locationInfo"></param>
        /// <returns></returns>
        ApiResponse<object> updateLocation(LocationInfoDto locationInfo);
        WebResponseContent chuku(string locationCode);
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Allocation.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,180 @@
using SqlSugar;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.OtherEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Core;
using WIDESEA_DTO.ToMes;
using WIDESEA_Model.Models;
namespace WIDESEA_TaskInfoService
{
    public partial class TaskService
    {
        /// <summary>
        /// MES下发库位调拨任务
        /// </summary>
        /// <param name="allocationTask">库位调拨任务信息</param>
        /// <returns></returns>
        public ApiResponse<object> sendAllocationTask(AllocationTaskReceived allocationTask)
        {
            try
            {
                // å‚数验证
                if (allocationTask == null)
                    return MESresponse("调拨任务信息不能为空", false);
                if (string.IsNullOrEmpty(allocationTask.palletCode))
                    return MESresponse("托盘编码不能为空", false);
                if (string.IsNullOrEmpty(allocationTask.sourceLocationCode))
                    return MESresponse("源货位编码不能为空", false);
                if (string.IsNullOrEmpty(allocationTask.locationCode))
                    return MESresponse("目标货位编码不能为空", false);
                _unitOfWorkManage.BeginTran();
                // éªŒè¯æ‰˜ç›˜æ˜¯å¦å­˜åœ¨
                var stockInfo = _stockRepository.QueryFirst(x => x.PalletCode == allocationTask.palletCode);
                if (stockInfo == null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return MESresponse($"未找到托盘信息,托盘编码:{allocationTask.palletCode}", false);
                }
                // éªŒè¯æºè´§ä½
                var sourceLocation = _basicService.LocationInfoService.Repository
                    .QueryFirst(x => x.LocationCode == allocationTask.sourceLocationCode);
                if (sourceLocation == null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return MESresponse($"未找到源货位信息,货位编码:{allocationTask.sourceLocationCode}", false);
                }
                // éªŒè¯ç›®æ ‡è´§ä½
                var targetLocation = _basicService.LocationInfoService.Repository
                    .QueryFirst(x => x.LocationCode == allocationTask.locationCode && x.LocationStatus == (int)LocationStatusEnum.Free);
                if (targetLocation == null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return MESresponse($"未找到目标货位信息,货位编码:{allocationTask.locationCode}或货位为其他状态", false);
                }
                // éªŒè¯æ‰˜ç›˜å½“前位置是否与源货位一致
                if (stockInfo.LocationCode != allocationTask.sourceLocationCode)
                {
                    _unitOfWorkManage.RollbackTran();
                    return MESresponse($"托盘当前位置与源货位不一致,托盘编码:{allocationTask.palletCode},当前位置:{stockInfo.LocationCode},源货位:{allocationTask.sourceLocationCode}", false);
                }
                // éªŒè¯æºè´§ä½çŠ¶æ€
                if (sourceLocation.LocationStatus != (int)LocationStatusEnum.InStock)
                {
                    _unitOfWorkManage.RollbackTran();
                    return MESresponse($"源货位状态异常,货位编码:{allocationTask.sourceLocationCode},当前状态:{sourceLocation.LocationStatus}", false);
                }
                // éªŒè¯ç›®æ ‡è´§ä½çŠ¶æ€
                if (targetLocation.LocationStatus != (int)LocationStatusEnum.Free)
                {
                    _unitOfWorkManage.RollbackTran();
                    return MESresponse($"目标货位不为空闲状态,货位编码:{allocationTask.locationCode},当前状态:{targetLocation.LocationStatus}", false);
                }
                // æ£€æŸ¥æ˜¯å¦å·²å­˜åœ¨ç›¸åŒçš„调拨任务
                var existingTask = BaseDal.QueryFirst(x =>
                    x.PalletCode == allocationTask.palletCode &&
                    x.SourceAddress == allocationTask.sourceLocationCode &&
                    x.TargetAddress == allocationTask.locationCode &&
                    x.TaskType == (int)TaskRelocationTypeEnum.Relocation &&
                    x.TaskStatus < (int)TaskRelocationStatusEnum.RelocationFinish);
                if (existingTask != null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return MESresponse($"已存在相同的调拨任务,托盘编码:{allocationTask.palletCode},任务号:{existingTask.TaskNum}", false);
                }
                // é”å®šè´§ä½çŠ¶æ€
                sourceLocation.LocationStatus = (int)LocationStatusEnum.InStockLock;
                targetLocation.LocationStatus = (int)LocationStatusEnum.InStockLock;
                // æ›´æ–°åº“存状态
                stockInfo.StockStatus = (int)StockStatusEmun.调拨中;
                List<Dt_Task> dt_Tasks = new List<Dt_Task>();
                // åˆ›å»ºè°ƒæ‹¨ä»»åŠ¡
                Dt_Task allocationTaskEntity = new Dt_Task
                {
                    PalletCode = allocationTask.palletCode,
                    TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                    Roadway = sourceLocation.RoadwayNo,
                    TaskType = (int)TaskRelocationTypeEnum.Relocation,
                    TaskStatus = (int)TaskRelocationStatusEnum.RelocationNew,
                    SourceAddress = allocationTask.sourceLocationCode,
                    TargetAddress = allocationTask.locationCode,
                    CurrentAddress = allocationTask.sourceLocationCode,
                    NextAddress = allocationTask.locationCode,
                    Grade = 2, // é»˜è®¤ä¼˜å…ˆçº§
                    Creater = "MES",
                    Depth = targetLocation.Depth,
                    CreateDate = DateTime.Now,
                    MEStaskId = allocationTask.taskId,
                    MESbusinessId = allocationTask.businessId,
                    MESsubPalletCode = "", // æ–°ç»“构中没有此字段
                    Remark = "MES库位调拨任务"
                };
                dt_Tasks.Add(allocationTaskEntity);
                // æ‰¹é‡æ›´æ–°æ•°æ®
                _basicService.LocationInfoService.Repository.UpdateData(sourceLocation);
                _basicService.LocationInfoService.Repository.UpdateData(targetLocation);
                _stockRepository.UpdateData(stockInfo);
                BaseDal.AddData(allocationTaskEntity);
                var respon = PushTasksToWCS(dt_Tasks, "");
                if (respon.Status)
                {
                    _unitOfWorkManage.CommitTran();  //提交事务
                    return MESresponse("", true);
                }
                else
                {
                    _unitOfWorkManage.RollbackTran();  //回滚事务
                    return MESresponse($"下发库位调拨失败,原因:{respon.Message}!", false);
                }
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                // è®°å½•错误日志
                Console.WriteLine($"MES库位调拨任务创建失败: {ex.Message}");
                return MESresponse($"调拨任务创建失败:{ex.Message}", false);
            }
        }
        /// <summary>
        /// MES响应格式化
        /// </summary>
        /// <param name="message">消息</param>
        /// <param name="success">是否成功</param>
        /// <param name="data">数据</param>
        /// <returns></returns>
        private ApiResponse<object> MESresponse(string message, bool success, object data = null)
        {
            if (success)
            {
                return ApiResponse<object>.SuccessResponse(message, data);
            }
            else
            {
                return ApiResponse<object>.ErrorResponse(message);
            }
        }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs
@@ -156,13 +156,23 @@
                        Dt_LocationInfo location = null;
                        if (palletInfo.locationCode == null || palletInfo.locationCode == "")
                        {
                            location = _basicService.LocationInfoService.GetLocationInfo();//获取到新库位
                            if (inboundTask.NodeCode == "1001" || inboundTask.NodeCode == "3001"|| inboundTask.NodeCode == "4001"|| inboundTask.NodeCode == "5001" || inboundTask.NodeCode == "1005")
                            {
                                location = _basicService.LocationInfoService.GetLocationInfoSC("SC01");//获取到新库位
                            }else if (inboundTask.NodeCode == "2011")
                            {
                                location = _locationInfoRepository.QueryFirst(x => x.LocationStatus == (int)LocationStatusEnum.Free && x.EnableStatus == (int)EnableStatusEnum.Normal && x.Column > 1 && x.Layer > 6);
                            }
                            else
                            {
                                location = _basicService.LocationInfoService.GetLocationInfoSC("SC02");//获取到新库位
                            }
                        }
                        else
                        {
                            location = _locationInfoRepository.QueryFirst(x => x.LocationCode == palletInfo.locationCode);
                        }
                        if (location == null) return MESresponse($"未找到货位信息,条码:{palletInfo.palletCode}", false);
                        if (location == null) return MESresponse($"未找到货位信息,条码:{palletInfo.palletCode}", false,0);
                        if (location.LocationStatus != (int)LocationStatusEnum.Free) return MESresponse($"托盘条码:{palletInfo.palletCode},查找到的货位:{location.LocationCode},不为空货位!", false);
                        Dt_StockInfo dt_ = Stockdata.Where(x => x.PalletCode == palletInfo.palletCode).FirstOrDefault();
@@ -177,7 +187,7 @@
                                StockStatus = (int)StockStatusEmun.组盘暂存,
                                Creater = "WMS",
                                CreateDate = DateTime.Now,
                                MESsubPalletCode = palletInfo.palletCode,
                                MESsubPalletCode = palletInfo.subPalletCode,
                            };
                            Adddtstockt.Add(dt_Stock);
                        }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -1,4 +1,4 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEA_TaskInfoService
 * åˆ›å»ºè€…:胡童庆
@@ -193,11 +193,11 @@
                        NextAddress = Nextlocation.LocationCode,
                        Grade = 1,
                        Creater = "WMS",
                        Depth = ShallowLocation.Depth,
                        Depth = Nextlocation.Depth,
                        CreateDate = DateTime.Now,
                    };
                    _locationInfoRepository.AddData(loca);
                    _locationInfoRepository.UpdateData(loca);
                    BaseDal.AddData(dt_Task);   //新增任务
                    _unitOfWorkManage.CommitTran();
@@ -267,6 +267,8 @@
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                WebResponseContent content=MES_TransferCompletionFeedback(task);
                //content.Status = true;
                if (!content.Status)
                {
                    _unitOfWorkManage.RollbackTran();
@@ -321,12 +323,15 @@
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
                /*WebResponseContent content = TaskCompletionFeedback(task);
                WebResponseContent content = TaskCompletionFeedback(task);
                //content.Status = true;
                if (!content.Status)
                {
                    _unitOfWorkManage.RollbackTran();
                    return content;
                }*/
                }
                //Thread.Sleep(5000);
                _unitOfWorkManage.CommitTran();
            }
@@ -367,13 +372,15 @@
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockStatusEmun.出库完成.ObjToInt(), "1", task.TaskNum);
                /*WebResponseContent content = TaskCompletionFeedback(task);
                WebResponseContent content = TaskCompletionFeedback(task);
                //content.Status = true;
                if (!content.Status)
                {
                    _unitOfWorkManage.RollbackTran();
                    return content;
                }*/
                }
                //Thread.Sleep(5000);
                _unitOfWorkManage.CommitTran();
                return webResponse.OK();
            }
@@ -404,17 +411,26 @@
            try
            {
                string locationCode = null;
                if (dt_Task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                {
                    locationCode = dt_Task.SourceAddress;
                }
                else
                {
                    locationCode = dt_Task.TargetAddress;
                }
                TransferRequest transferRequest = new TransferRequest()
                {
                    //业务id,任务id后续进行更改
                    businessId = "1",
                    TaskId = "1",
                    SourceLocationCode = dt_Task.SourceAddress,
                    LocationCode = dt_Task.TargetAddress,
                    PalletCode = dt_Task.PalletCode,
                    Status = "FINISH",
                    ErrorStatus = "NORMAL",
                    ErrorInfo = "",
                    taskId = dt_Task.MEStaskId,   //任务id
                    businessId = dt_Task.MESbusinessId,   //业务id
                    sourceLocationCode = dt_Task.SourceAddress,
                    locationCode = locationCode,
                    palletCode = dt_Task.PalletCode,
                    status = "FINISH",
                    errorStatus = "NORMAL",
                    errorInfo = "",
                };
                //获取接口进行调取
@@ -422,25 +438,27 @@
                string WCSReceiveTaskAPI = ConfigsAPIInfo.ApiAddress + ConfigsAPIInfo.ApiName;
                if (WCSReceiveTaskAPI == null)
                {
                    return webResponse.Error($"出库失败,未配置MES移库完成反馈接口");
                   return webResponse.Error($"出库失败,未配置MES移库完成反馈接口");
                }
                var respon = HttpHelper.Post(WCSReceiveTaskAPI, JsonConvert.SerializeObject(transferRequest));
                if (respon != null)
                {
                    var response = JsonConvert.DeserializeObject<ApiResponse<object>>(respon);
                    if (response.Success)
                    {
                        return webResponse.OK();
                    }
                    else
                    {
                        return webResponse.Error($"调取接口失败,反馈参数原因:{response.Message}");
                    }
                   var response = JsonConvert.DeserializeObject<ApiResponse<object>>(respon);
                   if (response.Success)
                   {
                       return webResponse.OK();
                   }
                   else
                   {
                       return webResponse.Error($"调取接口失败,反馈参数原因:{response.Message}");
                   }
                }
                else
                {
                    return webResponse.Error($"调取接口失败,反馈参数为空");
                   return webResponse.Error($"调取接口失败,反馈参数为空");
                }
                return webResponse.OK();
            }
            catch (Exception ex)
            {
@@ -461,17 +479,26 @@
            try
            {
                TaskNotification transferRequest = new TaskNotification()
                string locationCode = null;
                if (dt_Task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                {
                    //业务id,任务id后续进行更改
                    TaskId = "1",   //任务id
                    BusinessId = "1",   //业务id
                    PalletCode = dt_Task.PalletCode,
                    SubPalletCode = "",//子托盘编码
                    LocationCode = dt_Task.SourceAddress,
                    ErrorStatus = "NORMAL",
                    ErrorInfo = "",
                };
                    locationCode = dt_Task.SourceAddress;
                }
                else
                {
                    locationCode = dt_Task.TargetAddress;
                }
                TaskNotification transferRequest = new TaskNotification()
                    {
                        //业务id,任务id后续进行更改
                        taskId = dt_Task.MEStaskId,   //任务id
                        businessId = dt_Task.MESbusinessId,   //业务id
                        palletCode = dt_Task.PalletCode,
                        subPalletCode = dt_Task.MESsubPalletCode,//子托盘编码
                        locationCode = locationCode,
                        errorStatus = "NORMAL",
                        errorInfo = "",
                    };
                //获取接口进行调取
                var ConfigsAPIInfo = _dt_ApiInfoService.GetConfigsByAPIInfo(CateGoryConst.CONFIG_MES_IPAddress, SysConfigConst.MESTaskFeedback);      //获取到wcs全部类型的接口
@@ -480,7 +507,14 @@
                {
                    return webResponse.Error($"任务反馈MES失败,未配置MES任务完成反馈接口");
                }
                var respon = HttpHelper.Post(WCSReceiveTaskAPI, JsonConvert.SerializeObject(transferRequest));
                // æ·»åŠ è°ƒè¯•ä¿¡æ¯
                string requestJson = JsonConvert.SerializeObject(transferRequest);
                //Console.WriteLine($"MES反馈接口URL: {WCSReceiveTaskAPI}");
                //Console.WriteLine($"MES反馈请求数据: {requestJson}");
                // ä½¿ç”¨ä¿®å¤åŽçš„PostSync方法(已在PostSync中设置默认请求头)
                var respon = HttpHelper.Post(WCSReceiveTaskAPI, requestJson);
                if (respon != null)
                {
                    var response = JsonConvert.DeserializeObject<ApiResponse<object>>(respon);
@@ -505,7 +539,7 @@
            }
        }
        public ApiResponse<object> MESresponse(string Message, bool Success)
        public ApiResponse<object> MESresponse(string Message, bool Success,int  Code)
        {
            ApiResponse<object> apiResponse = new ApiResponse<object>();
            apiResponse.Message = Message;
@@ -514,8 +548,33 @@
            return apiResponse;
        }
        /// <summary>
        /// å–消任务接口
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns></returns>
        public WebResponseContent Cancelinventory(int taskNum)
        {
            WebResponseContent webResponse = new WebResponseContent();
            try
            {
                // æŸ¥æ‰¾ä»»åŠ¡
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.TaskStatus == TaskOutStatusEnum.OutFinish.ObjToInt());
                if (task == null)
                {
                    return webResponse.Error($"未找到任务号为【{taskNum}】的任务信息");
                }
                // TODO: è¿™é‡ŒåŽç»­éœ€è¦æ·»åŠ å…·ä½“çš„å–æ¶ˆä»»åŠ¡ä¸šåŠ¡é€»è¾‘
                // ä¾‹å¦‚:更新任务状态、释放货位、通知WCS等
                return webResponse.OK("任务取消成功");
            }
            catch (Exception ex)
            {
                return webResponse.Error($"取消任务失败,原因:{ex.Message}");
            }
        }
        /// <summary>
        /// åˆ›å»ºè´§ä½
@@ -603,5 +662,92 @@
            }
            return MESresponse($"", true);
        }
        public static string GetLastPart(string locationCode)
        {
            string[] parts = locationCode.Split('-');
            return parts[parts.Length - 1];
        }
        /// <summary>
        /// å‡ºåº“
        /// </summary>
        /// <param name="locationCode"></param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public WebResponseContent chuku(string locationCode)
        {
            try
            {
                int result = GetLastPart(locationCode).ObjToInt(); // è¿”回 "C03"
                List<Dt_Task> dt_s = new List<Dt_Task>();
                //生成移动任务
                Dt_Task dt_Task = new()
                {
                    PalletCode = "1111",
                    TaskNum = 111,
                    Roadway = "SC01",
                    TaskType = TaskOutboundTypeEnum.Outbound.ObjToInt(),
                    TaskStatus = TaskOutStatusEnum.OutNew.ObjToInt(),
                    SourceAddress = locationCode,
                    TargetAddress = "1002",
                    CurrentAddress = locationCode,
                    NextAddress = "1002",
                    Grade = 1,
                    Creater = "MES",
                    Depth = result,
                    CreateDate = DateTime.Now,
                    MEStaskId = "111",
                    MESbusinessId = "123456",
                    MESsubPalletCode = "",
                    OutboundPlatform = "1001"
                };
                //创建组盘信息
                var dt_Stock = new Dt_StockInfo
                {
                    PalletCode = dt_Task.PalletCode,
                    PalletType = 1,
                    LocationCode = locationCode,
                    StockStatus = 6,
                    Creater = "WMS",
                    CreateDate = DateTime.Now,
                    MESsubPalletCode = dt_Task.MESsubPalletCode,
                };
                Dt_LocationInfo dt_LocationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == locationCode);
                dt_LocationInfo.LocationStatus = (int)LocationStatusEnum.InStockLock;
                bool l = _locationInfoRepository.UpdateData(dt_LocationInfo);
                int s = _stockRepository.AddData(dt_Stock);
                int t = BaseDal.AddData(dt_Task);
                bool ss = s.ObjToBool();
                bool tt = t.ObjToBool();
                if (!l && !ss && tt)
                {
                    _unitOfWorkManage.RollbackTran();
                }
                dt_s.Add(dt_Task);
                var respon = PushTasksToWCS(dt_s, "");
                if (respon.Status)
                {
                    _unitOfWorkManage.CommitTran();  //提交事务
                    return WebResponseContent.Instance.OK();
                }
                return WebResponseContent.Instance.Error();
            }
            catch
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error();
            }
        }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs
@@ -1,11 +1,21 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Quartz;
using System.ComponentModel;
using System.Reflection;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.MaterielEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Core.BaseController;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Caches;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.System;
using WIDESEA_ISystemService;
using WIDESEA_Model.Models;
using WIDESEA_DTO.System;
namespace WIDESEA_WMSServer.Controllers
{
@@ -17,15 +27,494 @@
    public class Sys_DictionaryController : ApiBaseController<ISys_DictionaryService, Sys_Dictionary>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        public Sys_DictionaryController(ISys_DictionaryService service, IHttpContextAccessor httpContextAccessor) : base(service)
        private readonly ICacheService _cacheService;
        public Sys_DictionaryController(ISys_DictionaryService service, IHttpContextAccessor httpContextAccessor, ICacheService cacheService) : base(service)
        {
            _httpContextAccessor = httpContextAccessor;
            _cacheService = cacheService;
        }
        [HttpPost, Route("GetVueDictionary"), AllowAnonymous]
        public IActionResult GetVueDictionary([FromBody] string[] dicNos)
        {
            return Json(Service.GetVueDictionary(dicNos));
            List<VueDictionaryDTO> vueDictionaryDTOs = Service.GetVueDictionary(dicNos);
            try
            {
                List<string> selectDicNos = vueDictionaryDTOs.Select(x => x.DicNo).ToList();
                List<string> cacheDicNos = new List<string>();
                foreach (string n in dicNos.Where(x => !selectDicNos.Contains(x)))
                {
                    string? str = _cacheService.Get(n);
                    if (!string.IsNullOrEmpty(str))
                    {
                        VueDictionaryDTO? vueDictionary = JsonConvert.DeserializeObject<VueDictionaryDTO>(str);
                        if (vueDictionary != null)
                        {
                            vueDictionaryDTOs.Add(vueDictionary);
                            cacheDicNos.Add(n);
                        }
                    }
                }
                List<string> dicList = dicNos.ToList();
                List<string> otherDicNos = dicNos.Where(x => !cacheDicNos.Contains(x) && !selectDicNos.Contains(x)).ToList();
                if (otherDicNos.Count() > 0)
                {
                    string str = AppSettings.Configuration["dics"];
                    if (!string.IsNullOrEmpty(str))
                    {
                        List<string> cusDics = new List<string>();
                        List<string> dics = str.Split(",").ToList();
                        foreach (var item in otherDicNos)
                        {
                            if (dics.Contains(item))
                            {
                                cusDics.Add(item);
                            }
                        }
                        foreach (var item in cusDics)
                        {
                            VueDictionaryDTO? vueDictionaryDTO = GetVueDictionary(item.Trim());
                            if (vueDictionaryDTO != null)
                            {
                                vueDictionaryDTOs.Add(vueDictionaryDTO);
                                if (!_cacheService.Exists(item))
                                {
                                    _cacheService.Add(item, vueDictionaryDTO.Serialize());
                                }
                            }
                        }
                    }
                }
            }
            catch
            {
            }
            return Json(vueDictionaryDTOs);
        }
        private VueDictionaryDTO? GetVueDictionary(string key)
        {
            VueDictionaryDTO? result = null;
            try
            {
                switch (key)
                {
                    case "jobAssembly":
                        {
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = new List<object>() { new { key = "WIDESEAWCS_Tasks", value = "WIDESEAWCS_Tasks" } } };
                        }
                        break;
                    case "jobClassName":
                        {
                            Type type = typeof(IJob);
                            var basePath = AppContext.BaseDirectory;
                            string path = Path.Combine(basePath, $"WIDESEAWCS_Tasks");
                            Assembly assembly = Assembly.LoadFrom(path);
                            List<Type> types = assembly.GetTypes().Where(x => type.IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface).ToList();
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = types.Select(x => new { key = x.Name, value = x.Name }) };
                        }
                        break;
                    case "taskState":
                        {
                            List<object> data = new List<object>();
                            #region TaskInStatusEnum
                            {
                                Type type = typeof(TaskInStatusEnum);
                                List<int> enums = Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            #endregion
                            #region TaskOutStatusEnum
                            {
                                Type type = typeof(TaskOutStatusEnum);
                                List<int> enums = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            #endregion
                            #region TaskRelocationStatusEnum
                            {
                                Type type = typeof(TaskRelocationStatusEnum);
                                List<int> enums = Enum.GetValues(typeof(TaskRelocationStatusEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(TaskRelocationStatusEnum).GetField(((TaskRelocationStatusEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            #endregion
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "taskInStatus":
                        {
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                data.Add(new { key = item.ToString(), value = description != null ? description.Description : item.ToString() });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "taskOutStatus":
                        {
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                data.Add(new { key = item.ToString(), value = description != null ? description.Description : item.ToString() });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "taskRelocationStatus":
                        {
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(TaskRelocationStatusEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(TaskRelocationStatusEnum).GetField(((TaskRelocationStatusEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                data.Add(new { key = item.ToString(), value = description != null ? description.Description : item.ToString() });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "taskInboundType":
                        {
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(TaskInboundTypeEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(TaskInboundTypeEnum).GetField(((TaskInboundTypeEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                data.Add(new { key = item.ToString(), value = description != null ? description.Description : item.ToString() });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "taskOutboundType":
                        {
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(TaskOutboundTypeEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(TaskOutboundTypeEnum).GetField(((TaskOutboundTypeEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                data.Add(new { key = item.ToString(), value = description != null ? description.Description : item.ToString() });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "taskRelocationType":
                        {
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(TaskRelocationTypeEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(TaskRelocationTypeEnum).GetField(((TaskRelocationTypeEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                data.Add(new { key = item.ToString(), value = description != null ? description.Description : item.ToString() });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "taskTypeGroup":
                        {
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(TaskTypeGroup)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(TaskTypeGroup).GetField(((TaskTypeGroup)item).ToString());
                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                data.Add(new { key = item.ToString(), value = description != null ? description.Description : ((TaskTypeGroup)item).ToString() });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "taskTypeEnum":
                        {
                            // åˆå¹¶å…¥åº“/出库/移库任务类型
                            List<object> data = new List<object>();
                            foreach (var item in Enum.GetValues(typeof(TaskInboundTypeEnum)).Cast<int>())
                            {
                                var field = typeof(TaskInboundTypeEnum).GetField(((TaskInboundTypeEnum)item).ToString());
                                var desc = field?.GetCustomAttribute<DescriptionAttribute>()?.Description ?? item.ToString();
                                data.Add(new { key = item.ToString(), value = desc });
                            }
                            foreach (var item in Enum.GetValues(typeof(TaskOutboundTypeEnum)).Cast<int>())
                            {
                                var field = typeof(TaskOutboundTypeEnum).GetField(((TaskOutboundTypeEnum)item).ToString());
                                var desc = field?.GetCustomAttribute<DescriptionAttribute>()?.Description ?? item.ToString();
                                data.Add(new { key = item.ToString(), value = desc });
                            }
                            foreach (var item in Enum.GetValues(typeof(TaskRelocationTypeEnum)).Cast<int>())
                            {
                                var field = typeof(TaskRelocationTypeEnum).GetField(((TaskRelocationTypeEnum)item).ToString());
                                var desc = field?.GetCustomAttribute<DescriptionAttribute>()?.Description ?? item.ToString();
                                data.Add(new { key = item.ToString(), value = desc });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "taskStatusEnum":
                        {
                            // åˆå¹¶å…¥åº“/出库/移库任务状态
                            List<object> data = new List<object>();
                            foreach (var item in Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>())
                            {
                                var field = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)item).ToString());
                                var desc = field?.GetCustomAttribute<DescriptionAttribute>()?.Description ?? item.ToString();
                                data.Add(new { key = item.ToString(), value = desc });
                            }
                            foreach (var item in Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>())
                            {
                                var field = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString());
                                var desc = field?.GetCustomAttribute<DescriptionAttribute>()?.Description ?? item.ToString();
                                data.Add(new { key = item.ToString(), value = desc });
                            }
                            foreach (var item in Enum.GetValues(typeof(TaskRelocationStatusEnum)).Cast<int>())
                            {
                                var field = typeof(TaskRelocationStatusEnum).GetField(((TaskRelocationStatusEnum)item).ToString());
                                var desc = field?.GetCustomAttribute<DescriptionAttribute>()?.Description ?? item.ToString();
                                data.Add(new { key = item.ToString(), value = desc });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "stockChangeTypeEnum":
                        {
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(StockChangeTypeEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(StockChangeTypeEnum).GetField(((StockChangeTypeEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo?.GetCustomAttribute<DescriptionAttribute>();
                                data.Add(new { key = item.ToString(), value = description != null ? description.Description : item.ToString() });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "stockStatusEmun":
                        {
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(StockStatusEmun)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(StockStatusEmun).GetField(((StockStatusEmun)item).ToString());
                                DescriptionAttribute? description = fieldInfo?.GetCustomAttribute<DescriptionAttribute>();
                                data.Add(new { key = item.ToString(), value = description != null ? description.Description : item.ToString() });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "yesno":
                        {
                            // ä½¿ç”¨çœŸå®žçš„æ˜¯å¦æžšä¸¾
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(WhetherEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(WhetherEnum).GetField(((WhetherEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo?.GetCustomAttribute<DescriptionAttribute>();
                                string displayName = description?.Description ?? ((WhetherEnum)item).ToString();
                                // æ ¹æ®æžšä¸¾å€¼æä¾›ä¸­æ–‡åç§°
                                switch ((WhetherEnum)item)
                                {
                                    case WhetherEnum.True:
                                        displayName = "是";
                                        break;
                                    case WhetherEnum.False:
                                        displayName = "否";
                                        break;
                                }
                                data.Add(new { key = item.ToString(), value = displayName });
                            }
                            // ä¸ºå…¼å®¹æ€§ï¼ŒåŒæ—¶æ”¯æŒ true/false å­—符串
                            data.Add(new { key = "true", value = "是" });
                            data.Add(new { key = "false", value = "否" });
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "InventoryMaterialType":
                        {
                            // ä½¿ç”¨çœŸå®žçš„物料类型枚举
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(MaterielTypeEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(MaterielTypeEnum).GetField(((MaterielTypeEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo?.GetCustomAttribute<DescriptionAttribute>();
                                string displayName = description?.Description ?? ((MaterielTypeEnum)item).ToString();
                                // æ ¹æ®æžšä¸¾å€¼æä¾›ä¸­æ–‡åç§°
                                switch ((MaterielTypeEnum)item)
                                {
                                    case MaterielTypeEnum.FinishProduct:
                                        displayName = "成品";
                                        break;
                                    case MaterielTypeEnum.HalfProduct:
                                        displayName = "半成品";
                                        break;
                                    case MaterielTypeEnum.RawMateriel:
                                        displayName = "原材料";
                                        break;
                                    case MaterielTypeEnum.SpareParts:
                                        displayName = "备件";
                                        break;
                                }
                                data.Add(new { key = item.ToString(), value = displayName });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "MaterielSourceType":
                        {
                            // ç‰©æ–™æ¥æºç±»åž‹æžšä¸¾
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(MaterielSourceTypeEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(MaterielSourceTypeEnum).GetField(((MaterielSourceTypeEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo?.GetCustomAttribute<DescriptionAttribute>();
                                string displayName = description?.Description ?? ((MaterielSourceTypeEnum)item).ToString();
                                // æ ¹æ®æžšä¸¾å€¼æä¾›ä¸­æ–‡åç§°
                                switch ((MaterielSourceTypeEnum)item)
                                {
                                    case MaterielSourceTypeEnum.PurchasePart:
                                        displayName = "采购件";
                                        break;
                                    case MaterielSourceTypeEnum.SelfMadePart:
                                        displayName = "自制件";
                                        break;
                                    case MaterielSourceTypeEnum.PurchaseAndSelf:
                                        displayName = "采购&自制件";
                                        break;
                                }
                                data.Add(new { key = item.ToString(), value = displayName });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "InventoryMaterialStatus":
                        {
                            // ç‰©æ–™çŠ¶æ€å­—å…¸ - æ ¹æ®ä¸šåŠ¡éœ€æ±‚å®šä¹‰
                            List<object> data = new List<object>
                            {
                                new { key = "1", value = "正常" },
                                new { key = "2", value = "待检" },
                                new { key = "3", value = "合格" },
                                new { key = "4", value = "不合格" },
                                new { key = "5", value = "冻结" },
                                new { key = "6", value = "报废" },
                                new { key = "7", value = "过期" },
                                new { key = "8", value = "损坏" }
                            };
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "locationStatusEnum":
                        {
                            // è´§ä½çŠ¶æ€æžšä¸¾
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(LocationStatusEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(LocationStatusEnum).GetField(((LocationStatusEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo?.GetCustomAttribute<DescriptionAttribute>();
                                data.Add(new { key = item.ToString(), value = description != null ? description.Description : item.ToString() });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "locationTypeEnum":
                        {
                            // è´§ä½ç±»åž‹æžšä¸¾
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(LocationTypeEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(LocationTypeEnum).GetField(((LocationTypeEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo?.GetCustomAttribute<DescriptionAttribute>();
                                data.Add(new { key = item.ToString(), value = description != null ? description.Description : item.ToString() });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "enableStatusEnum":
                        {
                            // è´§ä½ç¦ç”¨çŠ¶æ€æžšä¸¾
                            List<object> data = new List<object>();
                            List<int> enums = Enum.GetValues(typeof(EnableStatusEnum)).Cast<int>().ToList();
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(EnableStatusEnum).GetField(((EnableStatusEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo?.GetCustomAttribute<DescriptionAttribute>();
                                data.Add(new { key = item.ToString(), value = description != null ? description.Description : item.ToString() });
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                }
                return result;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Common.CommonEnum;
@@ -47,6 +47,17 @@
            return Service.IsRelocations(taskNum);
        }
        /// <summary>
        /// å–消任务接口
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns></returns>
        [HttpGet, Route("Cancelinventory"), AllowAnonymous]
        public WebResponseContent Cancelinventory(int taskNum)
        {
            return Service.Cancelinventory(taskNum);
        }
        /// <summary>
@@ -61,54 +72,11 @@
            return Service.DeviceRequestInboundTaskSimple(stationCode, palletCode);
        }
        /// <summary>
        /// MES下发出库任务
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("sendExTask"), AllowAnonymous]
        public ApiResponse<object> sendExTask([FromBody] InOutboundTaskReceived outbound)
        {
            return Service.sendExTask(outbound);
        }
        /// <summary>
        /// MES下发入库任务
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("sendEnTask"), AllowAnonymous]
        public ApiResponse<object> sendEnTask([FromBody] InOutboundTaskReceived outbound)
        [HttpGet, Route("chuku"), AllowAnonymous]
        public WebResponseContent chuku(string locationCode)
        {
            return Service.sendEnTask(outbound);
        }
        /// <summary>
        /// æ–°å»ºè´§ä½
        /// </summary>
        [HttpPost, HttpGet, Route("createLocation"), AllowAnonymous]
        public ApiResponse<object> createLocation([FromBody] List<LocationInfoDto> locationInfo)
        {
            return Service.createLocation(locationInfo);
        }
        /// <summary>
        /// ä¿®æ”¹è´§ä½
        /// </summary>
        [HttpPost, HttpGet, Route("updateLocation"), AllowAnonymous]
        public ApiResponse<object> updateLocation([FromBody] LocationInfoDto locationInfo)
        {
            return Service.updateLocation(locationInfo);
        }
        /// <summary>
        /// åˆ é™¤è´§ä½
        /// </summary>
        [HttpPost, HttpGet, Route("deleteLocation"), AllowAnonymous]
        public ApiResponse<object> deleteLocation([FromBody] List<string> locationCode)
        {
            return Service.deleteLocation(locationCode);
            return Service.chuku(locationCode);
        }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ToMes.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
using Autofac.Core;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core.BaseController;
using WIDESEA_DTO.ToMes;
using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers
{
    /// <summary>
    /// ä¸Šæ¸¸æŽ¥å£
    /// </summary>
    [Route("v1/pallet/rmsPalletTask")]
    [ApiController]
    public class ToMes : ApiBaseController<ITaskService, Dt_Task>
    {
        public ToMes(ITaskService service) : base(service)
        {
        }
        /// <summary>
        /// MES下发出库任务
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("sendExTask"), AllowAnonymous]
        public ApiResponse<object> sendExTask([FromBody] InOutboundTaskReceived outbound)
        {
            return Service.sendExTask(outbound);
        }
        /// <summary>
        /// MES下发入库任务
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("sendEnTask"), AllowAnonymous]
        public ApiResponse<object> sendEnTask([FromBody] InOutboundTaskReceived outbound)
        {
            return Service.sendEnTask(outbound);
        }
        /// <summary>
        /// æ–°å»ºè´§ä½
        /// </summary>
        [HttpPost, HttpGet, Route("createLocation"), AllowAnonymous]
        public ApiResponse<object> createLocation([FromBody] List<LocationInfoDto> locationInfo)
        {
            return Service.createLocation(locationInfo);
        }
        /// <summary>
        /// ä¿®æ”¹è´§ä½
        /// </summary>
        [HttpPost, HttpGet, Route("updateLocation"), AllowAnonymous]
        public ApiResponse<object> updateLocation([FromBody] LocationInfoDto locationInfo)
        {
            return Service.updateLocation(locationInfo);
        }
        /// <summary>
        /// åˆ é™¤è´§ä½
        /// </summary>
        [HttpPost, HttpGet, Route("deleteLocation"), AllowAnonymous]
        public ApiResponse<object> deleteLocation([FromBody] List<string> locationCode)
        {
            return Service.deleteLocation(locationCode);
        }
        /// <summary>
        /// MES下发库位调拨任务
        /// </summary>
        /// <param name="allocationTask">库位调拨任务信息</param>
        /// <returns></returns>
        [HttpPost, Route("onHandMove"), AllowAnonymous]
        public ApiResponse<object> sendAllocationTask([FromBody] AllocationTaskReceived allocationTask)
        {
            return Service.sendAllocationTask(allocationTask);
        }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -6,7 +6,7 @@
            "Microsoft.AspNetCore": "Warning"
        }
    },
    "dics": "inOrderType,outOrderType,inboundState,createType,enableEnum,enableStatusEnum,locationStatusEnum,locationTypeEnum,taskTypeEnum,taskStatusEnum,outboundStatusEnum,orderDetailStatusEnum,stockStatusEmun,stockChangeType,outStockStatus,receiveOrderTypeEnum,authorityScope,authorityScopes,locationChangeType,warehouses,suppliers,taskType,receiveStatus,purchaseType,purchaseOrderStatus,printStatus",
    "dics": "inOrderType,outOrderType,inboundState,createType,enableEnum,enableStatusEnum,locationStatusEnum,locationTypeEnum,taskTypeEnum,taskStatusEnum,outboundStatusEnum,orderDetailStatusEnum,stockStatusEmun,stockChangeTypeEnum,outStockStatus,receiveOrderTypeEnum,authorityScope,authorityScopes,locationChangeType,warehouses,suppliers,taskType,receiveStatus,purchaseType,purchaseOrderStatus,printStatus,InventoryMaterialType,InventoryMaterialStatus,MaterielSourceType,yesno",
    "AllowedHosts": "*",
    "ConnectionStringsEncryption": false,
    "MainDB": "DB_WIDESEA", //当前项目的主库,所对应的连接字符串的Enabled必须为true
@@ -17,13 +17,13 @@
    //旧WMS数据库连接
    //"TeConnectionString": "Data Source=10.30.4.92;Initial Catalog=TeChuang;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
    //跨域
    "Cors": {
        "PolicyName": "CorsIpAccess", //策略名称
        "EnableAllIPs": true, //当为true时,开放所有IP均可访问。
        // æ”¯æŒå¤šä¸ªåŸŸåç«¯å£ï¼Œæ³¨æ„ç«¯å£å·åŽä¸è¦å¸¦/斜杆:比如localhost:8000/,是错的
        // æ³¨æ„ï¼Œhttp://127.0.0.1:1818 å’Œ http://localhost:1818 æ˜¯ä¸ä¸€æ ·çš„
        "IPs": "http://127.0.0.1:8080,http://localhost:8080,http://127.0.0.1:8081,http://localhost:8081"
    },
  "Cors": {
    "PolicyName": "CorsIpAccess", //策略名称
    "EnableAllIPs": true, //当为true时,开放所有IP均可访问。
    // æ”¯æŒå¤šä¸ªåŸŸåç«¯å£ï¼Œæ³¨æ„ç«¯å£å·åŽä¸è¦å¸¦/斜杆:比如localhost:8000/,是错的
    // æ³¨æ„ï¼Œhttp://127.0.0.1:1818 å’Œ http://localhost:1818 æ˜¯ä¸ä¸€æ ·çš„
    "IPs": "http://10.6.125.12:9290,http://localhost:8080,http://127.0.0.1:8081,http://localhost:8081"
  },
    "LogAopEnable": false,
    "PrintSql": false, //打印SQL语句
    "ApiName": "WIDESEA",