From bbc4a3a07baf111c9074ceee7728158fb3eedf1a Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期二, 25 十一月 2025 05:33:35 +0800
Subject: [PATCH] 提交

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs |  162 ++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 115 insertions(+), 47 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 4e34b27..01a0644 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"
@@ -293,14 +293,15 @@
 
                 _unitOfWorkManage.CommitTran();
 
-              
+
                 // 鍒涘缓鍥炲簱浠诲姟
-                await CreateReturnTaskAndHandleESS(orderNo, palletCode, task, TaskTypeEnum.InPick);
+                await CreateReturnTaskAndHandleESS(orderNo, palletCode, task, TaskTypeEnum.InPick,task.PalletType);
 
                 // 鏇存柊璁㈠崟鐘舵�侊紙涓嶈Е鍙慚ES鍥炰紶锛�
                 await UpdateOrderStatusForReturn(orderNo);
 
-                return WebResponseContent.Instance.OK($"鍥炲簱鎿嶄綔鎴愬姛锛屽叡鍥炲簱鏁伴噺锛歿statusAnalysis.TotalReturnQty}");
+                return WebResponseContent.Instance.OK($"鍥炲簱鎿嶄綔鎴愬姛");
+                //return WebResponseContent.Instance.OK($"鍥炲簱鎿嶄綔鎴愬姛锛屽叡鍥炲簱鏁伴噺锛歿statusAnalysis.TotalReturnQty}");
             }
             catch (Exception ex)
             {
@@ -616,7 +617,7 @@
             result.FinalBarcode = newBarcode;
             result.SplitResults.AddRange(CreateSplitResults(lockInfo, actualQty, remainingStockQty, newBarcode, stockDetail.Barcode));
 
-           
+
 
             _logger.LogInformation($"鎷嗗寘鍒嗘嫞瀹屾垚 - OrderDetailId: {lockInfo.OrderDetailId}, 鍒嗘嫞鏁伴噺: {actualQty}");
         }
@@ -1037,7 +1038,7 @@
 
             return task;
         }
