1
yangpeixing
2026-01-19 fd5a43c2e677740482b8d25195120ffa75c5ac77
1
已添加19个文件
已重命名1个文件
已修改22个文件
1680 ■■■■ 文件已修改
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/6b3736ba-630f-476c-9f4e-0d99fe3ed3a0.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderCP.js 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/router/viewGird.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/views/inbound/takeStockOrderCP.vue 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0bbc4c8d-52fc-48e7-998a-998139b31e02.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/209a70e9-a93a-4099-bb48-f6583e895856.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c1d52971-2c06-44dd-9a29-da27923e6af5.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d36a016b-a94a-49ea-9e1f-c42b0b35806c.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/HierarchyCache.v1.txt 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Common/HouseAdjustment.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Core/AOP/LogAOP.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/OrderEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/ITakeStockOrderCPRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/ITakeStockOrderDetailCPRepository.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderCPService.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderDetailCPService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/TakeStockOrderCPRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/TakeStockOrderDetailCPRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/TakeStockOrderCPService.cs 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/TakeStockOrderDetailCPService.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderCP.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderDetailCP.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfo.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/VV_StockInfoDet.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/VV_StockInfoDetService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 352 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderCPController.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderDetailCPController.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
吉安PDA/pages/stash/Syncretism.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/6b3736ba-630f-476c-9f4e-0d99fe3ed3a0.vsidx
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo
Binary files differ
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json
@@ -94,8 +94,7 @@
              "RelativeToolTip": "WIDESEAWCS_Tasks\\\u5806\u579B\u673A\\StackerCraneJob_CP.cs",
              "ViewState": "AgIAAIYAAAAAAAAAAAAuwJsAAAAZAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-11T00:40:43.019Z",
              "EditorCaption": ""
              "WhenOpened": "2026-01-11T00:40:43.019Z"
            },
            {
              "$type": "Document",
@@ -107,8 +106,7 @@
              "RelativeToolTip": "WIDESEAWCS_Tasks\\\u5806\u579B\u673A\\StackerCraneJob_YS.cs",
              "ViewState": "AgIAAH8AAAAAAAAAAAAIwJoAAAAYAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-10T03:13:51.591Z",
              "EditorCaption": ""
              "WhenOpened": "2026-01-10T03:13:51.591Z"
            },
            {
              "$type": "Document",
@@ -144,8 +142,7 @@
              "RelativeToolTip": "WIDESEAWCS_Tasks\\RGV\\RGVJob_L1.cs",
              "ViewState": "AgIAAE0AAAAAAAAAAAAIwFUAAAAZAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-09T06:45:58.141Z",
              "EditorCaption": ""
              "WhenOpened": "2026-01-09T06:45:58.141Z"
            },
            {
              "$type": "Document",
@@ -157,8 +154,7 @@
              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAABUAAAANAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
              "WhenOpened": "2026-01-08T10:46:15.09Z",
              "EditorCaption": ""
              "WhenOpened": "2026-01-08T10:46:15.09Z"
            },
            {
              "$type": "Document",
@@ -170,8 +166,7 @@
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ViewState": "AgIAAIsAAAAAAAAAAAAAwJsAAAB2AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-08T09:45:25.115Z",
              "EditorCaption": ""
              "WhenOpened": "2026-01-08T09:45:25.115Z"
            },
            {
              "$type": "Document",
@@ -195,8 +190,7 @@
              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "ViewState": "AgIAAFcAAAAAAAAAAAAuwGcAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-08T09:43:55.271Z",
              "EditorCaption": ""
              "WhenOpened": "2026-01-08T09:43:55.271Z"
            },
            {
              "$type": "Document",
@@ -232,8 +226,7 @@
              "RelativeToolTip": "WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
              "ViewState": "AgIAACgBAAAAAAAAAAAuwDgBAABaAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-24T06:51:20.03Z",
              "EditorCaption": ""
              "WhenOpened": "2025-07-24T06:51:20.03Z"
            },
            {
              "$type": "Document",
@@ -243,7 +236,7 @@
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ViewState": "AgIAANkBAAAAAAAAAAA8wPQBAAAIAAAAAAAAAA==",
              "ViewState": "AgIAAPIBAAAAAAAAAAAowAUCAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-23T05:44:58.595Z",
              "EditorCaption": ""
@@ -270,8 +263,7 @@
              "RelativeToolTip": "WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\ConveyorLineJob_BC.cs",
              "ViewState": "AgIAALsAAAAAAAAAAAAIwMwAAABCAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-23T04:01:37.222Z",
              "EditorCaption": ""
              "WhenOpened": "2025-07-23T04:01:37.222Z"
            },
            {
              "$type": "Document",
WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
@@ -3,6 +3,22 @@
  "WorkspaceRootPath": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\\u677F\u6750\u4ED3\\rgvjob_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\\u677F\u6750\u4ED3\\rgvjob_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\rgv\\rgvjob_l1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\rgv\\rgvjob_l1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\rgv\\rgvjob_l2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\rgv\\rgvjob_l2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
@@ -19,24 +35,8 @@
      "RelativeMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|solutionrelative:wideseawcs_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\\u5806\u579B\u673A\\stackercranejob_cp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\\u5806\u579B\u673A\\stackercranejob_cp.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\rgv\\rgvjob_l1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\rgv\\rgvjob_l1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\rgv\\rgvjob_l2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\rgv\\rgvjob_l2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\\u677F\u6750\u4ED3\\rgvjob_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\\u677F\u6750\u4ED3\\rgvjob_bc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\khgithub\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\jianliku\\wcs\\wideseawcs_server\\wideseawcs_tasks\\\u5806\u579B\u673A\\stackercranejob_ys.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -78,7 +78,7 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 13,
          "SelectedChildIndex": 17,
          "Children": [
            {
              "$type": "Bookmark",
@@ -86,7 +86,7 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "DocumentIndex": 8,
              "Title": "StackerCraneJob_CP.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u5806\u579B\u673A\\StackerCraneJob_CP.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\\u5806\u579B\u673A\\StackerCraneJob_CP.cs",
@@ -122,7 +122,7 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "DocumentIndex": 2,
              "Title": "RGVJob_L2.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RGV\\RGVJob_L2.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RGV\\RGVJob_L2.cs",
@@ -130,11 +130,12 @@
              "RelativeToolTip": "WIDESEAWCS_Tasks\\RGV\\RGVJob_L2.cs",
              "ViewState": "AgIAAE0AAAAAAAAAAAAYwFUAAAAYAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-09T06:57:14.268Z"
              "WhenOpened": "2026-01-09T06:57:14.268Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "DocumentIndex": 1,
              "Title": "RGVJob_L1.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RGV\\RGVJob_L1.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RGV\\RGVJob_L1.cs",
@@ -142,11 +143,12 @@
              "RelativeToolTip": "WIDESEAWCS_Tasks\\RGV\\RGVJob_L1.cs",
              "ViewState": "AgIAAE0AAAAAAAAAAAAIwFUAAAAZAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-09T06:45:58.141Z"
              "WhenOpened": "2026-01-09T06:45:58.141Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "DocumentIndex": 6,
              "Title": "appsettings.json",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
@@ -158,7 +160,7 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "DocumentIndex": 3,
              "Title": "CommonConveyorLineJob.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
@@ -166,7 +168,8 @@
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
              "ViewState": "AgIAAIsAAAAAAAAAAAAAwJsAAAB2AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2026-01-08T09:45:25.115Z"
              "WhenOpened": "2026-01-08T09:45:25.115Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
@@ -182,7 +185,7 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "DocumentIndex": 5,
              "Title": "TaskController.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
@@ -218,7 +221,7 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "DocumentIndex": 7,
              "Title": "ITaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
@@ -230,7 +233,7 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "DocumentIndex": 4,
              "Title": "TaskService.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
@@ -279,15 +282,16 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "DocumentIndex": 0,
              "Title": "RGVJob_BC.cs",
              "DocumentMoniker": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\RGVJob_BC.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\RGVJob_BC.cs",
              "ToolTip": "E:\\KHGITHUB\\\u5409\u5B89\u7ACB\u5E93\u73B0\u7528\u7248\u672C\\JiAnLiKu\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\RGVJob_BC.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\\u677F\u6750\u4ED3\\RGVJob_BC.cs",
              "ViewState": "AgIAAE0AAAAAAAAAAAAswFsAAABvAAAAAAAAAA==",
              "ViewState": "AgIAAEcAAAAAAAAAAAAswGIAAABeAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-07-23T04:01:40.27Z"
              "WhenOpened": "2025-07-23T04:01:40.27Z",
              "EditorCaption": ""
            }
          ]
        }
