From 34211e1481c7a96b53675a733843349ff9e8c7f0 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期二, 09 十二月 2025 08:58:41 +0800
Subject: [PATCH] 提交

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs |  403 ++++-----------------------------------------------------
 1 files changed, 30 insertions(+), 373 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_OutboundService/OutboundPickingService.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_OutboundService/OutboundPickingService.cs"
index 599aedd..1adb870 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_OutboundService/OutboundPickingService.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_OutboundService/OutboundPickingService.cs"
@@ -1,19 +1,7 @@
-锘縰sing Dm.filter;
-using MailKit.Search;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
+锘縰sing Microsoft.Extensions.Logging;
 using SqlSugar;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection.Metadata;
-using System.Text;
-using System.Text.Json;
-using System.Threading.Tasks;
 using WIDESEA_BasicService;
 using WIDESEA_Common.CommonEnum;
-using WIDESEA_Common.LocationEnum;
 using WIDESEA_Common.OrderEnum;
 using WIDESEA_Common.StockEnum;
 using WIDESEA_Common.TaskEnum;
@@ -23,7 +11,6 @@
 using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
 using WIDESEA_Core.Utilities;
-using WIDESEA_DTO.Allocate;
 using WIDESEA_DTO.Basic;
 using WIDESEA_DTO.Inbound;
 using WIDESEA_DTO.Outbound;
@@ -298,10 +285,6 @@
                     return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑浠诲姟淇℃伅");
 
                 //鍒嗘瀽闇�瑕佸洖搴撶殑璐х墿
-                //var returnAnalysis = await AnalyzeReturnItems(orderNo, palletCode, stockInfo.Id);
-                //if (!returnAnalysis.HasItemsToReturn)
-                //    return await HandleNoReturnItems(orderNo, palletCode, task);
-
                 var statusAnalysis = await AnalyzePalletStatus(orderNo, palletCode, stockInfo.Id);
                 if (!statusAnalysis.HasItemsToReturn)
                 {
@@ -326,7 +309,7 @@
 
                 }
 
-                // 4. 妫�鏌ユ槸鍚︽湁杩涜涓殑浠诲姟
+                // 妫�鏌ユ槸鍚︽湁杩涜涓殑浠诲姟
                 if (statusAnalysis.HasActiveTasks)
                 {
                     return WebResponseContent.Instance.Error($"鎵樼洏 {palletCode} 鏈夎繘琛屼腑鐨勪换鍔★紝涓嶈兘鎵ц鍥炲簱鎿嶄綔");
@@ -428,16 +411,16 @@
 
         private async Task<ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>> ValidatePickingRequest(string orderNo, string palletCode, string barcode)
         {
-            // 1. 鍩虹鍙傛暟楠岃瘉
+            // 鍩虹鍙傛暟楠岃瘉
             if (string.IsNullOrEmpty(orderNo) || string.IsNullOrEmpty(palletCode) || string.IsNullOrEmpty(barcode))
                 return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error("璁㈠崟鍙枫�佹墭鐩樼爜鍜屾潯鐮佷笉鑳戒负绌�");
 
-            // 2. 鏌ユ壘鏈夋晥鐨勯攣瀹氫俊鎭�
+            // 鏌ユ壘鏈夋晥鐨勯攣瀹氫俊鎭�
             var lockInfo = await FindValidLockInfo(orderNo, palletCode, barcode);
             if (lockInfo == null)
                 return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"鏈壘鍒版湁鏁堢殑閿佸畾淇℃伅");
 
-            // 3. 妫�鏌ヨ鍗曠姸鎬�
+            // 妫�鏌ヨ鍗曠姸鎬�
             var order = await _outboundOrderService.Db.Queryable<Dt_OutboundOrder>()
                 .Where(x => x.OrderNo == orderNo)
                 .FirstAsync();
@@ -445,18 +428,18 @@
             if (order?.OrderStatus == (int)OutOrderStatusEnum.鍑哄簱瀹屾垚)
                 return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"璁㈠崟{orderNo}宸插畬鎴愶紝涓嶈兘缁х画鍒嗘嫞");
 
