From 070b9f3ea747fc763f999e4cc6b86b202f48a237 Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期四, 12 三月 2026 18:07:51 +0800
Subject: [PATCH] 1

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs |  101 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 96 insertions(+), 5 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/OutboundService.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/OutboundService.cs"
index 96577c1..6a79f4c 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/OutboundService.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/OutboundService.cs"
@@ -1371,6 +1371,9 @@
                         {
                             _outboundLockInfoRepository.DeleteAndMoveIntoHty(stockLockInfos, WIDESEA_Core.Enums.OperateTypeEnum.鑷姩鍒犻櫎);
                         }
+
+                        outboundOrderDetails.FirstOrDefault().OrderDetailStatus = (int)OrderDetailStatusEnum.Over;
+                        _detailRepository.UpdateData(outboundOrderDetails);
                     }
 
                     // 妫�鏌ュ嚭搴撳崟鏄惁瀹屾垚
@@ -1802,11 +1805,14 @@
                     // 妫�鏌ュ嚭搴撳崟鏄惁瀹屾垚
                     if (CheckOutboundOrderCompleted(request.OrderNo))
                     {
-                        UpdateOutboundOrderStatus(request.OrderNo, OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt());
-
-                        if (outboundOrder.CreateType!=OrderCreateTypeEnum.CreateInSystem.ObjToInt())
+                        if(outboundOrder.OrderType != OutOrderTypeEnum.InternalAllocat.ObjToInt())
                         {
-                            _feedbackMesService.OutboundFeedback(outboundOrder.OrderNo);
+                            UpdateOutboundOrderStatus(request.OrderNo, OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt());
+
+                            if (outboundOrder.CreateType != OrderCreateTypeEnum.CreateInSystem.ObjToInt())
+                            {
+                                _feedbackMesService.OutboundFeedback(outboundOrder.OrderNo);
+                            }
                         }
                     }
                 }
@@ -2235,8 +2241,93 @@
 
                     if (lockInfo != null && lockInfo.SortedQuantity != lockInfo.AssignQuantity)
                     {
-                        return content.Error($"鎵樼洏{palletCode}搴撳瓨锛屽湪鍗曟嵁{lockInfo.OrderNo}閲岄潰杩樻湭鎷i�夊畬鎴愶紝涓嶅厑璁稿洖搴�");
+                        // 1. 璁$畻闇�瑕佸洖婊氱殑鎬绘暟閲�
+                        decimal? rollbackTotalQuantity = lockInfo.AssignQuantity - lockInfo.SortedQuantity;
+                        // 纭繚鍥炴粴鏁伴噺涓烘鏁�
+                        if (rollbackTotalQuantity <= 0)
+                        {
+                            // 娌℃湁闇�瑕佸洖婊氱殑鏁伴噺
+                            stock.StockStatus = (int)StockStatusEmun.鍏ュ簱纭;
+                            stock.LocationCode = "";
+                        }
+
+                        try
+                        {
+                            //澶勭悊OrderDetailIds锛屽垎鍓插苟杞崲涓篒D鍒楄〃
+                            List<long> orderDetailIds = new List<long>();
+                            if (!string.IsNullOrEmpty(lockInfo.OrderDetailIds))
+                            {
+                                orderDetailIds = lockInfo.OrderDetailIds.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
+                                    .Select(id =>
+                                    {
+                                        if (long.TryParse(id.Trim(), out long result))
+                                        {
+                                            return result;
+                                        }
+                                        return 0; // 鏃犳晥ID鏍囪涓�0
+                                    })
+                                    .Where(id => id > 0)
+                                    .OrderByDescending(id => id)
+                                    .ToList();
+                            }
+
+                            if (orderDetailIds.Count == 0)
+                            {
+                                return WebResponseContent.Instance.Error("鍗曟嵁閿佸畾鍑哄簱鍗曟槑缁咺d鏃犳晥锛屾鏌ラ攣瀹氬嚭搴撴暟鎹槸鍚︽纭�");
+                            }
+
+                            //鏌ヨ瀵瑰簲鐨勮鍗曟槑缁�
+                            List<Dt_OutboundOrderDetail> orderDetails = _outboundRepository.Db.Queryable<Dt_OutboundOrderDetail>()
+                                .Where(x => orderDetailIds.Contains(x.Id))
+                                .ToList();
+
+                            if (orderDetails.Count == 0)
+                            {
+                                return WebResponseContent.Instance.Error("鏈壘鍒板彲鍥炴粴鏄庣粏锛岃妫�鏌ュ嚭搴撳崟鏄庣粏");
+                            }
+
+                            decimal remainingRollbackQty = (decimal)rollbackTotalQuantity;
+                            foreach (var detail in orderDetails)
+                            {
+                                if (remainingRollbackQty <= 0)
+                                {
+                                    break;
+                                }
+
+                                // 璁$畻璇ユ槑缁嗙殑鍙洖婊氭暟閲�
+                                decimal availableRollbackQty = detail.LockQuantity - detail.OverOutQuantity - detail.MoveQty;
+
+                                availableRollbackQty = Math.Max(0, availableRollbackQty);
+
+                                if (availableRollbackQty <= 0)
+                                {
+                                    continue; // 璇ユ槑缁嗘棤鍙洖婊氭暟閲忥紝璺宠繃
+                                }
+
+                                // 璁$畻鏈瀹為檯鍥炴粴鏁伴噺锛堝彇鍙洖婊氭暟閲忓拰鍓╀綑闇�瑕佸洖婊氭暟閲忕殑杈冨皬鍊硷級
+                                decimal actualRollbackQty = Math.Min(availableRollbackQty, remainingRollbackQty);
+
+                                detail.LockQuantity -= actualRollbackQty;
+                                detail.LockQuantity = Math.Max(0, detail.LockQuantity);
+
+                                _detailRepository.UpdateData(detail);
+
+                                //鏇存柊鍓╀綑闇�瑕佸洖婊氱殑鏁伴噺
+                                remainingRollbackQty -= actualRollbackQty;
+                            }
+                            
+                            if (remainingRollbackQty > 0)
+                            {
+                                return WebResponseContent.Instance.Error($"鍓╀綑鍥炴粴鏁伴噺{remainingRollbackQty}");
+                            }
+                            _outboundLockInfoRepository.DeleteAndMoveIntoHty(lockInfo, WIDESEA_Core.Enums.OperateTypeEnum.浜哄伐鍒犻櫎);
+                        }
+                        catch (Exception ex)
+                        {
+                            return WebResponseContent.Instance.Error(ex.Message);
+                        }
                     }
+
                     stock.StockStatus = (int)StockStatusEmun.鍏ュ簱纭;
                     stock.LocationCode = "";
                 }

--
Gitblit v1.9.3