WMS/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderCP.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
let extension = {
    components: {
      //查询界面扩展组件
      gridHeader: '',
      gridBody: '',
      gridFooter: '',
      //新建、编辑弹出框扩展组件
      modelHeader: '',
      modelBody: '',
      modelFooter: ''
    },
    tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
    buttons: { view: [], box: [], detail: [] }, //扩展的按钮
    methods: {
      onInit() {
        this.columns.push({
          field: '操作',
          title: '操作',
          width: 90,
          fixed: 'right',
          align: 'center',
          formatter: (row) => {
              return (
                  '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">直接出库</i>'
              );
          },
          click: (row) => {
              this.$confirm("是否确认出库","出库操作确认",{
              confirmButtonText: "确定",
              cancelButtonText: "取消",
              type: "warning",
              center: true,
              }).then(() => {
                let rows = this.$refs.table.getSelected();
                if (rows.length == 0) return this.$error("请选择数据!");
                if (rows.length > 1) return this.$error("请选择一条数据!");
                const keys = rows.map(row => row.id);
                // å‘送POST请求,将ID数组作为请求体发送
                this.http
                .post("api/Task/SMOMGenerateSTOutboundTask", keys, "数据处理中...")
                .then((x) => {
                    if (x.status) {
                    this.$Message.success('操作成功');
                    this.refresh();
                  } else {
                    return this.$error(x.message);
                  }
                });
              });
          }
      });
      },
      onInited() {
        //框架初始化配置后
        //如果要配置明细表,在此方法操作
        //this.detailOptions.columns.forEach(column=>{ });
      },
      searchBefore(param) {
        //界面查询前,可以给param.wheres添加查询参数
        //返回false,则不会执行查询
        return true;
      },
      searchAfter(result) {
        //查询后,result返回的查询数据,可以在显示到表格前处理表格的值
        return true;
      },
      addBefore(formData) {
        //新建保存前formData为对象,包括明细表,可以给给表单设置值,自己输出看formData的值
        return true;
      },
      updateBefore(formData) {
        //编辑保存前formData为对象,包括明细表、删除行的Id
        return true;
      },
      rowClick({ row, column, event }) {
        //查询界面点击行事件
        this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
      },
      modelOpenAfter(row) {
        //点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
        //(1)判断是编辑还是新建操作: this.currentAction=='Add';
        //(2)给弹出框设置默认值
        //(3)this.editFormFields.字段='xxx';
        //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
        //看不懂就把输出看:console.log(this.editFormOptions)
      }
    }
  };
  export default extension;
WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.js
@@ -190,7 +190,7 @@
        align: 'center',
        formatter: (row) => {
            return (
                '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">直接出库</i>'
                '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">合托出库</i>'
            );
        },
        click: (row) => {
WMS/WIDESEA_WMSClient/src/router/viewGird.js
@@ -132,6 +132,10 @@
    path: '/takeStockOrder',
    name: 'takeStockOrder',
    component: () => import('@/views/inbound/takeStockOrder.vue')
  }, {
    path: '/takeStockOrderCP',
    name: 'takeStockOrderCP',
    component: () => import('@/views/inbound/takeStockOrderCP.vue')
  }]
export default viewgird
WMS/WIDESEA_WMSClient/src/views/inbound/takeStockOrderCP.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,293 @@
<template>
    <!-- <div>
      <assemble-dist></assemble-dist>
    </div> -->
    <view-grid
      ref="grid"
      :columns="columns"
      :detail="detail"
      :editFormFields="editFormFields"
      :editFormOptions="editFormOptions"
      :searchFormFields="searchFormFields"
      :searchFormOptions="searchFormOptions"
      :table="table"
      :extend="extend"
    >
    </view-grid>
  </template>
<script>
  import extend from "@/extension/inbound/takeStockOrderCP.js";
  import { ref, defineComponent } from "vue";
  // import AssembleDistVue from '../charts/AssembleDist.vue';
  export default defineComponent({
    // components: {
    //   'assemble-dist': AssembleDistVue,
    // },
    setup() {
      //使用组件AssembleDist
      const table = ref({
        key: "id",
        footer: "Foots",
        cnName: "盘点单",
        name: "takeStockOrderCP",
        url: "/TakeStockOrderCP/",
        sortName: "id",
      });
      const searchFormFields = ref({
        orderNo:""
      });
      const searchFormOptions = ref([
        [
        { title: "单据编号", field: "orderNo", type: "like" },
        ]
      ]);
      const editFormFields = ref({
        orderNo:"",
        warehouseId: "",
        remark:""
      });
      const editFormOptions = ref([
      [
        {
          field: "orderNo",
          title: "单据编号",
          type: "string",
          readonly: "true",
        },
        {
          title: "仓库",
          field: "warehouseId",
          type: "select",
          dataKey: "warehouses",
          data: [],
          required: true,
        },
        {
          field: "remark",
          title: "备注",
          type: "string",
        }
      ]
      ]);
      const columns = ref([
        {
          field: "id",
          title: "Id",
          type: "int",
          width: 90,
          hidden: true,
          readonly: true,
          require: true,
          align: "left",
        },
        {
          field: "orderNo",
          title: "盘点单号",
          type: "string",
          width: 150,
          align: "left",
          link: true,
        },
        {
          field: "takeStockStatus",
          title: "盘点状态",
          type: "string",
          width: 120,
          align: "left",
          bind: { key: "takeStockStatusEnum", data: [] },
        },
        {
          field: "warehouseId",
          title: "仓库",
          type: "string",
          width: 90,
          align: "left",
          bind:{key: "warehouses", data: []}
        },
        {
          field: "creater",
          title: "创建人",
          type: "string",
          width: 90,
          align: "left",
        },
        {
          field: "createDate",
          title: "创建时间",
          type: "datetime",
          width: 160,
          align: "left",
        },
        {
          field: "modifier",
          title: "修改人",
          type: "string",
          width: 100,
          align: "left",
        },
        {
          field: "modifyDate",
          title: "修改时间",
          type: "datetime",
          width: 160,
          align: "left",
        },
        {
          field: "remark",
          title: "备注",
          type: "string",
          width: 100,
          align: "left",
        },
      ]);
      const detail = ref({
        cnName: "盘点明细",
        table: "Dt_TakeStockOrderDetail",
        columns: [
          {
            field: "id",
            title: "Id",
            type: "int",
            width: 90,
            hidden: true,
            readonly: true,
            require: true,
            align: "left",
          },
          {
            field: "takeStockId",
            title: "盘点单主键",
            type: "string",
            width: 90,
            align: "left",
            hidden: true,
          },
          {
            field: "takePalletCode",
            title: "盘点托盘",
            type: "string",
            width: 150,
            align: "left",
            required: true,
          },
          {
            field: "takeDetalStatus",
            title: "盘点明细状态",
            type: "int",
            width: 130,
            align: "left",
            bind: { key: "takeStockDetailStatusEnum", data: [] },
          },
          {
            field: "materielCode",
            title: "物料编码",
            type: "string",
            width: 110,
            align: "left",
            required: true,
          },
          {
            field: "materielName",
            title: "物料名称",
            type: "string",
            width: 120,
            align: "left",
            required: true,
          },
          {
            field: "batchNo",
            title: "批次号",
            type: "string",
            width: 130,
            align: "left",
            required: true,
          },
          {
            field: "materielSpec",
            title: "物料名称",
            type: "string",
            width: 120,
            align: "left",
            required: true,
          },
          {
            field: "sysQty",
            title: "账面数量",
            type: "decimal",
            width: 90,
            align: "left",
            required: true,
            edit: { type: "decimal" }
          },
          {
            field: "qty",
            title: "实盘数量",
            type: "decimal",
            width: 90,
            align: "left",
            required: true,
            edit: { type: "decimal" }
          },
          {
            field: "unit",
            title: "单位",
            type: "string",
            width: 90,
            align: "left",
          },
          {
            field: "creater",
            title: "创建人",
            type: "string",
            width: 90,
            align: "left",
          },
          {
            field: "createDate",
            title: "创建时间",
            type: "datetime",
            width: 160,
            align: "left",
          },
          {
            field: "modifier",
            title: "修改人",
            type: "string",
            width: 100,
            align: "left",
          },
          {
            field: "modifyDate",
            title: "修改时间",
            type: "datetime",
            width: 160,
            align: "left",
          },
          {
            field: "remark",
            title: "备注",
            type: "string",
            width: 100,
            align: "left",
          },
        ],
        sortName: "id",
        key: "id",
      });
      return {
        table,
        extend,
        editFormFields,
        editFormOptions,
        searchFormFields,
        searchFormOptions,
        columns,
        detail,
      };
    },
  });
  </script>
WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue
@@ -69,6 +69,17 @@
        },
        { title: "库存创建时间", field: "createDate", type: "datetime" },
      ],
      [
        {
          title:"上游系统",
          field:"system",
          type:"select",
            data: [
          { key: "SMOM", value: "SMOM" },
          { key: "ERP", value: "ERP" },
        ]
        }
      ]
    ]);
    const columns = ref([
      {
@@ -172,6 +183,14 @@
        align: "left",
        hidden: true,
      },
       {
        field: "system",
        title: "上游系统",
        type: "string",
        width: 100,
        align: "left",
        // hidden: true,
      },
      {
        field: "stockStatus",
        title: "库存状态",
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0bbc4c8d-52fc-48e7-998a-998139b31e02.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/209a70e9-a93a-4099-bb48-f6583e895856.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c1d52971-2c06-44dd-9a29-da27923e6af5.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d36a016b-a94a-49ea-9e1f-c42b0b35806c.vsidx
Binary files differ
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json
@@ -196,7 +196,7 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "DocumentIndex": 18,
              "Title": "PartialTaskService_Inbound.cs",
              "DocumentMoniker": "D:\\\u9879\u76EE\\1.16\\JiAnLiKu\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
              "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\PartialTaskService_Inbound.cs",
WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/HierarchyCache.v1.txt
Binary files differ
WMS/WIDESEA_WMSServer/WIDESEA_Common/HouseAdjustment.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common
{
    public class HouseAdjustment
    {
        public List<detailList> DetailList = new List<detailList>();
        public class detailList
        {
            /// <summary>
            /// æ‰˜ç›˜å·
            /// </summary>
            public string LPNNo { get; set; }
            /// <summary>
            /// ç‰©æ–™ç¼–码
            /// </summary>
            public string MaterielCode { get; set; }
            /// <summary>
            /// ç‰©æ–™åç§°
            /// </summary>
            public string MaterielName { get; set; }
            /// <summary>
            /// æ‰¹æ¬¡å·
            /// </summary>
            public string BatchNo { get; set; }
            /// <summary>
            ///
            /// </summary>
            public string LinId { get; set; }
            /// <summary>
            /// ç›˜ç‚¹åŽæ•°é‡
            /// </summary>
            public decimal OrderQuantity { get; set; }
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Core/AOP/LogAOP.cs
@@ -82,7 +82,7 @@
                            async () => await SuccessAction(invocation, apiLogAopInfo, startTime), /*成功时执行*/
                            ex =>
                            {
                                LogEx(ex, apiLogAopInfo);
                                //LogEx(ex, apiLogAopInfo);
                            });
                    }
                    //Task<TResult>
@@ -95,7 +95,7 @@
                            async (o) => await SuccessAction(invocation, apiLogAopInfo, startTime, o), /*成功时执行*/
                            ex =>
                            {
                                LogEx(ex, apiLogAopInfo);
                                //LogEx(ex, apiLogAopInfo);
                            });
                    }
@@ -146,13 +146,13 @@
                    apiLogAopInfo.ResponseJsonData = jsonResult;
                    Parallel.For(0, 1, e =>
                    {
                        LogLock.OutLogAOP("AOPLog", new string[] { apiLogAopInfo.GetType().ToString(), JsonConvert.SerializeObject(apiLogAopInfo) });
                        //LogLock.OutLogAOP("AOPLog", new string[] { apiLogAopInfo.GetType().ToString(), JsonConvert.SerializeObject(apiLogAopInfo) });
                    });
                }
            }
            catch (Exception ex) // åŒæ­¥2
            {
                LogEx(ex, apiLogAopInfo);
                //LogEx(ex, apiLogAopInfo);
                throw;
            }
        }
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/OrderEnum.cs
@@ -54,6 +54,12 @@
        [Description("反拣出库单")]
        åæ‹£å‡ºåº“单 = 6,
        /// <summary>
        /// ç›˜ç‚¹å›žåº“单
        /// </summary>
        [Description("盘点回库单")]
        ç›˜ç‚¹å›žåº“单 = 7,
    }
    /// <summary>
    /// å•据大类
WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockViewDTO.cs
@@ -122,6 +122,12 @@
        public string BatchNo { get; set; }
        /// <summary>
        /// ä¸Šæ¸¸ç³»ç»Ÿ
        /// </summary>
        [ExporterHeader(DisplayName = "上游系统")]
        public string System { get; set; }
        /// <summary>
        ///供应商批号
        /// </summary>
        [ExporterHeader(DisplayName = "供应商批次")]
WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/ITakeStockOrderCPRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IInboundRepository
{
    /// <summary>
    /// ç›˜ç‚¹å•仓储接口层
    /// </summary>
    public interface ITakeStockOrderCPRepository : IRepository<Dt_TakeStockOrderCP>
    {
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/ITakeStockOrderDetailCPRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IInboundRepository
{
    /// <summary>
    /// ç›˜ç‚¹å•明细仓储接口层
    /// </summary>
    public interface ITakeStockOrderDetailCPRepository : IRepository<Dt_TakeStockOrderDetailCP>
    {
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderCPService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_DTO.ERP;
using WIDESEA_IInboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IInboundService
{
    public interface ITakeStockOrderCPService : IService<Dt_TakeStockOrderCP>
    {
        ITakeStockOrderCPRepository Repository { get; }
        //smom盘点任务
        WebResponseContent NewInventoryOut(HouseCancelOut houseInventoryOut);
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderDetailCPService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_DTO.ERP;
using WIDESEA_IInboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IInboundService
{
    public interface ITakeStockOrderDetailCPService : IService<Dt_TakeStockOrderDetailCP>
    {
        ITakeStockOrderDetailCPRepository Repository { get; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -65,6 +65,7 @@
        WebResponseContent OutboundTaskCompleted(int taskNum);
        WebResponseContent AddOutboundOrders(Houseounbound orderAddDTO);
        WebResponseContent InventoryOut(HouseCancelOut houseInventoryOut);
        WebResponseContent SMOMAdjustment(HouseAdjustment houseAdjustment);
        WebResponseContent InventoryIn(string name, int qty);
        /// <summary>
        /// åˆ†é…å··é“
@@ -101,5 +102,7 @@
        WebResponseContent WMSGenerateNewOutboundTask(int[] keys);
        WebResponseContent WMSGenerateSTOutboundTask(int[] keys);
        WebResponseContent SMOMGenerateSTOutboundTask(int[] keys);
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/TakeStockOrderCPRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_IInboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_InboundRepository
{
    /// <summary>
    /// ç›˜ç‚¹å•仓储实现层
    /// </summary>
    public class TakeStockOrderCPRepository : RepositoryBase<Dt_TakeStockOrderCP>, ITakeStockOrderCPRepository
    {
        public TakeStockOrderCPRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/TakeStockOrderDetailCPRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_IInboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_InboundRepository
{
    /// <summary>
    /// ç›˜ç‚¹å•仓储实现层
    /// </summary>
    public class TakeStockOrderDetailCPRepository : RepositoryBase<Dt_TakeStockOrderDetailCP>, ITakeStockOrderDetailCPRepository
    {
        public TakeStockOrderDetailCPRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs
@@ -213,6 +213,7 @@
                        Wlstatus = (int)InventoryMaterialStatus.合格,
                        Mgeneratetime = DateTime.Now,
                        WarehouseId = warehouse.WarehouseId,
                        System = inboundOrder.System,
                        Details = new List<Dt_StockInfoDetail>()
                    };
                }
@@ -454,6 +455,7 @@
                        Wlstatus = (int)InventoryMaterialStatus.合格,
                        Mgeneratetime = DateTime.Now,
                        WarehouseId = warehouse.WarehouseId,
                        System = inboundOrder.System,
                        Details = new List<Dt_StockInfoDetail>()
                    };
                }
@@ -722,6 +724,7 @@
                        Wlstatus = (int)InventoryMaterialStatus.合格,
                        Mgeneratetime = DateTime.Now,
                        WarehouseId = warehouse.WarehouseId,
                        System = inboundOrder.System,
                        Details = new List<Dt_StockInfoDetail>()
                    };
                }
@@ -869,10 +872,46 @@
                {
                    throw new Exception("库存未找到托盘号");
                }
                var sameItems = from sourceItem in stockInfo.Details
                                join targetItem in targetstockInfo.Details
                                on new
                                {
                                    sourceItem.BatchNo,
                                    sourceItem.MaterielName,
                                    sourceItem.MaterielCode
                                }
                                equals new
                                {
                                    targetItem.BatchNo,
                                    targetItem.MaterielName,
                                    targetItem.MaterielCode
                                }
                                select new
                                {
                                    SourceItem = sourceItem,
                                    TargetItem = targetItem,
                                    BatchNo = sourceItem.BatchNo,
                                    MaterialCode = sourceItem.MaterielCode,
                                    MaterialType = sourceItem.MaterielName
                                };
                var matchedSourceItemIds = sameItems.Select(x => x.SourceItem.Id).ToList();
                foreach (var item in stockInfo.Details)
                {
                    item.StockId = targetstockInfo.Id;
                    if (!matchedSourceItemIds.Contains(item.Id))
                    {
                        item.StockId = targetstockInfo.Id;
                    }
                }
                var differentItems = stockInfo.Details
      .Where(x => !matchedSourceItemIds.Contains(x.Id))
      .ToList();
                targetstockInfo.Details = targetstockInfo.Details
      .Where(x => !matchedSourceItemIds.Contains(x.Id))
      .Concat(differentItems)
      .ToList();
                if (warehouse.WarehouseCode == "SC02_CP")
                {
                    warehouse.WarehouseCode = "SC01_CP";
@@ -905,21 +944,6 @@
                        }).ToList()
                            }
                    }
                    //    Parameters = stockInfo.Details.Select(g => new HouseSyncretism.data
                    //    {
                    //        Lpn = stockInfo.PalletCode,
                    //        MoveType = 0,
                    //        WareHouseCode = warehouse.WarehouseCode,
                    //        ItemCode = g.MaterielCode,
                    //        MoveNumber = g.StockQuantity,
                    //        //LotNo = g.,
                    //        WipBatch = g.BatchNo,
                    //        LocationName = stockInfo.PalletCode,
                    //        TargetLocName = targetstockInfo.PalletCode,
                    //        TargetLpn = targetstockInfo.PalletCode,
                    //    }).ToList()
                    //};
                };
                var authResult = AuthenticateWithWMS();
                if (authResult.IsSuccess)
@@ -940,10 +964,15 @@
                }
                _unitOfWorkManage.BeginTran();
                targetstockInfo.Details.AddRange(stockInfo.Details);
                foreach (var sameItem in sameItems)
                {
                    sameItem.TargetItem.StockQuantity += sameItem.SourceItem.StockQuantity;
                    _stockRepository.StockInfoDetailRepository.UpdateData(sameItem.TargetItem);
                    _stockRepository.StockInfoDetailRepository.DeleteData(sameItem.SourceItem);
                }
                _stockRepository.StockInfoRepository.UpdateData(targetstockInfo);
                _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
                _stockRepository.StockInfoRepository.DeleteData(stockInfo);
                _unitOfWorkManage.CommitTran();
                webResponseContent = WebResponseContent.Instance.OK("合托成功");
            }
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/TakeStockOrderCPService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
using WIDESEA_Model.Models;
using WIDESEA_DTO.ERP;
using WIDESEA_Core.BaseRepository;
using WIDESEA_IBasicRepository;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Core.Helper;
using Microsoft.AspNetCore.Mvc.RazorPages;
using WIDESEA_InboundRepository;
using WIDESEA_IStockRepository;
using WIDESEA_Core.Enums;
using SqlSugar;
using System.Collections;
using WIDESEA_Common;
using WIDESEA_DTO.Outbound;
using WIDESEA_Core.TaskEnum;
namespace WIDESEA_InboundService
{
    public class TakeStockOrderCPService : ServiceBase<Dt_TakeStockOrderCP, ITakeStockOrderCPRepository>, ITakeStockOrderCPService
    {
        public ITakeStockOrderCPRepository Repository => BaseDal;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IBasicRepository _basicRepository;
        private readonly ITakeStockOrderDetailCPRepository _takeStockOrderDetailCPRepository;
        private readonly IStockInfoRepository _stockInfoRepository;
        private readonly IStockInfoDetailRepository _stockInfoDetailRepository;
        public TakeStockOrderCPService(ITakeStockOrderCPRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, ITakeStockOrderDetailCPRepository takeStockOrderDetailCPRepository, IStockInfoRepository stockInfoRepository, IStockInfoDetailRepository stockInfoDetailRepository) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _basicRepository = basicRepository;
            _takeStockOrderDetailCPRepository = takeStockOrderDetailCPRepository;
            _stockInfoRepository = stockInfoRepository;
            _stockInfoDetailRepository = stockInfoDetailRepository;
        }
        //smom下发盘点任务
        public WebResponseContent NewInventoryOut(HouseCancelOut houseInventoryOut)
        {
            WebResponseContent content = new();
            try
            {
                Dt_TakeStockOrderCP takeStockOrderCP = BaseDal.QueryFirst(x => x.OrderNo == houseInventoryOut.No);
                if (takeStockOrderCP != null)
                {
                    OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO();
                    orderAddDTO1.Details = houseInventoryOut.DetailList.DicToIEnumerable<OutboundOrderDetailAddDTO>();
                    foreach (var item in orderAddDTO1.Details)
                    {
                        Dt_TakeStockOrderDetailCP takeStockOrderDetail = new Dt_TakeStockOrderDetailCP()
                        {
                            TakeStockId = takeStockOrderCP.Id,
                            MaterielCode = item.MaterielCode,
                            MaterielName = item.MaterielName,
                            BatchNo = item.BatchNo,
                            MaterielSpec = item.MaterieSpec,
                            SysQty = item.OrderQuantity,
                            TakeDetalStatus = TakeStockDetailStatusEnum.未盘点.ObjToInt(),
                        };
                        takeStockOrderCP.Details.Add(takeStockOrderDetail);
                    }
                }
                else
                {
                    OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO();
                    orderAddDTO1.Details = houseInventoryOut.DetailList.DicToIEnumerable<OutboundOrderDetailAddDTO>();
                    Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == orderAddDTO1.Details.FirstOrDefault().WarehouseCode);
                    takeStockOrderCP = new Dt_TakeStockOrderCP()
                    {
                        OrderNo = houseInventoryOut.No,
                        WarehouseId = warehouse.WarehouseId,
                        TakeStockStatus = TakeStockDetailStatusEnum.未盘点.ObjToInt(),
                        Details = new List<Dt_TakeStockOrderDetailCP>()
                    };
                    foreach (var item in orderAddDTO1.Details)
                    {
                        Dt_TakeStockOrderDetailCP takeStockOrderDetail = new Dt_TakeStockOrderDetailCP()
                        {
                            TakeStockId = takeStockOrderCP.Id,
                            MaterielCode = item.MaterielCode,
                            MaterielName = item.MaterielName,
                            BatchNo = item.BatchNo,
                            MaterielSpec = item.MaterieSpec,
                            SysQty = item.OrderQuantity,
                            TakeDetalStatus = TakeStockDetailStatusEnum.未盘点.ObjToInt(),
                        };
                        takeStockOrderCP.Details.Add(takeStockOrderDetail);
                    }
                }
                _unitOfWorkManage.BeginTran();
                BaseDal.Db.InsertNav(takeStockOrderCP).Include(x => x.Details).ExecuteCommand();
                _unitOfWorkManage.CommitTran();
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            finally
            {
            }
            return content;
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/TakeStockOrderDetailCPService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_InboundService.Base
{
    internal class TakeStockOrderDetailCPService
    {
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderCP.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
using WIDESEA_Core.CodeConfigEnum;
using WIDESEA_Core.DB.Models;
using WIDESEA_Core.Enums;
namespace WIDESEA_Model.Models
{
    /// <summary>
    /// ç›˜ç‚¹å•
    /// </summary>
    [SugarTable(nameof(Dt_TakeStockOrderCP), "成品盘点单")]
    public class Dt_TakeStockOrderCP : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// ç›˜ç‚¹å•号
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "盘点单号")]
        public string OrderNo { get; set; }
        /// <summary>
        /// ä»“库主键
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "仓库主键")]
        public int WarehouseId { get; set; }
        /// <summary>
        /// ç›˜ç‚¹çŠ¶æ€
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "盘点状态")]
        public int TakeStockStatus { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "备注")]
        public string Remark { get; set; }
        /// <summary>
        /// ç›˜ç‚¹æ˜Žç»†
        /// </summary>
        [PropertyValidate("盘点明细", NotNullAndEmpty = true), Navigate(NavigateType.OneToMany, nameof(Dt_TakeStockOrderDetailCP.TakeStockId), nameof(Id))]
        public List<Dt_TakeStockOrderDetailCP> Details { get; set; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderDetailCP.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.DB.Models;
namespace WIDESEA_Model.Models
{
    /// <summary>
    /// ç›˜ç‚¹å•明细
    /// </summary>
    [SugarTable(nameof(Dt_TakeStockOrderDetailCP), "成品盘点单明细")]
    public class Dt_TakeStockOrderDetailCP : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// ç›˜ç‚¹å•主键
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "盘点单主键")]
        public int TakeStockId { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "物料编码")]
        public string MaterielCode { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "物料名称")]
        public string MaterielName { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "批次号")]
        public string BatchNo { get; set; }
        /// <summary>
        /// ç‰©æ–™è§„æ ¼
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "物料规格")]
        public string MaterielSpec { get; set; }
        /// <summary>
        /// åŽŸä»“ä½
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "原仓位")]
        public string LocationCode { get; set; }
        /// <summary>
        /// ç›˜ç‚¹æ‰˜ç›˜
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "盘点托盘")]
        public string TakePalletCode { get; set; }
        /// <summary>
        /// ç›˜ç‚¹æ˜Žç»†çŠ¶æ€
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "盘点明细状态")]
        public int TakeDetalStatus { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "单位")]
        public string Unit { get; set; }
        /// <summary>
        /// è´¦é¢æ•°é‡
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "账面数量")]
        public decimal SysQty { get; set; }
        /// <summary>
        /// å®žç›˜æ•°é‡
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "实盘数量")]
        public decimal Qty { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "备注")]
        public string Remark { get; set; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfo.cs
@@ -57,6 +57,9 @@
        [SugarColumn(IsNullable = true, ColumnDescription = "备注")]
        public string Remark { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "上游系统")]
        public string System { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "生产时间")]
        public DateTime Mgeneratetime { get; set; }
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/VV_StockInfoDet.cs
@@ -13,8 +13,8 @@
    [SugarTable(nameof(VV_StockInfoDet), "库存展示信息")]
    public class VV_StockInfoDet
    {
        [ExporterHeader(DisplayName = "托盘编号",IsIgnore =true)]
        [SugarColumn(IsNullable = true, Length = 50,  ColumnDescription = "托盘编号")]
        [ExporterHeader(DisplayName = "托盘编号", IsIgnore = true)]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "托盘编号")]
        public string PalletCode { get; set; }
        [ExporterHeader(DisplayName = "类型")]