- 
+
         private async Task<decimal> CalculateSplitReturnQuantity(List<Dt_SplitPackageRecord> splitRecords, int stockId)
         {
             decimal totalQty = 0;
@@ -1045,11 +1046,14 @@
 
             foreach (var splitRecord in splitRecords)
             {
+                if (splitRecord.Status != (int)SplitPackageStatusEnum.宸叉挙閿�)
+                    continue;
                 // 妫�鏌ュ師鏉$爜
                 if (!processedBarcodes.Contains(splitRecord.OriginalBarcode))
                 {
                     var originalStock = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
-                        .Where(it => it.Barcode == splitRecord.OriginalBarcode && it.StockId == stockId)
+                        .Where(it => it.Barcode == splitRecord.OriginalBarcode && it.StockId == stockId &&
+                           it.Status != StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt())
                         .FirstAsync();
 
                     if (originalStock != null && originalStock.StockQuantity > 0)
@@ -1063,7 +1067,7 @@
                 if (!processedBarcodes.Contains(splitRecord.NewBarcode))
                 {
                     var newStock = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
-                        .Where(it => it.Barcode == splitRecord.NewBarcode && it.StockId == stockId)
+                        .Where(it => it.Barcode == splitRecord.NewBarcode && it.StockId == stockId && it.Status != StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt())
                         .FirstAsync();
 
                     if (newStock != null && newStock.StockQuantity > 0)
@@ -1111,11 +1115,13 @@
                 else
                 {
                     locationtype = stockInfo.LocationType;
+                    _stockInfoService.DeleteData(stockInfo);
                 }
 
                 var targetAddress = originalTask.TargetAddress;
 
                 await CleanupZeroStockData(stockInfoId);
+             
 
                 var emptystockInfo = new Dt_StockInfo() { PalletType = PalletTypeEnum.Empty.ObjToInt(), StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(), PalletCode = palletCode, LocationType = locationtype };
                 emptystockInfo.Details = new List<Dt_StockInfoDetail>();
@@ -1123,7 +1129,7 @@
                 //绌烘墭鐩樺浣曞鐞�  杩樻湁涓�涓嚭搴撲换鍔¤澶勭悊銆�
                 originalTask.PalletType = PalletTypeEnum.Empty.ObjToInt();
 
-                await CreateReturnTaskAndHandleESS(orderNo, palletCode, originalTask, TaskTypeEnum.InEmpty);
+                await CreateReturnTaskAndHandleESS(orderNo, palletCode, originalTask, TaskTypeEnum.InEmpty,PalletTypeEnum.Empty.ObjToInt());
 
             }
             catch (Exception ex)
@@ -1143,19 +1149,41 @@
             {
                 await HandleRemainingLocksReturn(analysis.RemainingLocks, stockInfo.Id);
 
-               // await UpdateOrderDetailsOnReturn(analysis.RemainingLocks);
-            }                
+                // await UpdateOrderDetailsOnReturn(analysis.RemainingLocks);
+            }
 
             // 澶勭悊鎵樼洏涓婂叾浠栧簱瀛樿揣鐗�
             if (analysis.HasPalletStockGoods)
             {
-                await HandlePalletStockGoodsReturn(analysis.PalletStockGoods);
+                var validStockGoods = analysis.PalletStockGoods
+            .Where(x => x.Status != StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt())
+            .ToList();
+
+                if (validStockGoods.Any())
+                {
+                    await HandlePalletStockGoodsReturn(analysis.PalletStockGoods);
+                }
+                else
+                {
+                    _logger.LogInformation("娌℃湁鏈夋晥鐨勫簱瀛樿揣鐗╅渶瑕佸洖搴�");
+                }
             }
 
             // 澶勭悊鎷嗗寘璁板綍
             if (analysis.HasSplitRecords)
             {
-                await HandleSplitRecordsReturn(analysis.SplitRecords, orderNo, palletCode);
+                var validSplitRecords = analysis.SplitRecords
+            .Where(x => x.Status != (int)SplitPackageStatusEnum.宸叉嫞閫�)
+            .ToList();
+
+                if (validSplitRecords.Any())
+                {
+                    await HandleSplitRecordsReturn(analysis.SplitRecords, orderNo, palletCode);
+                }
+                else
+                {
+                    _logger.LogInformation("娌℃湁鏈夋晥鐨勬媶鍖呰褰曢渶瑕佸鐞�");
+                }
             }
 
             // 鏇存柊搴撳瓨涓昏〃鐘舵��
@@ -1179,7 +1207,13 @@
             foreach (var lockInfo in remainingLocks)
             {
                 decimal returnQty = lockInfo.AssignQuantity - lockInfo.PickedQty;
+                if (returnQty <= 0)
+                {
+                    _logger.LogWarning($"閿佸畾璁板綍{lockInfo.Id}鏃犻渶鍥炲簱锛屽垎閰嶆暟閲�: {lockInfo.AssignQuantity}, 宸叉嫞閫�: {lockInfo.PickedQty}");
+                    continue;
+                }
 
+                _logger.LogInformation($"澶勭悊閿佸畾璁板綍鍥炲簱 - 閿佸畾ID: {lockInfo.Id}, 鏉$爜: {lockInfo.CurrentBarcode}, 鍥炲簱鏁伴噺: {returnQty}");
                 // 鏌ユ壘瀵瑰簲鐨勫簱瀛樻槑缁�
                 var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
                     .Where(it => it.Barcode == lockInfo.CurrentBarcode && it.StockId == lockInfo.StockId)
@@ -1195,23 +1229,23 @@
                 else
                 {
                     // 鍒涘缓鏂扮殑搴撳瓨璁板綍
-                    var newStockDetail = new Dt_StockInfoDetail
-                    {
-                        StockId = lockInfo.StockId,
-                        MaterielCode = lockInfo.MaterielCode,
-                        MaterielName = lockInfo.MaterielName,
-                        OrderNo = lockInfo.OrderNo,
-                        BatchNo = lockInfo.BatchNo,
-                        StockQuantity = returnQty,
-                        OutboundQuantity = 0,
-                        Barcode = lockInfo.CurrentBarcode,
-                        InboundOrderRowNo = "",
-                        Status = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
-                        SupplyCode = lockInfo.SupplyCode,
-                        WarehouseCode = lockInfo.WarehouseCode,
-                        Unit = lockInfo.Unit,
-                    };
-                    await _stockInfoDetailService.Db.Insertable(newStockDetail).ExecuteCommandAsync();
+                    //var newStockDetail = new Dt_StockInfoDetail
+                    //{
+                    //    StockId = lockInfo.StockId,
+                    //    MaterielCode = lockInfo.MaterielCode,
+                    //    MaterielName = lockInfo.MaterielName,
+                    //    OrderNo = lockInfo.OrderNo,
+                    //    BatchNo = lockInfo.BatchNo,
+                    //    StockQuantity = returnQty,
+                    //    OutboundQuantity = 0,
+                    //    Barcode = lockInfo.CurrentBarcode,
+                    //    InboundOrderRowNo = "",
+                    //    Status = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
+                    //    SupplyCode = lockInfo.SupplyCode,
+                    //    WarehouseCode = lockInfo.WarehouseCode,
+                    //    Unit = lockInfo.Unit,
+                    //};
+                    //await _stockInfoDetailService.Db.Insertable(newStockDetail).ExecuteCommandAsync();
                 }
             }
         }
@@ -1255,23 +1289,41 @@
             {
                 _logger.LogInformation($"寰呭洖搴撹揣鐗� - 鏉$爜: {stockGood.Barcode}, 鏁伴噺: {stockGood.StockQuantity}, 褰撳墠鐘舵��: {stockGood.Status}");
 
-                // 鎭㈠搴撳瓨鐘舵��
-                stockGood.OutboundQuantity = 0;
-                stockGood.Status = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+                if (stockGood.Status != StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt())
+                {
+                    stockGood.OutboundQuantity = 0;
+                    stockGood.Status = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+                    await _stockInfoDetailService.Db.Updateable(stockGood).ExecuteCommandAsync();
 
-                await _stockInfoDetailService.Db.Updateable(stockGood).ExecuteCommandAsync();
+                    _logger.LogInformation($"搴撳瓨璐х墿鍥炲簱瀹屾垚 - 鏉$爜: {stockGood.Barcode}, 鏂扮姸鎬�: {stockGood.Status}");
+                }
+                else
+                {
+                    _logger.LogWarning($"璺宠繃宸插嚭搴撳畬鎴愮殑璐х墿 - 鏉$爜: {stockGood.Barcode}");
+                }
             }
         }
 
         private async Task HandleSplitRecordsReturn(List<Dt_SplitPackageRecord> splitRecords, string orderNo, string palletCode)
         {
+            var validRecords = splitRecords.Where(x => x.Status != (int)SplitPackageStatusEnum.宸叉嫞閫�).ToList();
+
+            if (!validRecords.Any())
+            {
+                _logger.LogInformation("娌℃湁闇�瑕佸洖搴撶殑鎷嗗寘璁板綍");
+                return;
+            }
+
+            _logger.LogInformation($"鏇存柊{validRecords.Count}鏉℃媶鍖呰褰曠姸鎬佷负宸插洖搴�");
+
             // 鏇存柊鎷嗗寘璁板綍鐘舵��
             await _splitPackageService.Db.Updateable<Dt_SplitPackageRecord>()
                 .SetColumns(x => new Dt_SplitPackageRecord
                 {
                     Status = (int)SplitPackageStatusEnum.宸插洖搴�,
+                    Operator = App.User.UserName
                 })
-                .Where(x => x.OrderNo == orderNo && x.PalletCode == palletCode && !x.IsReverted)
+                .Where(x => validRecords.Select(r => r.Id).Contains(x.Id))
                 .ExecuteCommandAsync();
         }
 