-            // 4. 鑾峰彇璁㈠崟鏄庣粏
+            // 鑾峰彇璁㈠崟鏄庣粏
             var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
                 .FirstAsync(x => x.Id == lockInfo.OrderDetailId);
 
             if (orderDetail == null)
                 return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"鏈壘鍒拌鍗曟槑缁�");
 
-            // 5. 妫�鏌ヨ鍗曟槑缁嗘暟閲�
+            // 妫�鏌ヨ鍗曟槑缁嗘暟閲�
             if (orderDetail.OverOutQuantity >= orderDetail.NeedOutQuantity)
                 return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"璁㈠崟鏄庣粏闇�姹傛暟閲忓凡婊¤冻");
 
-            // 6. 鑾峰彇搴撳瓨鏄庣粏
+            // 鑾峰彇搴撳瓨鏄庣粏
             var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
                 .Where(x => x.Barcode == barcode && x.StockId == lockInfo.StockId &&
                    x.Status != StockStatusEmun.鍏ュ簱纭.ObjToInt())
@@ -465,14 +448,14 @@
             if (stockDetail == null)
                 return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"鏃犳晥鐨勬潯鐮佹垨鐗╂枡缂栫爜");
 
-            // 7. 妫�鏌ュ簱瀛樼姸鎬佸拰鏁伴噺
+            // 妫�鏌ュ簱瀛樼姸鎬佸拰鏁伴噺
             if (stockDetail.StockQuantity <= 0)
                 return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"鏉$爜{barcode}搴撳瓨涓嶈冻");
 
             if (stockDetail.Status != StockStatusEmun.鍑哄簱閿佸畾.ObjToInt())
                 return ValidationResult<(Dt_OutStockLockInfo, Dt_OutboundOrderDetail, Dt_StockInfoDetail)>.Error($"鏉$爜{barcode}鐘舵�佷笉姝g‘锛屾棤娉曞垎鎷�");
 
-            // 8. 妫�鏌ユ槸鍚﹂噸澶嶅垎鎷�
+            //妫�鏌ユ槸鍚﹂噸澶嶅垎鎷�
             var existingPicking = await Db.Queryable<Dt_PickingRecord>()
                 .Where(x => x.Barcode == barcode && x.OrderNo == orderNo && x.PalletCode == palletCode && x.OutStockLockId == lockInfo.Id)
                 .FirstAsync();
@@ -681,13 +664,13 @@
         private async Task HandleFullPicking(Dt_OutStockLockInfo lockInfo, Dt_StockInfoDetail stockDetail,
             decimal actualQty, PickingResult result)
         {
-            // 1. 鏇存柊搴撳瓨
+            //  鏇存柊搴撳瓨
             stockDetail.StockQuantity = 0;
             stockDetail.OutboundQuantity = 0;
             stockDetail.Status = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
             await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
 
-            // 2. 鏇存柊閿佸畾淇℃伅
+            // 鏇存柊閿佸畾淇℃伅
             lockInfo.PickedQty += actualQty;
             lockInfo.Status = (int)OutLockStockStatusEnum.鎷i�夊畬鎴�;
             lockInfo.Operator = App.User.UserName;
@@ -700,19 +683,19 @@
             decimal stockOutQty = stockQuantity;
             decimal remainingAssignQty = actualQty - stockQuantity;
 
-            // 1. 鏇存柊搴撳瓨
+            // 鏇存柊搴撳瓨
             stockDetail.StockQuantity = 0;
             stockDetail.OutboundQuantity = 0;
             stockDetail.Status = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
             await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
 
-            // 2. 鏇存柊閿佸畾淇℃伅
+            // 鏇存柊閿佸畾淇℃伅
             lockInfo.PickedQty += stockOutQty;
             lockInfo.AssignQuantity = remainingAssignQty;
             lockInfo.Operator = App.User.UserName;
             await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
 
-            // 3. 鏇存柊鎷嗗寘璁板綍鐘舵��
+            // 鏇存柊鎷嗗寘璁板綍鐘舵��
             await UpdateSplitRecordsStatus(stockDetail.Barcode);
 
             result.ActualPickedQty = stockOutQty;
@@ -951,22 +934,7 @@
 
             return ValidationResult<(Dt_PickingRecord, Dt_OutStockLockInfo, Dt_OutboundOrderDetail)>.Success((pickingRecord, lockInfo, orderDetail));
         }