@@ -48,7 +48,11 @@
        [SugarColumn(IsNullable = false, Length = 100, ColumnDescription = "序列号")]
        public string SerialNumber { get; set; }
        [ExporterHeader(DisplayName = "上游系统", IsIgnore = true)]
        [SugarColumn(IsNullable = false, Length = 255, ColumnDescription = "上游系统")]
        public string System { get; set; }
        [ExporterHeader(DisplayName = "库存数量")]
        [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "库存数量")]
        public decimal StockQuantity { get; set; }
WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs
@@ -46,7 +46,7 @@
                {
                    try
                    {
                        List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
                        if (searchParametersList?.Any() == true)
                        {
@@ -58,7 +58,14 @@
                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
                                        {
                                            sugarQueryable1 = sugarQueryable1
                                                .Where(x=>x.PalletCode.Contains(param.Value.ToString()));
                                                .Where(x => x.PalletCode.Contains(param.Value.ToString()));
                                        }
                                        break;
                                    case var name when name == nameof(Dt_StockInfo.System).FirstLetterToLower():
                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
                                        {
                                            sugarQueryable1 = sugarQueryable1
                                                .Where(x => x.System.Contains(param.Value.ToString()));
                                        }
                                        break;
                                    case var name when name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower():
@@ -126,7 +133,7 @@
                    {
                    }
                }
                ISugarQueryable<StockViewDTO> list = sugarQueryable1
                    .InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode)
@@ -148,6 +155,7 @@
                        PalletCode = b.PalletCode,
                        StockRemark = b.Remark,
                        RoadwayNo = a.RoadwayNo,
                        System = b.System,
                        Row = a.Row,
                        StockId = b.Id,
                        StockStatus = b.StockStatus,
@@ -333,7 +341,7 @@
                {
                    x.MaterielCode = string.Join(",", x.Details.Select(d => d.MaterielCode).Distinct());
                    x.BatchNo = string.Join(",", x.Details.Select(d => d.BatchNo).Distinct());
                    x.SupplierBatch= string.Join(",", x.Details.Select(d => d.SupplierBatch).Distinct());
                    x.SupplierBatch = string.Join(",", x.Details.Select(d => d.SupplierBatch).Distinct());
                    x.StockCounts = Math.Round(x.Details.Sum(x => x.StockQuantity), 3).ToString();
                    x.MaterielSpec = x.Details.FirstOrDefault()?.MaterieSpec ?? "";
                    x.MaterielName = x.Details.FirstOrDefault()?.MaterielName ?? "";
WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/VV_StockInfoDetService.cs
@@ -43,7 +43,7 @@
                    BatchNo = g.Key.BatchNo,
                    BatchNoName = g.Key.BatchNoName,
                    StockQuantity = g.Sum(x => x.StockQuantity),
                    CreateDate = g.Min(x => x.CreateDate) // èŽ·å–æ¯ç»„çš„æœ€æ—© CreateDate
                    CreateDate = g.Min(x => x.CreateDate) // èŽ·å–æ¯ç»„çš„æœ€æ—© CreateDate10
                })
                .ToList();
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs
@@ -1,8 +1,12 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MailKit.Search;
using WIDESEA_Common;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Core;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
@@ -12,6 +16,11 @@
{
    public partial class TaskService
    {
        /// <summary>
        /// æˆå“å‡ºåº“
        /// </summary>
        /// <param name="keys"></param>
        /// <returns></returns>
        public WebResponseContent WMSGenerateNewOutboundTask(int[] keys)
        {
            try
@@ -116,7 +125,11 @@
            }
        }
        //合托出库
        /// <summary>
        /// åˆæ‰˜å‡ºåº“
        /// </summary>
        /// <param name="keys"></param>
        /// <returns></returns>
        public WebResponseContent WMSGenerateSTOutboundTask(int[] keys)
        {
            try
@@ -162,5 +175,113 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// SMOM盘点出库
        /// </summary>
        /// <param name="keys"></param>
        /// <returns></returns>
        public WebResponseContent SMOMGenerateSTOutboundTask(int[] keys)
        {
            try
            {
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
                List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
                List<Dt_TakeStockOrderCP> takeStockOrderCPs = _takeStockOrderCPRepository.QueryData(x => keys.Contains(x.Id));
                if (takeStockOrderCPs == null || takeStockOrderCPs.Count == 0)
                {
                    throw new Exception("未找到库存信息,或库存状态不为入库完成");
                }
                if (takeStockOrderCPs.FirstOrDefault(x => x.TakeStockStatus > TakeStockDetailStatusEnum.未盘点.ObjToInt()) != null)
                {
                    throw new Exception("所选出库单明细存在出库中或已完成");
                }
                List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
                foreach (var takeStock in takeStockOrderCPs)
                {
                    List<Dt_TakeStockOrderDetailCP> takeStockOrderDetailCPs = _takeStockOrderDetailCPRepository.QueryData(x => x.TakeStockId == takeStock.Id);
                    var lpngroup = takeStockOrderDetailCPs.GroupBy(x => x.TakePalletCode);
                    foreach (var lpngroups in lpngroup)
                    {
                        string lpn = lpngroups.Key;
                        Dt_StockInfo? stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == lpn);
                        if (stockInfo == null)
                        {
                            throw new Exception($"未找到库存信息,托盘号{lpn}");
                        }
                        stockInfos.Add(stockInfo);
                    }
                    if (stockInfos == null || stockInfos.Count == 0)
                    {
                        throw new Exception("未找到库存信息");
                    }
                }
                var Newtasks = GetTasks(stockInfos, TaskTypeEnum.OutInventory);
                List<Dt_StockInfoDetail> stockInfoDetails = _stockService.StockInfoDetailService.Repository.QueryData(x => stockInfos.Select(x => x.Id).Contains(x.StockId));
                foreach (var item in stockInfos)
                {
                    Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.PalletCode == item.PalletCode);
                    if (stockInfo == null) continue;
                    stockInfo.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                    var task = Newtasks.FirstOrDefault(x => x.PalletCode == item.PalletCode);
                    tasks.Add(task);
                }
                locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(stockInfos.Select(x => x.LocationCode).ToList()));
                _unitOfWorkManage.BeginTran();
                BaseDal.AddData(tasks);
                _stockService.StockInfoService.Repository.UpdateData(stockInfos);
                _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetails);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock.ObjToInt(), StockChangeType.Outbound.ObjToInt(), "", tasks?.Select(x => x.TaskNum).ToList());
                _basicService.LocationInfoService.Repository.UpdateLocationStatus(locationInfos, LocationStatusEnum.Lock);
                _unitOfWorkManage.CommitTran();
                //将任务推送到WCS
                return PushTasksWCS(tasks);
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// SMOM盘点后库存调整
        /// </summary>
        /// <param name="houseAdjustment"></param>
        /// <returns></returns>
        public WebResponseContent SMOMAdjustment(HouseAdjustment houseAdjustment)
        {
            WebResponseContent responseContent = new WebResponseContent();
            try
            {
                foreach (var item in houseAdjustment.DetailList)
                {
                    Dt_StockInfoDetail dt_StockInfo = BaseDal.Db.Queryable<Dt_StockInfoDetail>().LeftJoin<Dt_StockInfo>((stockdetail, stock) => stockdetail.StockId == stock.Id)
                         .Where((stockdetail, stock) => stockdetail.MaterielCode == item.MaterielCode && stockdetail.MaterielName == item.MaterielName && stockdetail.LinId == item.LinId && stockdetail.BatchNo == item.BatchNo && stock.PalletCode == item.LPNNo).Select((stockdetail, stock) => stockdetail).First();
                    if (dt_StockInfo == null)
                    {
                        return WebResponseContent.Instance.Error("未找到此库存数据");
                    }
                    dt_StockInfo.StockQuantity = item.OrderQuantity;
                    _unitOfWorkManage.BeginTran();
                    _stockInfoDetailRepository.UpdateData(dt_StockInfo);
                    _unitOfWorkManage.CommitTran();
                }
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error($"Error: {ex.Message}");
            }
            return WebResponseContent.Instance.OK();
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs
@@ -47,7 +47,7 @@
                if (stockInfo != null)
                {
                    Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode);
                    if (locationInfo==null)
                    if (locationInfo == null)
                    {
                        throw new Exception("未找到出库库位");
                    }
@@ -116,7 +116,7 @@
                            }
                            tasks.Add(task);
                        }
                    }
                }