@@ -1290,7 +1342,7 @@
         /// <param name="originalTask"></param>
         /// <param name="analysis"></param>
         /// <returns></returns>
-        private async Task CreateReturnTaskAndHandleESS(string orderNo, string palletCode, Dt_Task originalTask, TaskTypeEnum taskTypeEnum)
+        private async Task CreateReturnTaskAndHandleESS(string orderNo, string palletCode, Dt_Task originalTask, TaskTypeEnum taskTypeEnum,int palletType)
         {
             var firstLocation = await _locationInfoService.Db.Queryable<Dt_LocationInfo>()
                 .FirstAsync(x => x.LocationCode == originalTask.SourceAddress);
@@ -1304,15 +1356,16 @@
                 Grade = 0,
                 PalletCode = palletCode,
                 NextAddress = "",
-                OrderNo = originalTask.OrderNo,
+                // OrderNo = originalTask.OrderNo,
+                OrderNo = orderNo,
                 Roadway = newLocation.RoadwayNo,
                 SourceAddress = stations[originalTask.TargetAddress],
                 TargetAddress = newLocation.LocationCode,
                 TaskStatus = TaskStatusEnum.New.ObjToInt(),
                 TaskType = taskTypeEnum.ObjToInt(),
-                PalletType = originalTask.PalletType,
+                PalletType = palletType,
                 WarehouseId = originalTask.WarehouseId
-
+                
             };
             // 淇濆瓨鍥炲簱浠诲姟
             await _taskRepository.Db.Insertable(returnTask).ExecuteCommandAsync();
@@ -1420,10 +1473,10 @@
                         .ExecuteCommandAsync();
 
                     // 鍙湁姝e父鍒嗘嫞瀹屾垚鏃舵墠鍚慚ES鍙嶉
