From fcdbb4d6cc8eb3629b871a4945ff2da599d64107 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期六, 29 十一月 2025 17:51:43 +0800
Subject: [PATCH] 提交

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundBatchPickingController.cs |  198 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 197 insertions(+), 1 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundBatchPickingController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundBatchPickingController.cs"
index f481cc3..563ca1d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundBatchPickingController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundBatchPickingController.cs"
@@ -1,7 +1,10 @@
 锘縰sing Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
 using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Outbound;
 using WIDESEA_IOutboundService;
 using WIDESEA_Model.Models;
+using static WIDESEA_OutboundService.OutboundBatchPickingService;
 
 namespace WIDESEA_WMSServer.Controllers.Outbound
 {
@@ -12,10 +15,203 @@
     {
         private readonly ISplitPackageService _splitPackageService;
         private readonly IOutStockLockInfoService _outStockLockInfoService;
-        public OutboundBatchPickingController(IOutboundBatchPickingService service, ISplitPackageService splitPackageService, IOutStockLockInfoService outStockLockInfoService) : base(service)
+        private readonly IOutboundBatchPickingService _outboundBatchPickingService;
+
+        private readonly ILogger<OutboundBatchPickingController> _logger;
+        public OutboundBatchPickingController(IOutboundBatchPickingService service, ISplitPackageService splitPackageService, IOutStockLockInfoService outStockLockInfoService, IOutboundBatchPickingService outboundBatchPickingService, ILogger<OutboundBatchPickingController> logger) : base(service)
         {
             _splitPackageService = splitPackageService;
             _outStockLockInfoService = outStockLockInfoService;
+            _outboundBatchPickingService = outboundBatchPickingService;
+            _logger = logger;
+        }
+
+        /// <summary>
+        /// 鍒嗘嫞纭
+        /// </summary>
+        [HttpPost("confirm-picking")]
+        public async Task<WebResponseContent> ConfirmPicking([FromBody] ConfirmPickingDto dto)
+        {
+            return await _outboundBatchPickingService.ConfirmBatchPicking(dto.OrderNo, dto.PalletCode, dto.Barcode);
+        }
+
+        /// <summary>
+        /// 鍙栨秷鍒嗘嫞
+        /// </summary>
+        [HttpPost("cancel-picking")]
+        public async Task<WebResponseContent> CancelPicking([FromBody] CancelPickingDto dto)
+        {
+            return await _outboundBatchPickingService.CancelPicking(dto.OrderNo, dto.PalletCode, dto.Barcode);
+        }
+        /// <summary>
+        /// 鍙栨秷鎷嗗寘閾�
+        /// </summary>
+        [HttpPost("cancel-split-chain")]
+        public async Task<WebResponseContent> CancelSplitChain([FromBody] CancelSplitChainDto dto)
+        {
+            return await _outboundBatchPickingService.CancelSplitPackageChain(dto.OrderNo, dto.PalletCode, dto.StartBarcode);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎷嗗寘閾句俊鎭�
+        /// </summary>
+        [HttpPost("split-package-chain-info")]
+        public async Task<WebResponseContent> GetSplitPackageChainInfo([FromBody] SplitPackageChainInfoRequestDto dto)
+        {
+            return await _outboundBatchPickingService.GetSplitPackageChainInfo(dto.OrderNo, dto.Barcode);
+        }
+        /// <summary>
+        /// 鏌ユ壘瀹屾暣鎷嗗寘閾撅紙浠庢牴鏉$爜寮�濮嬶級
+        /// </summary>
+        [HttpPost("find-root-split-chain")]
+        public async Task<WebResponseContent> FindRootSplitChain([FromBody] SplitPackageChainInfoRequestDto dto)
+        {
+            try
+            {
+                // 鏌ユ壘鏍规潯鐮�
+                var rootBarcode = await _outboundBatchPickingService. FindRootBarcode(dto.OrderNo, dto.Barcode);
+
+                // 鑾峰彇瀹屾暣鎷嗗寘閾�
+                var splitChain = await _outboundBatchPickingService.GetSplitPackageChain(dto.OrderNo, rootBarcode);
+
+                var chainInfo = new SplitPackageChainInfoDto
+                {
+                    OriginalBarcode = rootBarcode,
+                    RootBarcode = rootBarcode,
+                    TotalSplitTimes = splitChain.Count,
+                    ChainType = "root",
+                    SplitChain = splitChain.Select(x => new SplitChainItemDto
+                    {
+                        SplitTime = x.SplitTime,
+                        OriginalBarcode = x.OriginalBarcode,
+                        NewBarcode = x.NewBarcode,
+                        SplitQuantity = x.SplitQty,
+                        Operator = x.Operator,
+                        IsReverted = x.IsReverted
+                    }).ToList()
+                };
+
+                return WebResponseContent.Instance.OK("鑾峰彇鎴愬姛", chainInfo);
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError($"鏌ユ壘瀹屾暣鎷嗗寘閾惧け璐� - OrderNo: {dto.OrderNo}, Barcode: {dto.Barcode}, Error: {ex.Message}");
+                return WebResponseContent.Instance.Error("鏌ユ壘瀹屾暣鎷嗗寘閾惧け璐�");
+            }
+        }
+        /// <summary>
+        /// 鎵嬪姩鎷嗗寘
+        /// </summary>
+        [HttpPost("split-package")]
+        public async Task<WebResponseContent> SplitPackage([FromBody] SplitPackageDto dto)
+        {
+            return await _outboundBatchPickingService.ManualSplitPackage(dto.OrderNo, dto.PalletCode, dto.OriginalBarcode, dto.SplitQuantity);
+        }
+        /// <summary>
+        /// 鍙栨秷鎷嗗寘
+        /// </summary>
+        [HttpPost("cancel-split")]
+        public async Task<WebResponseContent> CancelSplit([FromBody] CancelSplitDto dto)
+        {
+            return await _outboundBatchPickingService.CancelSplitPackage(dto.OrderNo, dto.PalletCode, dto.NewBarcode);
+        }
+
+        /// <summary>
+        /// 鍒嗘壒鍥炲簱
+        /// </summary>
+        [HttpPost("return-stock")]
+        public async Task<WebResponseContent> ReturnStock([FromBody] ReturnStockDto dto)
+        {
+            return await _outboundBatchPickingService.BatchReturnStock(dto.OrderNo, dto.PalletCode);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎵樼洏鐨勯攣瀹氫俊鎭�
+        /// </summary>
+        [HttpPost("pallet-locks")]
+        public async Task<WebResponseContent> GetPalletLocks([FromBody] PalletLocksDto dto)
+        {
+            try
+            {
+                var locks = await _outboundBatchPickingService.GetPalletLockInfos(dto.OrderNo, dto.PalletCode);
+                return WebResponseContent.Instance.OK("鑾峰彇鎴愬姛", locks);
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, $"鑾峰彇鎵樼洏閿佸畾淇℃伅寮傚父 - OrderNo: {dto.OrderNo}, PalletCode: {dto.PalletCode}");
+                return WebResponseContent.Instance.Error("绯荤粺寮傚父锛岃绋嶅悗閲嶈瘯" + ex.Message);
+            }
+        }
+        /// <summary>
+        /// 鑾峰彇宸叉嫞閫夊垪琛�
+        /// </summary>
+        [HttpPost("pallet-picked-list")]
+        public async Task<WebResponseContent> GetPalletPickedList([FromBody] PalletLocksDto dto)
+        {
+            try
+            {
+                var pickedList = await _outboundBatchPickingService.GetPalletPickedList(dto.OrderNo, dto.PalletCode);
+                return WebResponseContent.Instance.OK("鑾峰彇鎴愬姛", pickedList);
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, $"鑾峰彇宸叉嫞閫夊垪琛ㄥ紓甯� - OrderNo: {dto.OrderNo}, PalletCode: {dto.PalletCode}");
+                return WebResponseContent.Instance.Error("绯荤粺寮傚父锛岃绋嶅悗閲嶈瘯" + ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎵樼洏鐘舵��
+        /// </summary>
+        [HttpPost("pallet-status")]
+        public async Task<WebResponseContent> GetPalletStatus([FromBody] PalletLocksDto dto)
+        {
+            try
+            {
+                var status = await _outboundBatchPickingService.GetPalletStatus(dto.OrderNo, dto.PalletCode);
+                return WebResponseContent.Instance.OK("鑾峰彇鎴愬姛", status);
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, $"鑾峰彇鎵樼洏鐘舵�佸紓甯� - OrderNo: {dto.OrderNo}, PalletCode: {dto.PalletCode}");
+                return WebResponseContent.Instance.Error("绯荤粺寮傚父锛岃绋嶅悗閲嶈瘯" + ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎷嗗寘淇℃伅
+        /// </summary>
+        [HttpPost("split-package-info")]
+        public async Task<WebResponseContent> GetSplitPackageInfo([FromBody] SplitPackageInfoDto dto)
+        {
+            try
+            {
+                var info = await _outboundBatchPickingService.GetSplitPackageInfo(dto.OrderNo, dto.PalletCode, dto.Barcode);
+                return WebResponseContent.Instance.OK("鑾峰彇鎴愬姛", info);
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, $"鑾峰彇鎷嗗寘淇℃伅寮傚父 - OrderNo: {dto.OrderNo}, PalletCode: {dto.PalletCode}, Barcode: {dto.Barcode}");
+                return WebResponseContent.Instance.Error("绯荤粺寮傚父锛岃绋嶅悗閲嶈瘯" +ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鍙栬蛋绌虹
+        /// </summary>
+        [HttpPost("remove-empty-pallet")]
+        public async Task<WebResponseContent> RemoveEmptyPallet([FromBody] RemoveEmptyPalletDto dto)
+        {
+            try
+            {
+                var result = await _outboundBatchPickingService.RemoveEmptyPallet(dto.OrderNo, dto.PalletCode);
+                return result;
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, $"鍙栬蛋绌虹寮傚父 - OrderNo: {dto.OrderNo}, PalletCode: {dto.PalletCode}");
+                return WebResponseContent.Instance.Error("绯荤粺寮傚父锛岃绋嶅悗閲嶈瘯" +ex.Message);
+            }
         }
 
     }

--
Gitblit v1.9.3