@@ -163,7 +163,7 @@
                        (int)OrderTypeEnum.反拣出库单 => TaskTypeEnum.ReverseOut,
                        _ => new TaskTypeEnum()
                    };
                    tasks = GetTasks(result.Item1,typeEnum);
                    tasks = GetTasks(result.Item1, typeEnum);
                    tasks.ForEach(x =>
                    {
                        x.OrderNo = outboundOrder.OrderNo;
@@ -316,7 +316,7 @@
                                CreateDate = DateTime.Now,
                                Remark = details.Remark,
                                SupplierBatch = details.SupplierBatch,
                                OrinalLocation=details.OrinalLocation,
                                OrinalLocation = details.OrinalLocation,
                            };
                            _newOutboundOrderDetailRepository.AddData(outboundOrderDetail);
                            foreach (var item in orderAddDTO1.Details)
@@ -827,7 +827,7 @@
                }
                _unitOfWorkManage.CommitTran();
                //将任务推送到WCS
                if (tasks.FirstOrDefault().Roadway.Contains("SC01_BC"))
                {
                    PushTasksToWCS(tasks);
@@ -1157,6 +1157,10 @@
                    {
                        return content.Error($"未找到{item.PalletCode}库存明细数据");
                    }
                    if (item.System.Contains("SMOM"))
                    {
                        return content.Error($"SMOM系统库存数据不可手动盘点,托盘号{item.PalletCode}");
                    }
                    Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.LocationCode == item.LocationCode);
                    if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && item.StockStatus == StockStatusEmun.入库完成.ObjToInt())
                    {
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -111,10 +111,11 @@
        private readonly IReturnOrderRepository _returnOrderRepository;
        private readonly IProductionRepository _productionRepository;
        private readonly IInboundRepository _inboundRepository;
        private readonly ITakeStockOrderCPRepository _takeStockOrderCPRepository;
        private readonly ITakeStockOrderDetailCPRepository _takeStockOrderDetailCPRepository;
        public ITaskRepository Repository => BaseDal;
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IBasicRepository basicRepository, IStockInfoDetailRepository stockInfoDetailRepository, IPalletTypeInfoRepository palletTypeInfoRepository, IReturnOrderRepository returnOrderRepository, IProductionRepository productionRepository, IInboundRepository inboundRepository, INewOutboundOrderDetailRepository newOutboundOrderDetailRepository) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IBasicRepository basicRepository, IStockInfoDetailRepository stockInfoDetailRepository, IPalletTypeInfoRepository palletTypeInfoRepository, IReturnOrderRepository returnOrderRepository, IProductionRepository productionRepository, IInboundRepository inboundRepository, INewOutboundOrderDetailRepository newOutboundOrderDetailRepository, ITakeStockOrderCPRepository takeStockOrderCPRepository, ITakeStockOrderDetailCPRepository takeStockOrderDetailCPRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _stockRepository = stockRepository;
@@ -140,6 +141,8 @@
            _productionRepository = productionRepository;
            _inboundRepository = inboundRepository;
            _newOutboundOrderDetailRepository = newOutboundOrderDetailRepository;
            _takeStockOrderCPRepository = takeStockOrderCPRepository;
            _takeStockOrderDetailCPRepository = takeStockOrderDetailCPRepository;
        }
        public string ReceiveWMSTaskin = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskin"];
@@ -1650,7 +1653,11 @@
                int lastStatus = locationInfo.LocationStatus;
                ///盘点出库任务完成逻辑
                if (task.TaskType == TaskTypeEnum.OutInventory.ObjToInt())
                if (task.TaskType == TaskTypeEnum.OutInventory.ObjToInt() && stockInfo.System == "SMOM")
                {
                    return SMOMOutInventoryCompleted(task, stockInfo, locationInfo);
                }
                else if (task.TaskType == TaskTypeEnum.OutInventory.ObjToInt())
                {
                    return OutInventoryCompleted(task, stockInfo, locationInfo);
                }