-        /// <summary>
-        /// 妫�鏌ユ潯鐮佹槸鍚﹀凡缁忓洖搴�
-        /// </summary>
-        private async Task<bool> IsBarcodeReturned(string barcode, int stockId)
-        {
-            var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
-                .Where(it => it.Barcode == barcode && it.StockId == stockId)
-                .FirstAsync();
-
-            if (stockDetail == null)
-                return false;
-
-            // 濡傛灉鐘舵�佹槸鍏ュ簱纭鎴栧叆搴撳畬鎴愶紝璇存槑宸茬粡鍥炲簱
-            return stockDetail.Status == StockStatusEmun.鍏ュ簱纭.ObjToInt() ||
-                   stockDetail.Status == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
-        }
+ 
 
         /// <summary>
         /// 妫�鏌ラ攣瀹氫俊鎭搴旂殑鏉$爜鏄惁宸茬粡鍥炲簱
@@ -1204,12 +1172,7 @@
         #endregion
 
         #region 鍥炲簱鎿嶄綔绉佹湁鏂规硶
-
-        private async Task<Dt_StockInfo> GetStockInfo(string palletCode)
-        {
-            return await _stockInfoService.Db.Queryable<Dt_StockInfo>()
-                .FirstAsync(x => x.PalletCode == palletCode);
-        }
+ 
         /// <summary>
         /// 妫�鏌ユ暣涓墭鐩樻槸鍚﹀凡缁忓洖搴�
         /// </summary>
@@ -1287,24 +1250,7 @@
         }
 
         private async Task<WebResponseContent> HandleNoReturnItems(string orderNo, string palletCode, Dt_Task originalTask, int stockInfoId)