-                    if (allCompleted && newStatus == (int)OutOrderStatusEnum.鍑哄簱瀹屾垚)
-                    {
-                        await HandleOrderCompletion(outboundOrder, orderNo);
-                    }
+                    //if (allCompleted && newStatus == (int)OutOrderStatusEnum.鍑哄簱瀹屾垚)
+                    //{
+                    //    await HandleOrderCompletion(outboundOrder, orderNo);
+                    //}
                 }
             }
             catch (Exception ex)
@@ -1432,7 +1485,7 @@
             }
         }
 
-        
+
 
         private async Task UpdateOrderStatusForReturn(string orderNo)
         {
@@ -1728,7 +1781,7 @@
                 StockId = stockId
             };
 
-            // 1. 鍒嗘瀽鏈垎鎷g殑鍑哄簱閿佸畾璁板綍
+            // 鍒嗘瀽鏈垎鎷g殑鍑哄簱閿佸畾璁板綍
             var remainingLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
                 .Where(it => it.OrderNo == orderNo &&
                            it.PalletCode == palletCode &&
@@ -1740,9 +1793,10 @@
                 result.HasRemainingLocks = true;
                 result.RemainingLocks = remainingLocks;
                 result.RemainingLocksReturnQty = remainingLocks.Sum(x => x.AssignQuantity - x.PickedQty);
+                _logger.LogInformation($"鍙戠幇{remainingLocks.Count}鏉℃湭鍒嗘嫞閿佸畾璁板綍锛屾�绘暟閲�: {result.RemainingLocksReturnQty}");
             }
 
-            // 2. 鍒嗘瀽鎵樼洏涓婄殑搴撳瓨璐х墿
+            // 鍒嗘瀽鎵樼洏涓婄殑搴撳瓨璐х墿
             var palletStockGoods = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
                 .Where(it => it.StockId == stockId &&
                      (it.Status == StockStatusEmun.鍏ュ簱纭.ObjToInt() ||
@@ -1756,13 +1810,21 @@
                 result.HasPalletStockGoods = true;
                 result.PalletStockGoods = palletStockGoods;
                 result.PalletStockReturnQty = palletStockGoods.Sum(x => x.StockQuantity);
+                _logger.LogInformation($"鍙戠幇{palletStockGoods.Count}涓簱瀛樿揣鐗╋紝鎬绘暟閲�: {result.PalletStockReturnQty}");
+
+                // 璁板綍璇︾粏鐘舵�佸垎甯�
+                var statusGroups = palletStockGoods.GroupBy(x => x.Status);
+                foreach (var group in statusGroups)
+                {
+                    _logger.LogInformation($"搴撳瓨鐘舵�亄group.Key}: {group.Count()}涓揣鐗╋紝鏁伴噺: {group.Sum(x => x.StockQuantity)}");
+                }
             }
 
-            // 3. 鍒嗘瀽鎷嗗寘璁板綍
+            //鍒嗘瀽鎷嗗寘璁板綍
             var splitRecords = await _splitPackageService.Db.Queryable<Dt_SplitPackageRecord>()
                 .Where(it => it.OrderNo == orderNo &&
                            it.PalletCode == palletCode &&
-                           !it.IsReverted &&
+                           !it.IsReverted && it.Status != (int)SplitPackageStatusEnum.宸叉嫞閫� &&
                            it.Status != (int)SplitPackageStatusEnum.宸插洖搴�)
                 .ToListAsync();
 
@@ -1771,6 +1833,8 @@
                 result.HasSplitRecords = true;
                 result.SplitRecords = splitRecords;
                 result.SplitReturnQty = await CalculateSplitReturnQuantity(splitRecords, stockId);
+
+                _logger.LogInformation($"鍙戠幇{splitRecords.Count}鏉℃湭鎷i�夋媶鍖呰褰曪紝鎬绘暟閲�: {result.SplitReturnQty}");
             }
 
             // 4. 璁$畻鎬诲洖搴撴暟閲忓拰绌烘墭鐩樼姸鎬�
@@ -1785,6 +1849,10 @@
                            x.TaskStatus == (int)TaskStatusEnum.New)
                 .AnyAsync();
 
+            _logger.LogInformation($"鎵樼洏鐘舵�佸垎鏋愬畬鎴� - 璁㈠崟: {orderNo}, 鎵樼洏: {palletCode}, " +
+                                  $"鎬诲洖搴撴暟閲�: {result.TotalReturnQty}, 鏄惁绌烘墭鐩�: {result.IsEmptyPallet}, " +
+                                  $"鏈夎繘琛屼腑浠诲姟: {result.HasActiveTasks}");
+
             return result;
         }
 

--
Gitblit v1.9.3