@@ -3113,46 +3120,169 @@
            // èŽ·å–æ‰“å°æœºåç§°
            string printerName = AppSettings.app("PrinterName");
            // å°è¯•不同的打印方法
            for (int retryCount = 0; retryCount < maxRetryCount; retryCount++)
            {
                try
                {
                    Console.WriteLine($"尝试打印 (方法 {retryCount + 1}/{maxRetryCount}): {fullPath}");
            PrintUsingSpireSimple(fullPath, printerName);
                    switch (retryCount)
                    {
                        case 0:
                            // æ–¹æ³•1: ä½¿ç”¨åŽŸå§‹æ‰“å°å‘½ä»¤
                            PrintUsingRawCommand(fullPath, printerName);
                            break;
                        case 1:
                            // æ–¹æ³•3: ç›´æŽ¥ä½¿ç”¨Spire.PDF但简化设置
                            PrintUsingSpireSimple(fullPath, printerName);
                            break;
                        case 2:
                            // æ–¹æ³•3: ç›´æŽ¥ä½¿ç”¨Spire.PDF但简化设置
                            PrintUsingSpireSimple(fullPath, printerName);
                            break;
                    }
                    Console.WriteLine("打印任务发送成功");
                    return;
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"打印方法 {retryCount + 1} å¤±è´¥: {ex.Message}");
                    if (retryCount < maxRetryCount - 1)
                    {
                        Thread.Sleep(retryDelayMs);
                    }
                }
            }
            Console.WriteLine("所有打印方法都失败");
        }
        private void PrintUsingSpireSimple(string filePath, string printerName)
        {
            try
            {
                using (Spire.Pdf.PdfDocument pdf = new Spire.Pdf.PdfDocument())
                {
                    // åŠ è½½æ–‡ä»¶
                    pdf.LoadFromFile(filePath);
                    // èŽ·å–å®žé™…çš„æ‰“å°æœºåç§°
                    string actualPrinterName = GetActualPrinterName(printerName);
                    Console.WriteLine($"配置的打印机名称: {printerName}");
                    Console.WriteLine($"实际使用的打印机名称: {actualPrinterName}");
                    // å¦‚果找不到实际打印机,使用默认打印机
                    if (!string.IsNullOrEmpty(actualPrinterName) && IsPrinterInstalled(actualPrinterName))
                    {
                        pdf.PrintSettings.PrinterName = actualPrinterName;
                        Console.WriteLine($"✓ å·²è®¾ç½®æ‰“印机: {actualPrinterName}");
                    }
                    else
                    {
                        Console.WriteLine($"⚠️ æ‰“印机 '{actualPrinterName}' æœªæ‰¾åˆ°ï¼Œä½¿ç”¨é»˜è®¤æ‰“印机");
                    }
                    // ç›´æŽ¥æ‰“印
                    pdf.Print();
                    Console.WriteLine("✓ æ‰“印任务已提交成功");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"✗ Spire.PDF打印失败: {ex.Message}");
                // è¾“出所有可用打印机,帮助调试
                Console.WriteLine("\n系统所有可用打印机:");
                foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
                {
                    Console.WriteLine($"  - {printer}");
                }
                throw;
            }
        }
        /// <summary>
        /// ä»Žé…ç½®çš„友好名称获取实际的打印机名称
        /// </summary>
        private string GetActualPrinterName(string displayName)
        {
            if (string.IsNullOrEmpty(displayName))
                return string.Empty;
            // å¦‚果配置的是 "192.168.99.3 ä¸Šçš„ Lenovo M7605D"
            if (displayName.Contains("192.168.99.3 ä¸Šçš„ Lenovo M7605D"))
            {
                // åœ¨ç³»ç»Ÿä¸­æŸ¥æ‰¾å®žé™…的打印机名称
                return FindActualPrinterForIP("192.168.99.3");
            }
            // å¦‚果直接配置的是IP地址
            if (displayName.Contains("192.168.99.3"))
            {
                return FindActualPrinterForIP("192.168.99.3");
            }
            // å¦‚果已经是实际的打印机名称,直接返回
            if (IsPrinterInstalled(displayName))
            {
                return displayName;
            }
            // é»˜è®¤è¿”回原名称
            return displayName;
        }
        /// <summary>
        /// æŸ¥æ‰¾IP地址对应的实际打印机名称
        /// </summary>
        private string FindActualPrinterForIP(string ipAddress)
        {
            try
            {
                // èŽ·å–æ‰€æœ‰æ‰“å°æœº
                var allPrinters = new List<string>();
                foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
                {
                    allPrinters.Add(printer);
                }
                Console.WriteLine($"查找IP地址 {ipAddress} å¯¹åº”的打印机...");
                Console.WriteLine("系统打印机列表:");
                foreach (var printer in allPrinters)
                {
                    Console.WriteLine($"  - {printer}");
                }
                // ä¼˜å…ˆæŸ¥æ‰¾åŒ…含IP地址的打印机
                foreach (string printer in allPrinters)
                {
                    if (printer.Contains(ipAddress))
                    {
                        Console.WriteLine($"✓ æ‰¾åˆ°åŒ…含IP的打印机: {printer}");
                        return printer;
                    }
                }
                // æŸ¥æ‰¾è”想打印机
                foreach (string printer in allPrinters)
                {
                    if (printer.Contains("M7605D", StringComparison.OrdinalIgnoreCase)
                    {
                        Console.WriteLine($"✓ æ‰¾åˆ°è”想打印机: {printer}");
                        return printer;
                    }
                }
                // è¿”回第一个可用的打印机
                if (allPrinters.Any())
                {
                    Console.WriteLine($"⚠️ æœªæ‰¾åˆ°ç²¾ç¡®åŒ¹é…ï¼Œä½¿ç”¨ç¬¬ä¸€ä¸ªæ‰“印机: {allPrinters.First()}");
                    return allPrinters.First();
                }
                return string.Empty;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"查找打印机失败: {ex.Message}");
                return string.Empty;
            }
        }
        /// <summary>
        /// æ£€æŸ¥æ‰“印机是否已安装
        /// </summary>
        private bool IsPrinterInstalled(string printerName)
        {
            try
            {
                foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
                {
                    if (printer.Equals(printerName, StringComparison.OrdinalIgnoreCase))
                    {
                        return true;
                    }
                }
                return false;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// ä½¿ç”¨åŽŸå§‹æ‰“å°å‘½ä»¤
        /// </summary>
@@ -3160,55 +3290,28 @@
        {
            try
            {
                // æ–¹æ³•1: ä½¿ç”¨Process直接打印
                var process = new System.Diagnostics.Process();
                process.StartInfo.FileName = filePath;
                process.StartInfo.Verb = "print";
                process.StartInfo.CreateNoWindow = true;
                process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                process.Start();
                var processStartInfo = new System.Diagnostics.ProcessStartInfo
                {
                    FileName = filePath,
                    Verb = "print",  // ä½¿ç”¨"print"动词
                    UseShellExecute = true,  // å…³é”®ï¼šå¯ç”¨Shell执行
                    CreateNoWindow = true,
                    WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden
                };
                // ç­‰å¾…一段时间让打印任务提交
                if (!process.WaitForExit(5000))
                {
                    Console.WriteLine("打印进程未及时退出,但任务可能已提交");
                }
                // è®¾ç½®æ‰“印机(可选,系统通常会使用默认打印机)
                // processStartInfo.Arguments = $"/t \"{filePath}\" \"{printerName}\"";
                System.Diagnostics.Process.Start(processStartInfo);
            }
            catch
            catch (Exception ex)
            {
                // å¦‚果上述方法失败,尝试使用rundll32
                try
                {
                    var args = $@"/c rundll32.exe C:\Windows\System32\shimgvw.dll,ImageView_PrintTo ""{filePath}"" ""{printerName}""";
                    System.Diagnostics.Process.Start("cmd.exe", args);
                }
                catch
                {
                    throw;
                }
                Console.WriteLine($"打印失败: {ex.Message}");
                // å¯ä»¥å°è¯•其他方法
                //TryAlternativePrintMethod(filePath, printerName);
            }
        }
        /// <summary>
        /// ä½¿ç”¨Spire.PDF但简化设置
        /// </summary>
        private void PrintUsingSpireSimple(string filePath, string printerName)
        {
            using (Spire.Pdf.PdfDocument pdf = new Spire.Pdf.PdfDocument())
            {
                // ä½¿ç”¨æœ€å°é…ç½®åŠ è½½æ–‡ä»¶
                pdf.LoadFromFile(filePath);
                // è®¾ç½®åŸºæœ¬æ‰“印机信息
                if (!string.IsNullOrEmpty(printerName))
                {
                    pdf.PrintSettings.PrinterName = printerName;
                }
                // ç›´æŽ¥æ‰“印,不检查
                pdf.Print();
            }
        }
        /// <summary>
        /// æ£€æŸ¥æ–‡ä»¶æ˜¯å¦å¯è®¿é—®
@@ -3310,6 +3413,93 @@
            }
            return content;
        }
        /// <summary>
        /// SMOM盘点单完成
        /// </summary>
        /// <param name="task"></param>
        /// <param name="stockInfo"></param>
        /// <param name="locationInfo"></param>
        /// <returns></returns>
        public WebResponseContent SMOMOutInventoryCompleted(Dt_Task task, Dt_StockInfo stockInfo, Dt_LocationInfo locationInfo)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //获取对应盘点单
                Dt_TakeStockOrderCP takeStockOrder = _inboundRepository.TakeStockOrderRepository.Db.Queryable<Dt_TakeStockOrderCP>().Where(x => x.OrderNo == task.OrderNo).Includes(x => x.Details).First();
                if (takeStockOrder == null)
                {
                    return content.Error($"盘点单{task.OrderNo}不存在");
                }
                if (takeStockOrder.TakeStockStatus != TakeStockStatusEnum.盘点中.ObjToInt())
                {
                    return content.Error($"盘点单{task.OrderNo}盘点已完成或未开始");
                }
                if (stockInfo.StockStatus != StockStatusEmun.出库锁定.ObjToInt())
                {
                    return content.Error($"{stockInfo.PalletCode}库存状态不正确");
                }
                if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
                {
                    return content.Error($"{locationInfo.LocationCode}货位状态不正确");
                }
                //根据任务托盘查盘点明细
                Dt_TakeStockOrderDetailCP? takeStockOrderDetail = takeStockOrder.Details.FirstOrDefault(x => x.TakePalletCode == stockInfo.PalletCode);
                if (takeStockOrderDetail == null)
                {
                    return content.Error($"{stockInfo.PalletCode}未找到对应盘点明细");
                }
                if (takeStockOrderDetail.TakeDetalStatus != TakeStockDetailStatusEnum.盘点出库中.ObjToInt())
                {
                    return content.Error($"{stockInfo.PalletCode}盘点明细状态不正确");
                }
                takeStockOrderDetail.TakeDetalStatus = TakeStockDetailStatusEnum.盘点出库完成.ObjToInt();
                stockInfo.StockStatus = StockStatusEmun.盘点出库完成.ObjToInt();
                stockInfo.Details.ForEach(x =>
                {
                    x.Status = StockStatusEmun.盘点出库完成.ObjToInt();
                });
                stockInfo.LocationCode = "";
                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                int beforeStatus = locationInfo.LocationStatus;
                locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
                Dt_ReturnOrder returnOrder = new Dt_ReturnOrder
                {
                    MaterielCode = stockInfo.Details.FirstOrDefault()?.MaterielCode,
                    MaterielName = stockInfo.Details.FirstOrDefault()?.MaterielName,
                    BatchNo = stockInfo.Details.FirstOrDefault()?.BatchNo,
                    OrderQuantity = stockInfo.Details.Sum(x => x.StockQuantity),
                    ReceiptQuantity = stockInfo.Details.Sum(x => x.StockQuantity),
                    OrderStatus = InOrderStatusEnum.未开始.ObjToInt(),
                    LinId = stockInfo.Details.FirstOrDefault()?.LinId,
                    LocationCode = stockInfo.LocationCode,
                    LPNNo = stockInfo.PalletCode,
                    Creater = "LK",
                    CreateDate = DateTime.Now,
                    OrderType = OrderTypeEnum.盘点回库单.ObjToInt(),
                    System = "WMS"
                };
                _unitOfWorkManage.BeginTran();
                //货位变动记录
                _basicService.LocationInfoService.UpdateData(locationInfo);
                _returnOrderRepository.AddData(returnOrder);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, LocationStatusEnum.Lock.ObjToInt(), LocationChangeType.OutboundCompleted.ObjToInt(), takeStockOrder?.OrderNo ?? "", task.TaskNum);
                _takeStockOrderDetailCPRepository.UpdateData(takeStockOrderDetail);
                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                _unitOfWorkManage.CommitTran();
                content.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
    }
    #endregion
    #endregion
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderCPController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Common;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
using WIDESEA_IInboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// ç›˜ç‚¹å•
    /// </summary>
    [Route("api/TakeStockOrderCP")]
    [ApiController]
    public class TakeStockOrderCPController : ApiBaseController<ITakeStockOrderCPService, Dt_TakeStockOrderCP>
    {
        public TakeStockOrderCPController(ITakeStockOrderCPService service) : base(service)
        {
        }
        /// <summary>
        /// èŽ·å–å¯¹åº”ä»“åº“ç›˜ç‚¹å•
        /// </summary>
        [HttpPost, HttpGet, Route("NewInventoryOut"), AllowAnonymous]
        public WebResponseContent NewInventoryOut([FromBody] HouseCancelOut houseInventoryOut)
        {
            return Service.NewInventoryOut(houseInventoryOut);
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderDetailCPController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
using WIDESEA_IInboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// ç›˜ç‚¹æ˜Žç»†å•
    /// </summary>
    [Route("api/TakeStockOrderDetailCP")]
    [ApiController]
    public class TakeStockOrderDetailCPController : ApiBaseController<ITakeStockOrderDetailCPService, Dt_TakeStockOrderDetailCP>
    {
        public TakeStockOrderDetailCPController(ITakeStockOrderDetailCPService service) : base(service)
        {
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -53,6 +53,16 @@
        {
            return Service.WMSGenerateSTOutboundTask(keys);
        }
        /// <summary>
        /// SMOM盘点任务
        /// </summary>
        /// <param name="keys"></param>
        /// <returns></returns>
        [HttpPost, Route("SMOMGenerateSTOutboundTask"), AllowAnonymous]
        public WebResponseContent SMOMGenerateSTOutboundTask([FromBody] int[] keys)
        {
            return Service.SMOMGenerateSTOutboundTask(keys);
        }
        /// <summary>
        /// WCS申请入库任务
@@ -135,26 +145,6 @@
            return Service.OutboundTaskCompleted(taskNum);
        }
        /// <summary>
        /// WMS下发出库单据
        /// </summary>
        /// <param name="orderAddDTO"></param>
        /// <returns></returns>
        [HttpPost, Route("AddOutboundOrders"), AllowAnonymous]
        public WebResponseContent AddOutboundOrders([FromBody] Houseounbound orderAddDTO)
        {
            return Service.AddOutboundOrders(orderAddDTO);
        }
        /// <summary>
        /// ç›˜ç‚¹ä»»åŠ¡ä¸Šä¼ 
        /// </summary>
        /// <param name="houseInventoryOut"></param>
        /// <returns></returns>
        [HttpPost, Route("InventoryOut"), AllowAnonymous]
        public WebResponseContent InventoryOut([FromBody] HouseCancelOut houseInventoryOut)
        {
            return Service.InventoryOut(houseInventoryOut);
        }
        /// <summary>
        /// ç›˜ç‚¹ä»»åŠ¡å›žä¼ WMS
        /// </summary>
        /// <param name="name"></param>
@@ -233,5 +223,36 @@
        {
            return Service.TakeOutbound(stockViews);
        }
        /// <summary>
        /// SMOM下发出库单据
        /// </summary>
        /// <param name="orderAddDTO"></param>
        /// <returns></returns>
        [HttpPost, Route("AddOutboundOrders"), AllowAnonymous]
        public WebResponseContent AddOutboundOrders([FromBody] Houseounbound orderAddDTO)
        {
            return Service.AddOutboundOrders(orderAddDTO);
        }
        /// <summary>
        /// SMOM盘点任务上传
        /// </summary>
        /// <param name="houseInventoryOut"></param>
        /// <returns></returns>
        [HttpPost, Route("InventoryOut"), AllowAnonymous]
        public WebResponseContent InventoryOut([FromBody] HouseCancelOut houseInventoryOut)
        {
            return Service.InventoryOut(houseInventoryOut);
        }
        /// <summary>
        /// SMOM盘点后库存调整
        /// </summary>
        /// <returns></returns>
        [HttpPost, Route("SMOMAdjustment"), AllowAnonymous]
        public WebResponseContent SMOMAdjustment([FromBody] HouseAdjustment houseAdjustment)
        {
            return Service.SMOMAdjustment(houseAdjustment);
        }
    }
}
¼ª°²PDA/pages/stash/Syncretism.vue
@@ -3,12 +3,12 @@
        <view class="itemstyle">
            <uni-forms label-width="180">
                <uni-forms-item label="原始托盘条码:">
                    <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="!focus" v-model="soussAddress"
                        @input="barcodeInput" />
                    <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="!focus"
                        v-model="soussAddress" @input="barcodeInput" />
                </uni-forms-item>
                <uni-forms-item label="目标托盘条码:">
                    <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="!focus" v-model="targetAddress"
                        @input="barcodeInput" />
                    <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="!focus"
                        v-model="targetAddress" @input="barcodeInput" />
                </uni-forms-item>
                <uni-forms-item>
                    <button @click="AGVTasks" type="primary" size="default" style="margin-top: 2%;">确认完成</button>
@@ -27,13 +27,13 @@
                focus: false,
                soussAddress: "",
                targetAddress: "",
                    warehouseId: "",
                warehouseId: "",
            }
        },
        onShow() {},
        onLoad(res) {
            this.focus = false;
            this.warehouseId=res.warehouseId;
            this.warehouseId = res.warehouseId;
        },
        methods: {
            barcodeInput() {
@@ -62,17 +62,18 @@
                    MainData: {
                        soussAddress: this.soussAddress,
                        targetAddress: this.targetAddress,
                        warehouseId:this.warehouseId,
                        warehouseId: this.warehouseId,
                    }
                }
                this.$u.post('/api/InboundOrder/SYMaterielGroup', postDate).then(
                    res => {
                        if (res.status) {
                            this.$refs.uToast.show({
                                title: "任务创建成功成功",
                                title: "合托成功",
                                type: "success"
                            })
                            this.barcode = "";
                            this.soussAddress = "";
                            this.targetAddress = "";
                        } else {
                            this.$refs.uToast.show({
                                title: res.message,