-        {
-            // 妫�鏌ユ槸鍚︽墍鏈夎揣鐗╅兘宸叉嫞閫夊畬鎴�
-            //var allPicked = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
-            //    .Where(it => it.OrderNo == orderNo && it.PalletCode == palletCode)
-            //    .AnyAsync(it => it.Status == (int)OutLockStockStatusEnum.鎷i�夊畬鎴�);
-
-            //if (allPicked)
-            //{
-            //    // 鍒犻櫎鍘熷鍑哄簱浠诲姟 缁勭┖鐩�   绌虹洏鍥炲簱 
-            //    //await _taskRepository.Db.Deleteable(originalTask).ExecuteCommandAsync();
-            //    return WebResponseContent.Instance.OK("鎵�鏈夎揣鐗╁凡鎷i�夊畬鎴愶紝鎵樼洏涓虹┖");
-            //}
-            //else
-            //{
-            //    // 鍒犻櫎鍘熷鍑哄簱浠诲姟
-            //    //await _taskRepository.Db.Deleteable(originalTask).ExecuteCommandAsync();
-            //    return WebResponseContent.Instance.Error("娌℃湁闇�瑕佸洖搴撶殑鍓╀綑璐х墿");
-            //}
+        {            
             try
             {
                 var locationtype = 0;
@@ -1400,16 +1346,16 @@
         {
             _logger.LogInformation($"寮�濮嬮噴鏀鹃攣瀹氫互渚块噸鏂板垎閰� - 璁㈠崟: {orderNo}, 鎵樼洏: {palletCode}");
 
-            // 1. 澶勭悊鏈垎鎷g殑鍑哄簱閿佸畾璁板綍 - 瀹屽叏閲婃斁
+            // 澶勭悊鏈垎鎷g殑鍑哄簱閿佸畾璁板綍 - 瀹屽叏閲婃斁
             if (analysis.HasRemainingLocks)
             {
                 await ReleaseRemainingLocks(analysis.RemainingLocks);
             }
 
-            // 2. 澶勭悊宸插洖搴撶殑閿佸畾璁板綍 - 鍒犻櫎鎴栨爣璁颁负鏃犳晥
+            // 澶勭悊宸插洖搴撶殑閿佸畾璁板綍 - 鍒犻櫎鎴栨爣璁颁负鏃犳晥
             await CleanupReturnedLocks(orderNo, palletCode);
 
-            // 3. 閲嶇疆璁㈠崟鏄庣粏鐨勯攣瀹氭暟閲�
+            // 閲嶇疆璁㈠崟鏄庣粏鐨勯攣瀹氭暟閲�
             await ResetOrderDetailLockQuantities(analysis);
 
             _logger.LogInformation($"閿佸畾閲婃斁瀹屾垚 - 璁㈠崟: {orderNo}, 鎵樼洏: {palletCode}");
@@ -1591,38 +1537,7 @@
 
 
         }
-
-        private async Task UpdateOrderDetailsOnReturn(List<Dt_OutStockLockInfo> remainingLocks)
-        {
-            // 鎸夎鍗曟槑缁嗗垎缁�
-            var orderDetailGroups = remainingLocks.GroupBy(x => x.OrderDetailId);
-
-            foreach (var group in orderDetailGroups)
-            {
-                var orderDetailId = group.Key;
-                var totalReturnQty = group.Sum(x => x.AssignQuantity - x.PickedQty);
-
-                // 鑾峰彇褰撳墠璁㈠崟鏄庣粏
-                var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
-                    .FirstAsync(x => x.Id == orderDetailId);
-
-                if (orderDetail != null)
-                {
-                    // 璋冩暣宸叉嫞閫夋暟閲忓拰宸插嚭搴撴暟閲�
-                    decimal newPickedQty = Math.Max(0, orderDetail.PickedQty - totalReturnQty);
-                    decimal newOverOutQuantity = Math.Max(0, orderDetail.OverOutQuantity - totalReturnQty);
-
-                    await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
-                        .SetColumns(it => new Dt_OutboundOrderDetail
-                        {
-                            PickedQty = newPickedQty,
-                            OverOutQuantity = newOverOutQuantity,
-                        })
-                        .Where(it => it.Id == orderDetailId)
-                        .ExecuteCommandAsync();
-                }
-            }
-        }
+          
 
         private async Task HandlePalletStockGoodsReturn(List<Dt_StockInfoDetail> palletStockGoods)
         {
@@ -1750,7 +1665,7 @@
         {
             try
             {
-                // 1. 鍙戦�佹祦鍔ㄤ俊鍙�
+                // 鍙戦�佹祦鍔ㄤ俊鍙�
                 var moveResult = await _eSSApiService.MoveContainerAsync(new WIDESEA_DTO.Basic.MoveContainerRequest
                 {
                     slotCode = movestations[targetAddress],
@@ -1759,7 +1674,7 @@
 
                 //if (moveResult)
                 //{
-                // 2. 鍒涘缓鍥炲簱浠诲姟
+                //  鍒涘缓鍥炲簱浠诲姟
                 var essTask = new TaskModel()
                 {
                     taskType = "putaway",
@@ -1979,148 +1894,7 @@
                 _logger.LogError($"UpdateOrderStatusForReturn澶辫触 - OrderNo: {orderNo}, Error: {ex.Message}");
             }
         }
-
-        private async Task HandleOrderCompletion(Dt_OutboundOrder outboundOrder, string orderNo)
-        {
-            // 璋冩嫧鍑哄簱鍜岄噸妫�鍑哄簱涓嶉渶瑕佸弽棣圡ES
-            if (outboundOrder.OrderType == OutOrderTypeEnum.Allocate.ObjToInt())
-            {
-                var allocate = _allocateService.Repository.QueryData(x => x.UpperOrderNo == outboundOrder.UpperOrderNo).First();
-                var allocatefeedmodel = new AllocateDto
-                {
-                    ReqCode = Guid.NewGuid().ToString(),
-                    ReqTime = DateTime.Now.ToString(),
-                    BusinessType = "2",
-
-                    FactoryArea = outboundOrder.FactoryArea,
-                    OperationType = 1,
-                    Operator = App.User.UserName,
-                    OrderNo = outboundOrder.UpperOrderNo,
-                    // documentsNO = outboundOrder.OrderNo,
-                    // status = outboundOrder.OrderStatus,
-                    fromWarehouse = allocate?.FromWarehouse ?? "",
-                    toWarehouse = allocate?.ToWarehouse ?? "",
-                    Details = new List<AllocateDtoDetail>()
-
-                };
-                // 鍙幏鍙栧凡鎷i�夊畬鎴愮殑閿佸畾璁板綍
-                var lists = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
-                    .Where(x => x.OrderNo == orderNo && x.Status == (int)OutLockStockStatusEnum.鎷i�夊畬鎴�)
-                    .ToListAsync();
-
-                var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.lineNo, item.BarcodeUnit, item.WarehouseCode })
-                   .Select(group => new AllocateDtoDetail
-                   {
-                       MaterialCode = group.Key.MaterielCode,
-                       LineNo = group.Key.lineNo,
-                       WarehouseCode = group.Key.WarehouseCode,
-                       Qty = group.Sum(x => x.PickedQty),
-
-                       Unit = group.Key.BarcodeUnit,
-                       Barcodes = group.Select(row => new BarcodeInfo
-                       {
-                           Barcode = row.CurrentBarcode,
-                           SupplyCode = row.SupplyCode,
-                           BatchNo = row.BatchNo,
-                           Unit = row.BarcodeUnit,
-                           Qty = row.PickedQty
-                       }).ToList()
-
-
-                   }).ToList();
-                allocatefeedmodel.Details = groupedData;
-
-                var result = await _invokeMESService.FeedbackAllocate(allocatefeedmodel);
-                if (result != null && result.code == 200)
-                {
-                    await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
-                           .SetColumns(x => x.ReturnToMESStatus == 1)
-                           .Where(x => x.OrderId == outboundOrder.Id).ExecuteCommandAsync();
-
-                    await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
-                          .SetColumns(x => new Dt_OutboundOrder
-                          {
-                              ReturnToMESStatus = 1,
-                              Operator = App.User.UserName,
-                          }).Where(x => x.OrderNo == orderNo).ExecuteCommandAsync();
-                }
-            }
-            else if (outboundOrder.OrderType == OutOrderTypeEnum.ReCheck.ObjToInt())
-            {
-
-            }
-            else
-            {
-                try
-                {
-                    var feedmodel = new FeedbackOutboundRequestModel
-                    {
-                        reqCode = Guid.NewGuid().ToString(),
-                        reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
-                        business_type = outboundOrder.BusinessType,
-                        factoryArea = outboundOrder.FactoryArea,
-                        operationType = 1,
-                        Operator = App.User.UserName,
-                        orderNo = outboundOrder.UpperOrderNo,
-                        documentsNO = outboundOrder.OrderNo,
-                        status = outboundOrder.OrderStatus,
-                        details = new List<FeedbackOutboundDetailsModel>()
-                    };
-
-                    // 鍙幏鍙栧凡鎷i�夊畬鎴愮殑閿佸畾璁板綍
-                    var lists = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
-                        .Where(x => x.OrderNo == orderNo && (x.Status == (int)OutLockStockStatusEnum.鎷i�夊畬鎴� || x.Status == (int)OutLockStockStatusEnum.宸插洖搴�))
-                        .ToListAsync();
-
-                    var groupedData = lists.GroupBy(item => new { item.MaterielCode, item.lineNo, item.BarcodeUnit, item.WarehouseCode })
-                       .Select(group => new FeedbackOutboundDetailsModel
-                       {
-                           materialCode = group.Key.MaterielCode,
-                           lineNo = group.Key.lineNo,
-                           warehouseCode = group.Key.WarehouseCode,
-                           qty = group.Sum(x => x.PickedQty),
-                           currentDeliveryQty = group.Sum(x => x.PickedQty),
-                           unit = group.Key.BarcodeUnit,
-                           barcodes = group.Select(row => new WIDESEA_DTO.Outbound.BarcodesModel
-                           {
-                               barcode = row.CurrentBarcode,
-                               supplyCode = row.SupplyCode,
-                               batchNo = row.BatchNo,
-                               unit = row.BarcodeUnit,
-                               qty = row.PickedQty
-                           }).ToList()
-                       }).ToList();
-
-                    feedmodel.details = groupedData;
-
-                    var result = await _invokeMESService.FeedbackOutbound(feedmodel);
-                    if (result != null && result.code == 200)
-                    {
-                        await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
-                            .SetColumns(x => x.ReturnToMESStatus == 1)
-                            .Where(x => x.OrderId == outboundOrder.Id)
-                            .ExecuteCommandAsync();
-
-                        await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
-                              .SetColumns(x => new Dt_OutboundOrder
-                              {
-                                  ReturnToMESStatus = 1,
-                                  Operator = App.User.UserName,
-                              })
-
-                            .Where(x => x.OrderNo == orderNo)
-                            .ExecuteCommandAsync();
-                    }
-
-                    _logger.LogError($"FeedbackOutbound鎴愬姛 - OrderNo: {orderNo}, {JsonSerializer.Serialize(result)}");
-                }
-                catch (Exception ex)
-                {
-                    _logger.LogError($"FeedbackOutbound澶辫触 - OrderNo: {orderNo}, Error: {ex.Message}");
-                }
-            }
-        }
-
+          
         #endregion
 
         #region 绌烘墭鐩�
@@ -2157,7 +1931,7 @@
         {
             try
             {
-                // 1. 鏌ユ壘鎵�鏈変笌璇ヨ鍗曞拰鎵樼洏鐩稿叧鐨勪换鍔�
+                //  鏌ユ壘鎵�鏈変笌璇ヨ鍗曞拰鎵樼洏鐩稿叧鐨勪换鍔�
                 var tasks = await _taskRepository.Db.Queryable<Dt_Task>().Where(x => x.OrderNo == orderNo && x.PalletCode == palletCode).ToListAsync();
 
                 if (tasks.Any())
@@ -2210,7 +1984,7 @@
                     _logger.LogInformation($"璁㈠崟 {orderNo} 杩樻湁鍏朵粬鎵樼洏鍦ㄥ鐞嗭紝涓嶆洿鏂拌鍗曠姸鎬�");
                 }
 
-                // 3. 鏇存柊鎷i�夎褰曠姸鎬侊紙鍙�夛級
+                // 鏇存柊鎷i�夎褰曠姸鎬侊紙鍙�夛級
                 await UpdatePickingRecordsStatus(orderNo, palletCode);
 
             }
@@ -2253,8 +2027,6 @@
 
                 _logger.LogInformation($"璁㈠崟 {orderNo} 宸叉爣璁颁负鍑哄簱瀹屾垚");
 
-                // 鍚慚ES鍙嶉璁㈠崟瀹屾垚锛堝鏋滈渶瑕侊級
-                //await HandleOrderCompletion(outboundOrder, orderNo);
             }
         }
 
@@ -2272,7 +2044,6 @@
 
                 // 杩欓噷鍙互鏍规嵁闇�瑕佹洿鏂版嫞閫夎褰曠殑鐘舵�佸瓧娈�
                 // 渚嬪锛歱ickingRecord.Status = (int)PickingStatusEnum.宸插畬鎴�;
-
                 _logger.LogInformation($"鎵惧埌{pickingRecords.Count}鏉℃嫞閫夎褰� - 璁㈠崟: {orderNo}, 鎵樼洏: {palletCode}");
 
             }
@@ -2372,89 +2143,7 @@
 
             return result;
         }
-
-        /// <summary>
-        /// 妫�鏌ユ墭鐩樻槸鍚︿负绌� 
-        /// </summary>
-        private async Task<bool> IsPalletEmpty(string orderNo, string palletCode)
-        {
-            try
-            {
-                // 鑾峰彇搴撳瓨淇℃伅
-                var stockInfo = await _stockInfoService.Db.Queryable<Dt_StockInfo>()
-                    .Where(x => x.PalletCode == palletCode)
-                    .FirstAsync();
-
-                if (stockInfo == null)
-                    return false;
-
-                // 浣跨敤缁熶竴鐨勭姸鎬佸垎鏋�
-                var statusAnalysis = await AnalyzePalletStatus(orderNo, palletCode, stockInfo.Id);
-                return statusAnalysis.IsEmptyPallet;
-            }
-            catch (Exception ex)
-            {
-                _logger.LogWarning($"妫�鏌ユ墭鐩樻槸鍚︿负绌哄け璐� - OrderNo: {orderNo}, PalletCode: {palletCode}, Error: {ex.Message}");
-                return false;
-            }
-        }
-        /// <summary>
-        /// 妫�鏌ュ苟澶勭悊绌烘墭鐩� 
-        /// </summary>
-        private async Task<bool> CheckAndHandleEmptyPallet(string orderNo, string palletCode)
-        {
-            try
-            {
-                // 1. 鑾峰彇搴撳瓨淇℃伅
-                var stockInfo = await _stockInfoService.Db.Queryable<Dt_StockInfo>()
-                    .Where(x => x.PalletCode == palletCode)
-                    .FirstAsync();
-
-                if (stockInfo == null)
-                {
-                    _logger.LogWarning($"鏈壘鍒版墭鐩� {palletCode} 鐨勫簱瀛樹俊鎭�");
-                    return false;
-                }
-
-                // 2. 浣跨敤缁熶竴鐨勭姸鎬佸垎鏋�
-                var statusAnalysis = await AnalyzePalletStatus(orderNo, palletCode, stockInfo.Id);
-
-                // 3. 妫�鏌ユ槸鍚︿负绌烘墭鐩樹笖娌℃湁杩涜涓殑浠诲姟
-                if (!statusAnalysis.IsEmptyPallet || statusAnalysis.HasActiveTasks)
-                {
-                    return false;
-                }
-
-                _logger.LogInformation($"妫�娴嬪埌绌烘墭鐩橈紝寮�濮嬭嚜鍔ㄥ鐞� - 璁㈠崟: {orderNo}, 鎵樼洏: {palletCode}");
-
-                //// 娓呯悊闆跺簱瀛樻暟鎹�
-                //await CleanupZeroStockData(stockInfo.Id);
-
-                //// 鏇存柊搴撳瓨涓昏〃鐘舵�佷负绌烘墭鐩�
-                //await UpdateStockInfoAsEmpty(stockInfo);
-
-                //// 澶勭悊鍑哄簱閿佸畾璁板綍
-                //await HandleOutStockLockRecords(orderNo, palletCode);
-
-                //// 澶勭悊浠诲姟鐘舵��
-                //await HandleTaskStatusForEmptyPallet(orderNo, palletCode);
-
-                //// 鏇存柊璁㈠崟鏁版嵁
-                //await UpdateOrderDataForEmptyPallet(orderNo, palletCode);
-
-                ////璁板綍鎿嶄綔鍘嗗彶
-                //await RecordAutoEmptyPalletOperation(orderNo, palletCode);
-
-                _logger.LogInformation($"绌烘墭鐩樿嚜鍔ㄥ鐞嗗畬鎴� - 璁㈠崟: {orderNo}, 鎵樼洏: {palletCode}");
-
-                return true;
-            }
-            catch (Exception ex)
-            {
-                _logger.LogError($"鑷姩澶勭悊绌烘墭鐩樺け璐� - OrderNo: {orderNo}, PalletCode: {palletCode}, Error: {ex.Message}");
-                return false;
-            }
-        }
+          
 
         private async Task<string> GenerateNewBarcode()
         {
@@ -2565,11 +2254,6 @@
                 record.Status = (int)SplitPackageStatusEnum.宸叉嫞閫�;
                 await _splitPackageService.Db.Updateable(record).ExecuteCommandAsync();
             }
-        }
-
-        private async Task<int> GenerateTaskNumber()
-        {
-            return await _dailySequenceService.GetNextSequenceAsync();
         }
 
         private WebResponseContent CreatePickingResponse(PickingResult result, string adjustedReason)
@@ -3224,8 +2908,6 @@
         #endregion
     }
 
-
-
     #region 鏀寔绫诲畾涔�
 
     public class ValidationResult<T>
@@ -3262,20 +2944,6 @@
         public List<SplitResult> SplitResults { get; set; } = new List<SplitResult>();
     }
 
-    public class ReturnAnalysisResult
-    {
-        public bool HasItemsToReturn { get; set; }
-        public bool HasRemainingLocks { get; set; }
-        public bool HasPalletStockGoods { get; set; }
-        public bool HasSplitRecords { get; set; }
-        public decimal RemainingLocksReturnQty { get; set; }
-        public decimal PalletStockReturnQty { get; set; }
-        public decimal SplitReturnQty { get; set; }
-        public decimal TotalReturnQty { get; set; }
-        public List<Dt_OutStockLockInfo> RemainingLocks { get; set; } = new List<Dt_OutStockLockInfo>();
-        public List<Dt_StockInfoDetail> PalletStockGoods { get; set; } = new List<Dt_StockInfoDetail>();
-        public List<Dt_SplitPackageRecord> SplitRecords { get; set; } = new List<Dt_SplitPackageRecord>();
-    }
     public class PalletStatusAnalysis
     {
         public string OrderNo { get; set; }
@@ -3302,7 +2970,7 @@
         public List<Dt_StockInfoDetail> PalletStockGoods { get; set; } = new List<Dt_StockInfoDetail>();
         public List<Dt_SplitPackageRecord> SplitRecords { get; set; } = new List<Dt_SplitPackageRecord>();
 
-        // 銆愭柊澧炪�戝凡澶勭悊鐨勬潯鐮侀泦鍚堬紙鐢ㄤ簬閬垮厤閲嶅锛�
+        // 宸插鐞嗙殑鏉$爜闆嗗悎锛堢敤浜庨伩鍏嶉噸澶嶏級
         public HashSet<string> ProcessedBarcodes { get; set; } = new HashSet<string>();
         public List<string> AllBarcodes { get; set; } = new List<string>();
         // 绌烘墭鐩樼浉鍏冲睘鎬�
@@ -3313,18 +2981,7 @@
         public bool CanReturn => HasItemsToReturn && !HasActiveTasks;
         public bool CanRemove => IsEmptyPallet && !HasActiveTasks;
     }
-    public class PickingContext
-    {
-        public string OrderNo { get; set; }
-        public string PalletCode { get; set; }
-        public string Barcode { get; set; }
-        public string Operator { get; set; }
-        public Dt_OutStockLockInfo LockInfo { get; set; }
-        public Dt_OutboundOrderDetail OrderDetail { get; set; }
-        public Dt_StockInfoDetail StockDetail { get; set; }
-        public decimal ActualQuantity { get; set; }
-        public string AdjustedReason { get; set; }
-    }
+
     public class CancelPickingContext
     {
         public string OrderNo { get; set; }

--
Gitblit v1.9.3