From 246622a6e9c2563bd21d627c21c6012017f0f04e Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期四, 20 十一月 2025 15:54:03 +0800
Subject: [PATCH] 提交

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/SplitPackageService.cs     |  476 +++++++++++++------
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs           |    4 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_PickingRecord.cs  |   10 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs |    5 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs  |  866 +++++++++++++++++++++++++++--------
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Outbound/OutboundOrderGetDTO.cs        |   26 +
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs             |   21 
 7 files changed, 1,030 insertions(+), 378 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_Common/StockEnum/OutLockStockStatusEnum.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_Common/StockEnum/OutLockStockStatusEnum.cs"
index 7507b14..eca1209 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_Common/StockEnum/OutLockStockStatusEnum.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_Common/StockEnum/OutLockStockStatusEnum.cs"
@@ -19,8 +19,9 @@
     public enum SplitPackageStatusEnum
     {
         宸叉媶鍖� = 1,
-        宸叉嫞閫� = 2,
-        宸插洖搴� = 3
+        宸叉挙閿� = 2,
+        宸叉嫞閫� = 3,
+        宸插洖搴� = 4
     }
     public enum OutLockStockStatusEnum
     {
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_DTO/Outbound/OutboundOrderGetDTO.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_DTO/Outbound/OutboundOrderGetDTO.cs"
index e62e839..b39c856 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_DTO/Outbound/OutboundOrderGetDTO.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_DTO/Outbound/OutboundOrderGetDTO.cs"
@@ -15,7 +15,23 @@
         public int pageNo { get; set; }
 
     }
+    // 鎷嗗寘閾綝TO
+    public class SplitPackageChainDto
+    {
+        public int Id { get; set; }
+        public DateTime SplitTime { get; set; }
+        public string Operator { get; set; }
+        public string OriginalBarcode { get; set; }
+        public string NewBarcode { get; set; }
+        public decimal SplitQty { get; set; }
+        public decimal RemainQuantity { get; set; }
+        public bool IsReverted { get; set; }
+        public DateTime? RevertTime { get; set; }
+        public int? PreviousSplitRecordId { get; set; }
 
+        public int NewLockInfoId { get; set; }
+        public int Status { get; set; }
+    }
     // 鎷嗗寘璇锋眰
     public class SplitPackageRequest
     {
@@ -251,10 +267,20 @@
         public string PalletCode { get; set; }
         public string OriginalBarcode { get; set; }
         public decimal SplitQuantity { get; set; }
+        public string MaterielCode { get; set; }
     }
 
     public class RevertSplitDto
     {
         public string OriginalBarcode { get; set; }
     }
+
+    // 鎷嗗寘缁撴灉绫�
+    public class SplitResult
+    {
+        public string OriginalBarcode { get; set; }
+        public string NewBarcode { get; set; }
+        public decimal SplitQuantity { get; set; }
+        public decimal RemainQuantity { get; set; }
+    }
 }
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_Model/Models/Outbound/Dt_PickingRecord.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_Model/Models/Outbound/Dt_PickingRecord.cs"
index cddab2f..798a774 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_Model/Models/Outbound/Dt_PickingRecord.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_Model/Models/Outbound/Dt_PickingRecord.cs"
@@ -104,6 +104,16 @@
         public DateTime SplitTime { get; set; } = DateTime.Now;
         public string Operator { get; set; } // 鎿嶄綔浜�
         public int Status { get; set; } // 鐘舵�侊細1-宸叉媶鍖� 2-宸叉嫞閫� 3-宸插洖搴�
+
+        public DateTime RevertTime { get; set; }
+
+        public int PreviousSplitRecordId { get; set; }
+
+        [SugarColumn(IsNullable = true)]
+        public decimal? OriginalStockQuantity { get; set; }
+
+       public decimal StockBeforeSplit { get; set; }
+        public decimal AssignBeforeSplit { get; set; }
     }
  
 
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 653f016..6d672b9 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"
@@ -45,6 +45,7 @@
         private readonly IRepository<Dt_Task> _taskRepository;
         private readonly IESSApiService _eSSApiService;
         private readonly IInvokeMESService _invokeMESService;
+        private readonly IDailySequenceService _dailySequenceService;
 
         private readonly ILogger<OutboundPickingService> _logger;
 
@@ -62,7 +63,10 @@
 
         };
 
-        public OutboundPickingService(IRepository<Dt_PickingRecord> BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockInfoService stockInfoService, IStockService stockService, IOutStockLockInfoService outStockLockInfoService, IStockInfoDetailService stockInfoDetailService, ILocationInfoService locationInfoService, IOutboundOrderDetailService outboundOrderDetailService, ISplitPackageService splitPackageService, IOutboundOrderService outboundOrderService, IRepository<Dt_Task> taskRepository, IESSApiService eSSApiService, ILogger<OutboundPickingService> logger, IInvokeMESService invokeMESService) : base(BaseDal)
+        public OutboundPickingService(IRepository<Dt_PickingRecord> BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockInfoService stockInfoService, IStockService stockService,
+            IOutStockLockInfoService outStockLockInfoService, IStockInfoDetailService stockInfoDetailService, ILocationInfoService locationInfoService,
+            IOutboundOrderDetailService outboundOrderDetailService, ISplitPackageService splitPackageService, IOutboundOrderService outboundOrderService,
+            IRepository<Dt_Task> taskRepository, IESSApiService eSSApiService, ILogger<OutboundPickingService> logger, IInvokeMESService invokeMESService, IDailySequenceService dailySequenceService) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
             _stockInfoService = stockInfoService;
@@ -77,6 +81,7 @@
             _eSSApiService = eSSApiService;
             _logger = logger;
             _invokeMESService = invokeMESService;
+            _dailySequenceService = dailySequenceService;
         }
 
 
@@ -141,117 +146,6 @@
             }
         }
 
-
-        public async Task<WebResponseContent> ConfirmPicking(string orderNo, string palletCode, string barcode)
-        {
-            try
-            {
-                _unitOfWorkManage.BeginTran();
-                var lockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
-                  .Where(it => it.OrderNo == orderNo &&
-                             it.Status == (int)OutLockStockStatusEnum.鍑哄簱涓� &&
-                             it.PalletCode == palletCode &&
-                             it.CurrentBarcode == barcode)
-                  .FirstAsync();
-
-                if (lockInfo == null)
-                {
-                    var splitBarcode = await _splitPackageService.Db.Queryable<Dt_SplitPackageRecord>()
-                   .Where(it => it.NewBarcode == barcode && it.Status == 1)
-                   .FirstAsync();
-
-                    if (splitBarcode != null)
-                    {
-                        // 閫氳繃鎷嗗寘鏉$爜璁板綍鎵惧埌瀵瑰簲鐨勫嚭搴撻攣瀹氳褰�
-                        lockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
-                            .Where(it => it.ParentLockId == splitBarcode.OutStockLockInfoId)
-                            .FirstAsync();
-
-                        if (lockInfo == null)
-                            throw new Exception($"鏈壘鍒版媶鍖呮潯鐮亄barcode}瀵瑰簲鐨勫嚭搴撻攣瀹氳褰�");
-                    }
-                    else
-                    {
-                        throw new Exception($"鏉$爜{barcode}涓嶅睘浜庢墭鐩榹palletCode}鎴栦笉瀛樺湪寰呭垎鎷h褰�");
-                    }
-
-                }
-                if (lockInfo.PalletCode != palletCode)
-                    throw new Exception($"鏉$爜{barcode}涓嶅睘浜庢墭鐩榹palletCode}");
-
-                var outorderdetail = _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>().First(x => x.Id == lockInfo.OrderDetailId);
-                if (outorderdetail != null && lockInfo.AssignQuantity > outorderdetail.OrderQuantity)
-                {
-                    throw new Exception($"鏉$爜{barcode}鐨勫嚭搴撴暟閲忓ぇ浜庤鍗曠殑鏁伴噺");
-                }
-
-                var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
-                        .Where(x => x.Barcode == barcode && x.StockId == lockInfo.StockId)
-                        .FirstAsync();
-
-                if (stockDetail == null)
-                    return WebResponseContent.Instance.Error("鏃犳晥鐨勬潯鐮佹垨鐗╂枡缂栫爜");
-
-
-                decimal actualQty = lockInfo.AssignQuantity - lockInfo.PickedQty;
-
-                // 4. 鏇存柊搴撳瓨
-                stockDetail.StockQuantity -= actualQty;
-                stockDetail.OutboundQuantity -= actualQty;
-                await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
-
-                lockInfo.PickedQty += actualQty;
-                lockInfo.Status = (int)OutLockStockStatusEnum.鎷i�夊畬鎴�;
-                await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
-
-                var splitBarcodeRecord = await _splitPackageService.Db.Queryable<Dt_SplitPackageRecord>()
-               .Where(it => it.NewBarcode == barcode)
-               .FirstAsync();
-
-                if (splitBarcodeRecord != null)
-                {
-                    splitBarcodeRecord.Status = 2;
-                    await _splitPackageService.Db.Updateable(splitBarcodeRecord).ExecuteCommandAsync();
-                }
-
-                await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
-               .SetColumns(it => it.PickedQty == it.PickedQty + actualQty)
-               .Where(it => it.Id == lockInfo.OrderDetailId)
-               .ExecuteCommandAsync();
-
-
-                await CheckAndUpdateOrderStatus(orderNo);
-
-                //鏌ヨ浠诲姟琛� 
-                var task = _taskRepository.QueryData(x => x.OrderNo == orderNo && x.PalletCode == palletCode).FirstOrDefault();
-                // 9. 璁板綍鎷i�夊巻鍙�
-                var pickingHistory = new Dt_PickingRecord
-                {
-                    FactoryArea = lockInfo.FactoryArea,
-                    TaskNo = task?.TaskNum ?? 0,
-                    LocationCode = task?.SourceAddress ?? "",
-                    StockId = stockDetail.Id,
-                    OrderNo = orderNo,
-                    OrderDetailId = lockInfo.OrderDetailId,
-                    PalletCode = palletCode,
-                    Barcode = barcode,
-                    MaterielCode = lockInfo.MaterielCode,
-                    PickQuantity = lockInfo.AssignQuantity,
-                    PickTime = DateTime.Now,
-                    Operator = App.User.UserName,
-                    OutStockLockId = lockInfo.Id
-                };
-                await Db.Insertable(pickingHistory).ExecuteCommandAsync();
-
-                _unitOfWorkManage.CommitTran();
-                return WebResponseContent.Instance.OK("鎷i�夌‘璁ゆ垚鍔�");
-
-            }
-            catch (Exception ex)
-            {
-                return WebResponseContent.Instance.Error($"鎷i�夌‘璁ゅけ璐ワ細{ex.Message}");
-            }
-        }
         // 妫�鏌ュ苟鏇存柊璁㈠崟鐘舵��
         private async Task CheckAndUpdateOrderStatus(string orderNo)
         {
@@ -340,14 +234,231 @@
                         }
                     }
                 }
-                catch (Exception ex) {
+                catch (Exception ex)
+                {
                     _logger.LogError(" OutboundPickingService  FeedbackOutbound : " + ex.Message);
                 }
-                 
+
             }
         }
 
+        public async Task<WebResponseContent> ConfirmPicking(string orderNo, string palletCode, string barcode)
+        {
+            try
+            {
+                _unitOfWorkManage.BeginTran();
 
+                // 1. 鏌ユ壘鍑哄簱閿佸畾淇℃伅
+                var lockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+                    .Where(it => it.OrderNo == orderNo &&
+                               it.Status == (int)OutLockStockStatusEnum.鍑哄簱涓� &&
+                               it.PalletCode == palletCode &&
+                               it.CurrentBarcode == barcode)
+                    .FirstAsync();
+
+                if (lockInfo == null)
+                {
+                    lockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+    .Where(it => it.CurrentBarcode == barcode &&
+               it.Status == (int)OutLockStockStatusEnum.鍑哄簱涓�)
+    .FirstAsync();
+
+                    if (lockInfo == null)
+                        throw new Exception($"鏉$爜{barcode}涓嶅睘浜庢墭鐩榹palletCode}鎴栦笉瀛樺湪寰呭垎鎷h褰�");
+                }
+
+                if (lockInfo.PalletCode != palletCode)
+                    throw new Exception($"鏉$爜{barcode}涓嶅睘浜庢墭鐩榹palletCode}");
+
+                var outorderdetail = _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>().First(x => x.Id == lockInfo.OrderDetailId);
+                if (outorderdetail != null && lockInfo.AssignQuantity > outorderdetail.OrderQuantity)
+                {
+                    throw new Exception($"鏉$爜{barcode}鐨勫嚭搴撴暟閲忓ぇ浜庤鍗曠殑鏁伴噺");
+                }
+
+                var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+                        .Where(x => x.Barcode == barcode && x.StockId == lockInfo.StockId)
+                        .FirstAsync();
+
+                if (stockDetail == null)
+                    return WebResponseContent.Instance.Error("鏃犳晥鐨勬潯鐮佹垨鐗╂枡缂栫爜");
+
+                decimal actualQty = lockInfo.AssignQuantity - lockInfo.PickedQty;
+                decimal stockQuantity = stockDetail.StockQuantity;
+
+                List<SplitResult> splitResults = new List<SplitResult>();
+
+                if (actualQty < stockQuantity)
+                {
+                    // 鎯呭喌1: 鍒嗛厤鏁伴噺灏忎簬搴撳瓨鏁伴噺锛岄渶瑕佽嚜鍔ㄦ媶鍖�
+                    // 璁$畻鍓╀綑搴撳瓨鏁伴噺
+                    decimal remainingStockQty = stockQuantity - actualQty;
+
+                    // 鏇存柊鍘熸潯鐮佸簱瀛樹负鍓╀綑鏁伴噺
+                    stockDetail.StockQuantity = remainingStockQty;
+                    stockDetail.OutboundQuantity = remainingStockQty;
+                    await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
+
+                    // 鐢熸垚鏂版潯鐮佺敤浜庤褰曟嫞閫夋暟閲忥紙浣嗕笉鍒涘缓搴撳瓨璁板綍锛�
+                    var seq = await _dailySequenceService.GetNextSequenceAsync();
+                    string newBarcode = "WSLOT" + DateTime.Now.ToString("yyyyMMdd") + seq.ToString()?.PadLeft(5, '0');
+
+                    // 涓烘柊鏉$爜鍒涘缓鍑哄簱閿佸畾淇℃伅锛堢敤浜庤褰曟嫞閫夛級
+                    var newLockInfo = new Dt_OutStockLockInfo
+                    {
+                        OrderNo = lockInfo.OrderNo,
+                        OrderDetailId = lockInfo.OrderDetailId,
+                        BatchNo = lockInfo.BatchNo,
+                        MaterielCode = lockInfo.MaterielCode,
+                        MaterielName = lockInfo.MaterielName,
+                        StockId = lockInfo.StockId,
+                        OrderQuantity = actualQty,
+                        OriginalQuantity = actualQty,
+                        AssignQuantity = actualQty,
+                        PickedQty = actualQty,
+                        LocationCode = lockInfo.LocationCode,
+                        PalletCode = lockInfo.PalletCode,
+                        TaskNum = lockInfo.TaskNum,
+                        Status = (int)OutLockStockStatusEnum.鎷i�夊畬鎴�,
+                        Unit = lockInfo.Unit,
+                        SupplyCode = lockInfo.SupplyCode,
+                        OrderType = lockInfo.OrderType,
+                        CurrentBarcode = newBarcode,
+                        OriginalLockQuantity = actualQty,
+                        IsSplitted = 1,
+                        ParentLockId = lockInfo.Id
+                    };
+                    await _outStockLockInfoService.Db.Insertable(newLockInfo).ExecuteCommandAsync();
+
+                    // 璁板綍鎷嗗寘鍘嗗彶锛堢敤浜庤拷韪級
+                    var splitHistory = new Dt_SplitPackageRecord
+                    {
+                        FactoryArea = lockInfo.FactoryArea,
+                        TaskNum = lockInfo.TaskNum,
+                        OutStockLockInfoId = lockInfo.Id,
+                        StockId = stockDetail.StockId,
+                        Operator = App.User.UserName,
+                        IsReverted = false,
+                        OriginalBarcode = barcode,
+                        NewBarcode = newBarcode,
+                        SplitQty = actualQty,
+                        RemainQuantity = remainingStockQty,
+                        MaterielCode = lockInfo.MaterielCode,
+                        SplitTime = DateTime.Now,
+                        OrderNo = lockInfo.OrderNo,
+                        PalletCode = lockInfo.PalletCode,
+                        Status = (int)SplitPackageStatusEnum.宸叉嫞閫�
+                    };
+                    await _splitPackageService.Db.Insertable(splitHistory).ExecuteCommandAsync();
+
+                    // 鏇存柊鍘熼攣瀹氫俊鎭负鍓╀綑搴撳瓨鏁伴噺
+                    lockInfo.AssignQuantity = remainingStockQty;
+                    lockInfo.PickedQty = 0;  
+                                       
+                    await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
+
+                    splitResults.Add(new SplitResult
+                    {
+                        OriginalBarcode = barcode,
+                        NewBarcode = newBarcode,
+                        SplitQuantity = actualQty,
+                        RemainQuantity = remainingStockQty
+                    });
+
+                    // 鏇存柊鎷i�夎褰曚腑鐨勬潯鐮佷负鏂版潯鐮�
+                    barcode = newBarcode;
+                    lockInfo = newLockInfo;
+                }
+                else if (actualQty == stockQuantity)
+                {
+                    // 鎯呭喌2: 鍒嗛厤鏁伴噺绛変簬搴撳瓨鏁伴噺锛屾暣鍖呭嚭搴�
+                    stockDetail.StockQuantity = 0;
+                    stockDetail.OutboundQuantity = 0;
+                    await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
+
+                    lockInfo.PickedQty += actualQty;
+                    lockInfo.Status = (int)OutLockStockStatusEnum.鎷i�夊畬鎴�;
+                    await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
+                }
+                else
+                {
+                    // 鎯呭喌3: 鍒嗛厤鏁伴噺澶т簬搴撳瓨鏁伴噺锛屽簱瀛樻暣鍖呭嚭搴�
+                    // 鏁村寘鍑哄簱褰撳墠搴撳瓨
+                    decimal stockOutQty = stockQuantity;
+                    stockDetail.StockQuantity = 0;
+                    stockDetail.OutboundQuantity = 0;
+                    await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
+
+                    // 璁$畻鍓╀綑鍒嗛厤鏁伴噺
+                    decimal remainingAssignQty = actualQty - stockQuantity;
+
+                    // 鏇存柊閿佸畾淇℃伅锛堝彧瀹屾垚搴撳瓨閮ㄥ垎锛�
+                    lockInfo.PickedQty += stockOutQty;
+                    lockInfo.AssignQuantity = remainingAssignQty;
+
+                    await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
+
+                    var _relatedSplitRecords = await _splitPackageService.Db.Queryable<Dt_SplitPackageRecord>()
+        .Where(it => it.OriginalBarcode == barcode || it.NewBarcode == barcode)
+        .Where(it => !it.IsReverted)
+        .ToListAsync();
+
+                    foreach (var record in _relatedSplitRecords)
+                    {
+                        record.Status = (int)SplitPackageStatusEnum.宸叉嫞閫�;
+                        await _splitPackageService.Db.Updateable(record).ExecuteCommandAsync();
+                    }
+                }
+
+   
+
+                await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
+                    .SetColumns(it => it.PickedQty == it.PickedQty + actualQty)
+                    .Where(it => it.Id == lockInfo.OrderDetailId)
+                    .ExecuteCommandAsync();
+
+                await CheckAndUpdateOrderStatus(orderNo);
+
+                // 鏌ヨ浠诲姟琛� 
+                var task = _taskRepository.QueryData(x => x.OrderNo == orderNo && x.PalletCode == palletCode).FirstOrDefault();
+
+                // 璁板綍鎷i�夊巻鍙�
+                var pickingHistory = new Dt_PickingRecord
+                {
+                    FactoryArea = lockInfo.FactoryArea,
+                    TaskNo = task?.TaskNum ?? 0,
+                    LocationCode = task?.SourceAddress ?? "",
+                    StockId = stockDetail.Id,
+                    OrderNo = orderNo,
+                    OrderDetailId = lockInfo.OrderDetailId,
+                    PalletCode = palletCode,
+                    Barcode = barcode,
+                    MaterielCode = lockInfo.MaterielCode,
+                    PickQuantity = actualQty,
+                    PickTime = DateTime.Now,
+                    Operator = App.User.UserName,
+                    OutStockLockId = lockInfo.Id
+                };
+                await Db.Insertable(pickingHistory).ExecuteCommandAsync();
+
+                _unitOfWorkManage.CommitTran();
+
+                // 濡傛灉鏈夋媶鍖呯粨鏋滐紝杩斿洖鎷嗗寘淇℃伅
+                if (splitResults.Any())
+                {
+                    return WebResponseContent.Instance.OK("鎷i�夌‘璁ゆ垚鍔燂紝宸茶嚜鍔ㄦ媶鍖�", new { SplitResults = splitResults });
+                }
+
+                return WebResponseContent.Instance.OK("鎷i�夌‘璁ゆ垚鍔�");
+
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error($"鎷i�夌‘璁ゅけ璐ワ細{ex.Message}");
+            }
+        }
+        
         /// <summary>
         /// 鍥炲簱鎿嶄綔  
         /// </summary>
@@ -356,13 +467,14 @@
         {
             try
             {
-                //  鑾峰彇鎵�鏈夋湭鍒嗘嫞鐨勫嚭搴撻攣瀹氳褰曪紝鍖呮嫭鎷嗗寘浜х敓鐨勮褰�
+                _unitOfWorkManage.BeginTran();
+
+                // 鑾峰彇鎵�鏈夋湭鍒嗘嫞鐨勫嚭搴撻攣瀹氳褰曪紝鍖呮嫭鎷嗗寘浜х敓鐨勮褰�
                 var remainingLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
-                    .Where(it => it.OrderNo == orderNo && it.Status == 1)
+                    .Where(it => it.OrderNo == orderNo && it.Status == (int)OutLockStockStatusEnum.鍑哄簱涓�)
                     .ToListAsync();
 
                 var stockinfo = _stockInfoService.Db.Queryable<Dt_StockInfo>().First(x => x.PalletCode == palletCode);
-
 
                 var tasks = new List<Dt_Task>();
 
@@ -376,26 +488,68 @@
                     return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑浠诲姟淇℃伅");
                 }
 
-                //  妫�鏌ユ墭鐩樹笂鏄惁鏈夊叾浠栭潪鍑哄簱璐х墿锛堝簱瀛樿揣鐗╋級
+                // 妫�鏌ユ墭鐩樹笂鏄惁鏈夊叾浠栭潪鍑哄簱璐х墿锛堝簱瀛樿揣鐗╋級
                 var palletStockGoods = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
-                    .Where(it => it.StockId == stockinfo.Id && (it.Status == StockStatusEmun.鍏ュ簱纭.ObjToInt() || it.Status == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt() || it.Status == StockStatusEmun.鍑哄簱閿佸畾.ObjToInt()))
+                    .Where(it => it.StockId == stockinfo.Id &&
+                                (it.Status == StockStatusEmun.鍏ュ簱纭.ObjToInt() ||
+                                 it.Status == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt() ||
+                                 it.Status == StockStatusEmun.鍑哄簱閿佸畾.ObjToInt()))
                     .Where(it => it.OutboundQuantity == 0 || it.OutboundQuantity < it.StockQuantity) // 鏈畬鍏ㄥ嚭搴撶殑
                     .ToListAsync();
 
-                //  濡傛灉娌℃湁闇�瑕佸洖搴撶殑璐х墿锛堟棦鏃犳湭鍒嗘嫞鍑哄簱璐х墿锛屼篃鏃犲叾浠栧簱瀛樿揣鐗╋級
-                if (!remainingLocks.Any() && !palletStockGoods.Any())
+                // 妫�鏌ユ媶鍖呰褰曪紝鎵惧嚭闇�瑕佸洖搴撶殑鏉$爜
+                var splitRecords = await _splitPackageService.Db.Queryable<Dt_SplitPackageRecord>()
+                    .Where(it => it.OrderNo == orderNo && it.PalletCode == palletCode && !it.IsReverted)
+                    .ToListAsync();
+
+                // 璁$畻闇�瑕佸洖搴撶殑鎷嗗寘鏉$爜
+                var splitBarcodesToReturn = new List<string>();
+                foreach (var splitRecord in splitRecords)
                 {
-                    //鏄惁鑷姩鍥炲簱锛屾妸涔嬪墠鍑哄簱鐨勪换鍔″垹闄わ紝鐒跺悗缁勪釜绌虹洏鍏ュ簱銆�
-                    return WebResponseContent.Instance.Error("娌℃湁闇�瑕佸洖搴撶殑鍓╀綑璐х墿");
+                    // 妫�鏌ュ師鏉$爜鏄惁杩樻湁搴撳瓨闇�瑕佸洖搴�
+                    var originalStock = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+                        .Where(it => it.Barcode == splitRecord.OriginalBarcode && it.StockId == stockinfo.Id)
+                        .FirstAsync();
+
+                    if (originalStock != null && originalStock.StockQuantity > 0)
+                    {
+                        splitBarcodesToReturn.Add(splitRecord.OriginalBarcode);
+                    }
+
+                    // 妫�鏌ユ柊鏉$爜鏄惁杩樻湁搴撳瓨闇�瑕佸洖搴�
+                    var newStock = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+                        .Where(it => it.Barcode == splitRecord.NewBarcode && it.StockId == stockinfo.Id)
+                        .FirstAsync();
+
+                    if (newStock != null && newStock.StockQuantity > 0)
+                    {
+                        splitBarcodesToReturn.Add(splitRecord.NewBarcode);
+                    }
                 }
 
+                // 濡傛灉娌℃湁闇�瑕佸洖搴撶殑璐х墿锛堟棦鏃犳湭鍒嗘嫞鍑哄簱璐х墿锛屼篃鏃犲叾浠栧簱瀛樿揣鐗╋紝涔熸棤鎷嗗寘鍓╀綑璐х墿锛�
+                if (!remainingLocks.Any() && !palletStockGoods.Any() && !splitBarcodesToReturn.Any())
+                {
+                    // 妫�鏌ユ槸鍚︽墍鏈夎揣鐗╅兘宸叉嫞閫夊畬鎴�
+                    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)
+                    {
+                        return WebResponseContent.Instance.OK("鎵�鏈夎揣鐗╁凡鎷i�夊畬鎴愶紝鎵樼洏涓虹┖");
+                    }
+                    else
+                    {
+                        return WebResponseContent.Instance.Error("娌℃湁闇�瑕佸洖搴撶殑鍓╀綑璐х墿");
+                    }
+                }
 
                 var firstlocation = _locationInfoService.Db.Queryable<Dt_LocationInfo>().First(x => x.LocationCode == task.SourceAddress);
                 decimal totalReturnQty = 0;
-                var hasRemainingLocks = remainingLocks.Any(x => x.PalletCode == palletCode);
 
                 // 鎯呭喌1锛氬鐞嗘湭鍒嗘嫞鐨勫嚭搴撻攣瀹氳褰�
-                if (hasRemainingLocks)
+                if (remainingLocks.Any(x => x.PalletCode == palletCode))
                 {
                     var palletLocks = remainingLocks.Where(x => x.PalletCode == palletCode).ToList();
                     totalReturnQty = palletLocks.Sum(x => x.AssignQuantity - x.PickedQty);
@@ -408,20 +562,11 @@
                         // 鏇存柊鍑哄簱閿佸畾璁板綍鐘舵��
                         var lockIds = palletLocks.Select(x => x.Id).ToList();
                         await _outStockLockInfoService.Db.Updateable<Dt_OutStockLockInfo>()
-                            .SetColumns(it => new Dt_OutStockLockInfo { Status = OutLockStockStatusEnum.鍥炲簱涓�.ObjToInt() })
+                            .SetColumns(it => new Dt_OutStockLockInfo { Status = (int)OutLockStockStatusEnum.鍥炲簱涓� })
                             .Where(it => lockIds.Contains(it.Id))
                             .ExecuteCommandAsync();
 
-                        // 鏇存柊鎷嗗寘鏉$爜璁板綍鐘舵��
-                        var splitBarcodes = await _splitPackageService.Db.Queryable<Dt_SplitPackageRecord>()
-                            .Where(it => lockIds.Contains(it.OutStockLockInfoId))
-                            .ToListAsync();
-
-                        foreach (var splitBarcode in splitBarcodes)
-                        {
-                            splitBarcode.Status = 3;
-                            await _splitPackageService.Db.Updateable(splitBarcode).ExecuteCommandAsync();
-                        }
+           
 
                         // 澶勭悊搴撳瓨璁板綍
                         foreach (var lockInfo in palletLocks)
@@ -436,13 +581,9 @@
                             if (existingStock != null)
                             {
                                 // 搴撳瓨璁板綍瀛樺湪锛屾仮澶嶉攣瀹氭暟閲�
-                                await _stockInfoDetailService.Db.Updateable<Dt_StockInfoDetail>()
-                                    .SetColumns(it => new Dt_StockInfoDetail
-                                    {
-                                        OutboundQuantity = it.OutboundQuantity - returnQty
-                                    })
-                                    .Where(it => it.Barcode == lockInfo.CurrentBarcode && it.StockId == lockInfo.StockId)
-                                    .ExecuteCommandAsync();
+                                existingStock.OutboundQuantity = 0;
+
+                                await _stockInfoDetailService.Db.Updateable(existingStock).ExecuteCommandAsync();
                             }
                             else
                             {
@@ -451,14 +592,17 @@
                                 {
                                     StockId = lockInfo.StockId,
                                     MaterielCode = lockInfo.MaterielCode,
+                                    MaterielName = lockInfo.MaterielName,
                                     OrderNo = lockInfo.OrderNo,
                                     BatchNo = lockInfo.BatchNo,
                                     StockQuantity = returnQty,
                                     OutboundQuantity = 0,
                                     Barcode = lockInfo.CurrentBarcode,
-                                    InboundOrderRowNo = "0",
-                                    Status = StockStatusEmun.鍏ュ簱纭.ObjToInt(),
-
+                                    InboundOrderRowNo = "",
+                                    Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(),
+                                    SupplyCode = lockInfo.SupplyCode,
+                                    WarehouseCode = lockInfo.WarehouseCode,
+                                    Unit = lockInfo.Unit
                                 };
                                 await _stockInfoDetailService.Db.Insertable(newStockDetail).ExecuteCommandAsync();
                             }
@@ -469,18 +613,69 @@
                     }
                 }
 
-                // 鎯呭喌2锛氬嚭搴撹揣鐗╁凡鍒嗘嫞瀹岋紝浣嗘墭鐩樹笂杩樻湁鍏朵粬搴撳瓨璐х墿闇�瑕佸洖搴�
-                if (!hasRemainingLocks && palletStockGoods.Any())
+                // 鎯呭喌2锛氬鐞嗘媶鍖呭墿浣欑殑搴撳瓨璐х墿
+                if (splitBarcodesToReturn.Any())
                 {
-                    // 鍒嗛厤鏂拌揣浣�
-                    var newLocation = _locationInfoService.AssignLocation(firstlocation.LocationType);
+                    decimal splitReturnQty = 0;
 
-                    // 鍒涘缓鍥炲簱浠诲姟
-                    CreateReturnTask(tasks, task, palletCode, newLocation);
+                    foreach (var barcode in splitBarcodesToReturn)
+                    {
+                        var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+                            .Where(it => it.Barcode == barcode && it.StockId == stockinfo.Id)
+                            .FirstAsync();
 
-                    totalReturnQty = palletStockGoods.Sum(x => x.StockQuantity - x.OutboundQuantity);
+                        if (stockDetail != null && stockDetail.StockQuantity > 0)
+                        {
+                            splitReturnQty += stockDetail.StockQuantity;
+
+                            // 鎭㈠搴撳瓨鐘舵�佷负鍏ュ簱瀹屾垚
+                            stockDetail.OutboundQuantity = 0;
+
+                            await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
+                        }
+                    }
+
+                    totalReturnQty += splitReturnQty;
+
+                    // 濡傛灉娌℃湁鍒涘缓浠诲姟锛屽垱寤哄洖搴撲换鍔�
+                    if (!tasks.Any())
+                    {
+                        var newLocation = _locationInfoService.AssignLocation(firstlocation.LocationType);
+                        CreateReturnTask(tasks, task, palletCode, newLocation);
+                    }
                 }
 
+                // 鎯呭喌3锛氬嚭搴撹揣鐗╁凡鍒嗘嫞瀹岋紝浣嗘墭鐩樹笂杩樻湁鍏朵粬搴撳瓨璐х墿闇�瑕佸洖搴�
+                if (palletStockGoods.Any() && !remainingLocks.Any(x => x.PalletCode == palletCode))
+                {
+                    decimal otherReturnQty = palletStockGoods.Sum(x => x.StockQuantity - x.OutboundQuantity);
+                    totalReturnQty += otherReturnQty;
+                    // 鏇存柊杩欎簺搴撳瓨璐х墿鐨勭姸鎬�
+                    foreach (var stockGood in palletStockGoods)
+                    {
+                        stockGood.OutboundQuantity = 0;
+
+                        await _stockInfoDetailService.Db.Updateable(stockGood).ExecuteCommandAsync();
+                    }
+                    // 濡傛灉娌℃湁鍒涘缓浠诲姟锛屽垱寤哄洖搴撲换鍔�
+                    if (!tasks.Any())
+                    {
+                        var newLocation = _locationInfoService.AssignLocation(firstlocation.LocationType);
+                        CreateReturnTask(tasks, task, palletCode, newLocation);
+                    }
+
+                 
+                }
+            
+                var allSplitRecords = await _splitPackageService.Db.Queryable<Dt_SplitPackageRecord>()
+                    .Where(it => it.OrderNo == orderNo && it.PalletCode == palletCode && !it.IsReverted)
+                    .ToListAsync();
+
+                foreach (var record in allSplitRecords)
+                {
+                    record.Status = (int)SplitPackageStatusEnum.宸插洖搴�;
+                    await _splitPackageService.Db.Updateable(record).ExecuteCommandAsync();
+                }
                 // 淇濆瓨浠诲姟 缁橢SS涓嬪彂浠诲姟
                 if (tasks.Any())
                 {
@@ -489,6 +684,7 @@
                         await _taskRepository.Db.Insertable(tasks).ExecuteCommandAsync();
                         var targetAddress = task.TargetAddress;
                         _taskRepository.DeleteData(task);
+
                         // 缁� ESS 娴佸姩淇″彿鍜屽垱寤轰换鍔�
                         try
                         {
@@ -497,6 +693,7 @@
                                 slotCode = movestations[targetAddress],
                                 containerCode = palletCode
                             });
+
                             if (result)
                             {
                                 TaskModel esstask = new TaskModel()
@@ -505,51 +702,52 @@
                                     taskGroupCode = "",
                                     groupPriority = 0,
                                     tasks = new List<TasksType>
-                                    {
-                                        new()
-                                        {
-                                            taskCode = tasks.First().TaskNum.ToString(),
-                                            taskPriority = 0,
-                                            taskDescribe = new TaskDescribeType {
-                                                containerCode = palletCode,
-                                                containerType = "CT_KUBOT_STANDARD",
-                                                fromLocationCode = stations.GetValueOrDefault(targetAddress) ?? "",
-                                                toStationCode = "",
-                                                toLocationCode = tasks.First().TargetAddress,
-                                                deadline = 0, storageTag = ""
-                                            }
-                                        }
+                            {
+                                new()
+                                {
+                                    taskCode = tasks.First().TaskNum.ToString(),
+                                    taskPriority = 0,
+                                    taskDescribe = new TaskDescribeType {
+                                        containerCode = palletCode,
+                                        containerType = "CT_KUBOT_STANDARD",
+                                        fromLocationCode = stations.GetValueOrDefault(targetAddress) ?? "",
+                                        toStationCode = "",
+                                        toLocationCode = tasks.First().TargetAddress,
+                                        deadline = 0, storageTag = ""
                                     }
+                                }
+                            }
                                 };
 
-
                                 var resulttask = await _eSSApiService.CreateTaskAsync(esstask);
-
                                 _logger.LogInformation("ReturnRemaining 鍒涘缓浠诲姟杩斿洖:  " + resulttask);
                             }
                         }
                         catch (Exception ex)
                         {
                             _logger.LogInformation("ReturnRemaining 鍒涘缓浠诲姟杩斿洖 catch err:  " + ex.Message);
-
                         }
 
-
+                        _unitOfWorkManage.CommitTran();
                         return WebResponseContent.Instance.OK($"鍥炲簱鎿嶄綔鎴愬姛锛屽叡鍥炲簱鏁伴噺锛歿totalReturnQty}");
                     }
                     catch (Exception ex)
                     {
+                        _unitOfWorkManage.RollbackTran();
                         return WebResponseContent.Instance.Error($"鍒涘缓鍥炲簱浠诲姟澶辫触: {ex.Message}");
                     }
                 }
 
+                _unitOfWorkManage.RollbackTran();
                 return WebResponseContent.Instance.Error("鏈垱寤轰换浣曞洖搴撲换鍔�");
             }
             catch (Exception ex)
             {
+                _unitOfWorkManage.RollbackTran();
                 return WebResponseContent.Instance.Error($"鍥炲簱鎿嶄綔澶辫触: {ex.Message}");
             }
         }
+
 
         /// <summary>
         /// 鍒涘缓鍥炲簱浠诲姟
@@ -610,56 +808,306 @@
             try
             {
                 _unitOfWorkManage.BeginTran();
-                // 鏌ユ壘鎷i�夎褰�
-                var outStockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
-                        .Where(x => x.OrderNo == orderNo &&
-                                   x.PalletCode == palletCode &&
-                                   x.CurrentBarcode == barcode &&
-                                   x.Status == 6)
-                        .FirstAsync();
 
-                if (outStockInfo == null)
-                    return WebResponseContent.Instance.Error("鏈壘鍒板凡鎷i�夎褰�");
-
-                // 杩樺師鍑哄簱璇︽儏鐘舵��
-                outStockInfo.PickedQty = 0;
-                outStockInfo.Status = 1;
-                await _outStockLockInfoService.Db.Updateable(outStockInfo).ExecuteCommandAsync();
-
-
-                var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
-                       .Where(x => x.Barcode == barcode && x.StockId == outStockInfo.StockId)
-                       .FirstAsync();
-
-                stockDetail.StockQuantity += outStockInfo.AssignQuantity;
-                stockDetail.OutboundQuantity += outStockInfo.AssignQuantity;
-                await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
-
-
-                // 杩樺師鍑哄簱鍗曟槑缁�
-                var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
-                    .Where(x => x.Id == outStockInfo.OrderDetailId)
+                //鏌ユ壘鎷i�夎褰�
+                var pickingRecord = await Db.Queryable<Dt_PickingRecord>()
+                    .Where(it => it.OrderNo == orderNo &&
+                               it.PalletCode == palletCode &&
+                               it.Barcode == barcode)
+                    .OrderByDescending(it => it.PickTime)
                     .FirstAsync();
 
-                orderDetail.OverOutQuantity -= outStockInfo.AssignQuantity;
-                orderDetail.PickedQty = 0;
-                await _outboundOrderDetailService.Db.Updateable(orderDetail).ExecuteCommandAsync();
+                if (pickingRecord == null)
+                    return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑鎷i�夎褰�");
 
-                // 鍒犻櫎鎷i�夊巻鍙�
-                await Db.Deleteable<Dt_PickingRecord>()
-                    .Where(x => x.OutStockLockId == outStockInfo.Id)
-                    .ExecuteCommandAsync();
+                // 鏌ユ壘鍑哄簱閿佸畾淇℃伅
+                var lockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+                    .Where(it => it.Id == pickingRecord.OutStockLockId)
+                    .FirstAsync();
+
+                if (lockInfo == null)
+                    return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑鍑哄簱閿佸畾淇℃伅");
+
+                //妫�鏌ユ槸鍚﹀彲浠ュ彇娑堬紙鐘舵�佸繀椤绘槸鎷i�夊畬鎴愶級
+                if (lockInfo.Status != (int)OutLockStockStatusEnum.鎷i�夊畬鎴�)
+                    return WebResponseContent.Instance.Error("褰撳墠鐘舵�佷笉鍏佽鍙栨秷鍒嗘嫞");
+
+                decimal cancelQty = pickingRecord.PickQuantity;
+
+                // 妫�鏌ユ媶鍖呴摼鍏崇郴
+                var splitChain = await GetSplitChain(barcode);
+
+                if (splitChain.Any())
+                {
+                    // 鎯呭喌A锛氬鐞嗘媶鍖呴摼鐨勫彇娑堬紙澶氭鎵嬪姩鎷嗗寘锛�
+                    await HandleSplitChainCancel(orderNo, palletCode, barcode, cancelQty, lockInfo, pickingRecord, splitChain);
+                }
+                else
+                {
+                    // 鎯呭喌B锛氬鐞嗘櫘閫氭潯鐮佺殑鍙栨秷
+                    await HandleNormalBarcodeCancel(orderNo, palletCode, barcode, cancelQty, lockInfo, pickingRecord);
+                }
 
                 _unitOfWorkManage.CommitTran();
-                return WebResponseContent.Instance.OK("鍙栨秷鎷i�夋垚鍔�");
-
+                return WebResponseContent.Instance.OK($"鍙栨秷鍒嗘嫞鎴愬姛锛屾仮澶嶆暟閲忥細{cancelQty}");
             }
             catch (Exception ex)
             {
-                return WebResponseContent.Instance.Error($"鍙栨秷鎷i�夊け璐ワ細{ex.Message}");
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error($"鍙栨秷鍒嗘嫞澶辫触锛歿ex.Message}");
             }
         }
 
+        /// <summary>
+        /// 鑾峰彇鎷嗗寘閾撅紙浠庡綋鍓嶆潯鐮佽拷婧埌鍘熷鏉$爜锛�
+        /// </summary>
+        // 鍦� GetSplitChain 鏂规硶涓坊鍔犳洿涓ユ牸鐨勯獙璇�
+        private async Task<List<SplitChainItem>> GetSplitChain(string currentBarcode)
+        {
+            var chain = new List<SplitChainItem>();
+            var visited = new HashSet<string>();
+
+            string current = currentBarcode;
+            int maxDepth = 10; // 闃叉鏃犻檺寰幆
+
+            while (!string.IsNullOrEmpty(current) && maxDepth > 0)
+            {
+                maxDepth--;
+
+                if (visited.Contains(current))
+                {
+                    _logger.LogWarning($"妫�娴嬪埌寰幆寮曠敤鍦ㄦ媶鍖呴摼涓�: {current}");
+                    break;
+                }
+
+                visited.Add(current);
+
+                var splitRecord = await _splitPackageService.Db.Queryable<Dt_SplitPackageRecord>()
+                    .Where(it => it.NewBarcode == current && !it.IsReverted)
+                    .FirstAsync();
+
+                if (splitRecord == null)
+                    break;
+
+                // 楠岃瘉鎷嗗寘璁板綍鐨勫畬鏁存��
+                if (string.IsNullOrEmpty(splitRecord.OriginalBarcode))
+                {
+                    _logger.LogError($"鎷嗗寘璁板綍 {splitRecord.Id} 缂哄皯鍘熷鏉$爜");
+                    break;
+                }
+
+                var item = new SplitChainItem
+                {
+                    SplitRecord = splitRecord,
+                    OriginalBarcode = splitRecord.OriginalBarcode,
+                    NewBarcode = splitRecord.NewBarcode,
+                    SplitQuantity = splitRecord.SplitQty
+                };
+
+                chain.Add(item);
+
+                current = splitRecord.OriginalBarcode;
+            }
+
+            if (maxDepth <= 0)
+            {
+                _logger.LogWarning($"鎷嗗寘閾捐拷婧揪鍒版渶澶ф繁搴�: {currentBarcode}");
+            }
+
+            chain.Reverse();
+            return chain;
+        }
+        /// <summary>
+        /// 澶勭悊鎷嗗寘閾剧殑鍙栨秷鍒嗘嫞
+        /// </summary>
+        private async Task HandleSplitChainCancel(string orderNo, string palletCode, string barcode,
+            decimal cancelQty, Dt_OutStockLockInfo lockInfo, Dt_PickingRecord pickingRecord, List<SplitChainItem> splitChain)
+        {
+            if (!splitChain.Any())
+                return;
+
+            //  鎵惧埌鍘熷鏉$爜锛堥摼鐨勭涓�涓級
+            var originalSplitItem = splitChain.First();
+            var originalBarcode = originalSplitItem.OriginalBarcode;
+
+            // 鏌ユ壘鍘熷鏉$爜鐨勯攣瀹氫俊鎭拰搴撳瓨
+            var originalLockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+                .Where(it => it.CurrentBarcode == originalBarcode && it.Status == (int)OutLockStockStatusEnum.鍑哄簱涓�)
+                .FirstAsync();
+
+            var originalStockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+                .Where(it => it.Barcode == originalBarcode && it.StockId == originalLockInfo.StockId)
+                .FirstAsync();
+
+            if (originalLockInfo == null || originalStockDetail == null)
+                throw new Exception("鏈壘鍒板師濮嬫潯鐮佺殑閿佸畾淇℃伅鎴栧簱瀛樹俊鎭�");
+
+            // 鎭㈠鍘熷鏉$爜搴撳瓨锛堝皢鍙栨秷鐨勬暟閲忓姞鍥炲幓锛�
+            originalStockDetail.StockQuantity += cancelQty;
+            originalStockDetail.OutboundQuantity += cancelQty;
+            await _stockInfoDetailService.Db.Updateable(originalStockDetail).ExecuteCommandAsync();
+
+            // 鎭㈠鍘熷鏉$爜閿佸畾淇℃伅
+            originalLockInfo.AssignQuantity += cancelQty;
+            await _outStockLockInfoService.Db.Updateable(originalLockInfo).ExecuteCommandAsync();
+
+            //  鍒犻櫎鎷嗗寘閾句腑鎵�鏈夋柊鏉$爜鐨勯攣瀹氫俊鎭拰搴撳瓨璁板綍
+            var allNewBarcodes = splitChain.Select(x => x.NewBarcode).ToList();
+
+            // 鍒犻櫎閿佸畾淇℃伅
+            await _outStockLockInfoService.Db.Deleteable<Dt_OutStockLockInfo>()
+                .Where(it => allNewBarcodes.Contains(it.CurrentBarcode))
+                .ExecuteCommandAsync();
+
+            // 鍒犻櫎搴撳瓨璁板綍锛堝彧鍒犻櫎鎷嗗寘浜х敓鐨勬柊鏉$爜搴撳瓨锛屼繚鐣欏師濮嬫潯鐮侊級
+            await _stockInfoDetailService.Db.Deleteable<Dt_StockInfoDetail>()
+                .Where(it => allNewBarcodes.Contains(it.Barcode) && it.Barcode != originalBarcode)
+                .ExecuteCommandAsync();
+
+            // 鏇存柊鎷嗗寘閾句腑鎵�鏈夋媶鍖呰褰曠姸鎬佷负宸叉媶鍖�
+            foreach (var chainItem in splitChain)
+            {
+                chainItem.SplitRecord.Status = (int)SplitPackageStatusEnum.宸叉媶鍖�;
+                await _splitPackageService.Db.Updateable(chainItem.SplitRecord).ExecuteCommandAsync();
+            }
+
+            //  鎭㈠璁㈠崟鏄庣粏鎷i�夋暟閲忥紙浣跨敤鍘熷閿佸畾淇℃伅鐨勮鍗曟槑缁咺D锛�
+            await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
+                .SetColumns(it => it.PickedQty == it.PickedQty - cancelQty)
+                .Where(it => it.Id == originalLockInfo.OrderDetailId)
+                .ExecuteCommandAsync();
+
+            //   鎭㈠璁㈠崟鐘舵��
+            await CheckAndRevertOrderStatus(orderNo);
+
+            //  鍒犻櫎鎷i�夎褰�
+            await Db.Deleteable<Dt_PickingRecord>()
+                .Where(it => it.Id == pickingRecord.Id)
+                .ExecuteCommandAsync();
+
+            ////  璁板綍鍙栨秷鎿嶄綔鍘嗗彶
+            //await RecordCancelHistory(orderNo, palletCode, barcode, cancelQty, pickingRecord.Id,
+            //    lockInfo.MaterielCode, "鍙栨秷鎷嗗寘閾惧垎鎷�");
+        }
+
+        /// <summary>
+        /// 澶勭悊鏅�氭潯鐮佺殑鍙栨秷鍒嗘嫞
+        /// </summary>
+        private async Task HandleNormalBarcodeCancel(string orderNo, string palletCode, string barcode,
+            decimal cancelQty, Dt_OutStockLockInfo lockInfo, Dt_PickingRecord pickingRecord)
+        {
+            // 1. 鏌ユ壘搴撳瓨淇℃伅
+            var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+                .Where(it => it.Barcode == barcode && it.StockId == lockInfo.StockId)
+                .FirstAsync();
+
+            if (stockDetail == null)
+                throw new Exception("鏈壘鍒板搴旂殑搴撳瓨淇℃伅");
+
+            // 2. 鎭㈠搴撳瓨鏁伴噺
+            if (stockDetail.StockQuantity == 0)
+            {
+                // 鏁村寘鍑哄簱鐨勬儏鍐�
+                stockDetail.StockQuantity = cancelQty;
+                stockDetail.OutboundQuantity = cancelQty;
+            }
+            else
+            {
+                // 閮ㄥ垎鍑哄簱鐨勬儏鍐�
+                stockDetail.StockQuantity += cancelQty;
+                stockDetail.OutboundQuantity += cancelQty;
+            }
+            await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync();
+
+            // 3. 鎭㈠閿佸畾淇℃伅鐘舵��
+            lockInfo.AssignQuantity += cancelQty;
+            lockInfo.PickedQty -= cancelQty;
+
+            if (lockInfo.PickedQty == 0)
+            {
+                lockInfo.Status = (int)OutLockStockStatusEnum.鍑哄簱涓�;
+            }
+            await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
+
+            // 4. 澶勭悊鐩稿叧鐨勬媶鍖呰褰曠姸鎬佹仮澶�
+            var relatedSplitRecords = await _splitPackageService.Db.Queryable<Dt_SplitPackageRecord>()
+                .Where(it => it.OriginalBarcode == barcode &&
+                           it.Status == (int)SplitPackageStatusEnum.宸叉嫞閫�)
+                .ToListAsync();
+
+            foreach (var record in relatedSplitRecords)
+            {
+                record.Status = (int)SplitPackageStatusEnum.宸叉媶鍖�;
+                await _splitPackageService.Db.Updateable(record).ExecuteCommandAsync();
+            }
+
+            // 5. 鎭㈠璁㈠崟鏄庣粏鐨勬嫞閫夋暟閲�
+            await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>()
+                .SetColumns(it => it.PickedQty == it.PickedQty - cancelQty)
+                .Where(it => it.Id == lockInfo.OrderDetailId)
+                .ExecuteCommandAsync();
+
+            // 6. 鎭㈠璁㈠崟鐘舵��
+            await CheckAndRevertOrderStatus(orderNo);
+
+            // 7. 鍒犻櫎鎷i�夎褰�
+            await Db.Deleteable<Dt_PickingRecord>().Where(it => it.Id == pickingRecord.Id).ExecuteCommandAsync();
+
+            //// 8. 璁板綍鍙栨秷鎿嶄綔鍘嗗彶
+            //await RecordCancelHistory(orderNo, palletCode, barcode, cancelQty, pickingRecord.Id,
+            //    lockInfo.MaterielCode, "鍙栨秷鍒嗘嫞");
+        }
+
+        /// <summary>
+        /// 妫�鏌ュ苟鎭㈠璁㈠崟鐘舵��
+        /// </summary>
+        private async Task CheckAndRevertOrderStatus(string orderNo)
+        {
+            var order = await _outboundOrderService.Db.Queryable<Dt_OutboundOrder>()
+                .Where(x => x.OrderNo == orderNo)
+                .FirstAsync();
+
+            if (order != null && order.OrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+            {
+                await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>()
+                    .SetColumns(x => x.OrderStatus == OutOrderStatusEnum.鍑哄簱涓�.ObjToInt())
+                    .Where(x => x.OrderNo == orderNo)
+                    .ExecuteCommandAsync();
+            }
+        }
+
+        /// <summary>
+        /// 璁板綍鍙栨秷鎿嶄綔鍘嗗彶
+        /// </summary>
+        private async Task RecordCancelHistory(string orderNo, string palletCode, string barcode,
+            decimal cancelQty, int pickingRecordId, string materielCode, string reason)
+        {
+           
+            //var cancelHistory = new Dt_PickingCancelRecord
+            //{
+            //    OrderNo = orderNo,
+            //    PalletCode = palletCode,
+            //    Barcode = barcode,
+            //    CancelQuantity = cancelQty,
+            //    CancelTime = DateTime.Now,
+            //    Operator = App.User.UserName,
+            //    OriginalPickingRecordId = pickingRecordId,
+            //    MaterielCode = materielCode,
+            //    Reason = reason
+            //};
+            //await Db.Insertable(cancelHistory).ExecuteCommandAsync();
+        }
+
+        /// <summary>
+        /// 鎷嗗寘閾鹃」
+        /// </summary>
+        public class SplitChainItem
+        {
+            public Dt_SplitPackageRecord SplitRecord { get; set; }
+            public string OriginalBarcode { get; set; }
+            public string NewBarcode { get; set; }
+            public decimal SplitQuantity { get; set; }
+        }
         // 鑾峰彇鏈嫞閫夊垪琛�
         public async Task<List<Dt_OutStockLockInfo>> GetUnpickedList(string orderNo, string palletCode)
         {
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/SplitPackageService.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/SplitPackageService.cs"
index b0b9bab..34b8f2b 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/SplitPackageService.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/SplitPackageService.cs"
@@ -1,6 +1,7 @@
 锘縰sing Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
 using Org.BouncyCastle.Asn1.Ocsp;
+using SqlSugar.Extensions;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -45,6 +46,168 @@
         /// <summary>
         /// 鎷嗗寘鎷嗙鎿嶄綔
         /// </summary>
+        //public async Task<WebResponseContent> SplitPackage(SplitPackageDto request)
+        //{
+        //    try
+        //    {
+        //        _unitOfWorkManage.BeginTran();
+
+        //        // 1. 楠岃瘉鍑哄簱閿佸畾淇℃伅
+        //        var lockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+        //                  .Where(x => x.OrderNo == request.OrderNo &&
+        //                   x.PalletCode == request.PalletCode &&
+        //                   x.CurrentBarcode == request.OriginalBarcode &&
+        //                   x.Status == 1)
+        //            .FirstAsync();
+
+        //        if (lockInfo == null)
+        //            return WebResponseContent.Instance.Error("鏈壘鍒版湁鏁堢殑鍑哄簱閿佸畾淇℃伅");
+
+        //        // 2. 妫�鏌ュ墿浣欓攣瀹氭暟閲�
+        //        decimal remainingLockQuantity = lockInfo.OriginalQuantity - lockInfo.PickedQty;
+        //        if (request.SplitQuantity > remainingLockQuantity)
+        //            return WebResponseContent.Instance.Error($"鎷嗗寘鏁伴噺涓嶈兘澶т簬鍓╀綑閿佸畾鏁伴噺锛屽墿浣欙細{remainingLockQuantity}");
+
+        //        var baseStockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+        //       .Where(x => x.Barcode == request.OriginalBarcode && x.StockId == lockInfo.StockId)
+        //       .FirstAsync();
+        //        if (baseStockDetail == null)
+        //            throw new Exception($"鏈壘鍒版潯鐮亄request.OriginalBarcode}瀵瑰簲鐨勫簱瀛樿褰�");
+
+
+        //        // 4. 璁$畻鎷嗗垎鍚庣殑鏁伴噺
+        //        decimal remainingQty = baseStockDetail.StockQuantity - request.SplitQuantity;
+
+        //        // 鏇存柊鍩虹鏉$爜鐨勫簱瀛樻暟閲忎负鍓╀綑鏁伴噺
+        //        baseStockDetail.StockQuantity = remainingQty;
+        //        baseStockDetail.OutboundQuantity = remainingQty;
+        //        await _stockInfoDetailService.Db.Updateable(baseStockDetail).ExecuteCommandAsync();
+
+
+        //        var seq = await _dailySequenceService.GetNextSequenceAsync();
+        //        // 3. 鐢熸垚鏂版潯鐮�
+        //        string newBarcode = "WSLOT" + DateTime.Now.ToString("yyyyMMdd") + seq.ToString()?.PadLeft(5, '0');
+
+
+        //        // 涓烘媶鍖呬骇鐢熺殑鏂版潯鐮佸垱寤哄簱瀛樿褰�
+        //        var newStockDetail = new Dt_StockInfoDetail
+        //        {
+        //            SupplyCode = baseStockDetail.SupplyCode,
+        //            WarehouseCode = baseStockDetail.WarehouseCode,
+        //            BarcodeQty = baseStockDetail.BarcodeQty,
+        //            BarcodeUnit = baseStockDetail.BarcodeUnit,
+        //            BusinessType = baseStockDetail.BusinessType,
+        //            Unit = baseStockDetail.Unit,
+        //            StockId = lockInfo.StockId,
+        //            MaterielCode = baseStockDetail.MaterielCode,
+        //            OrderNo = baseStockDetail.OrderNo,
+        //            BatchNo = baseStockDetail.BatchNo,
+        //            StockQuantity = request.SplitQuantity, // 鏂版潯鐮佽幏寰楁媶鍒嗘暟閲�
+        //            OutboundQuantity = request.SplitQuantity,
+        //            Barcode = newBarcode,
+        //            InboundOrderRowNo = baseStockDetail.InboundOrderRowNo,
+
+        //        };
+        //        await _outStockLockInfoService.Db.Insertable(newStockDetail).ExecuteCommandAsync();
+
+        //        // 4. 鍒涘缓鏂扮殑鍑哄簱閿佸畾淇℃伅锛堟柊鏉$爜锛�
+        //        var newLockInfo = new Dt_OutStockLockInfo
+        //        {
+
+        //            OrderNo = lockInfo.OrderNo,
+        //            OrderDetailId = lockInfo.OrderDetailId,
+        //            BatchNo = lockInfo.BatchNo,
+        //            MaterielCode = lockInfo.MaterielCode,
+        //            MaterielName = lockInfo.MaterielName,
+        //            StockId = lockInfo.StockId,
+        //            OrderQuantity = request.SplitQuantity,
+        //            OriginalQuantity = request.SplitQuantity,
+        //            AssignQuantity = request.SplitQuantity, // 鏂版潯鐮佸垎閰嶆暟閲�
+        //            PickedQty = 0, // 鏂版潯鐮佹湭鎷i��
+        //            LocationCode = lockInfo.LocationCode,
+        //            PalletCode = lockInfo.PalletCode,
+        //            TaskNum = lockInfo.TaskNum,
+        //            Status = (int)OutLockStockStatusEnum.鍑哄簱涓�,
+        //            Unit = lockInfo.Unit,
+        //            SupplyCode = lockInfo.SupplyCode,
+        //            OrderType = lockInfo.OrderType,
+        //            CurrentBarcode = newBarcode, // 鏂版潯鐮�
+        //            OriginalLockQuantity = request.SplitQuantity,
+        //            IsSplitted = 1,
+        //            ParentLockId = lockInfo.Id // 璁板綍鐖剁骇閿佸畾ID
+        //        };
+        //        await _outStockLockInfoService.Db.Insertable(newLockInfo).ExecuteCommandAsync();
+
+        //        lockInfo.AssignQuantity = remainingQty;
+        //        lockInfo.IsSplitted = 1; // 鏍囪涓哄凡鎷嗗寘
+        //        await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
+
+        //        var previousSplitRecord = await Db.Queryable<Dt_SplitPackageRecord>()
+        //      .Where(x => x.OriginalBarcode == request.OriginalBarcode && !x.IsReverted)
+        //      .OrderByDescending(x => x.SplitTime)
+        //      .FirstAsync();
+
+        //        // 6. 璁板綍鎷嗗寘鍘嗗彶锛堢敤浜庤拷韪級
+        //        var splitHistory = new Dt_SplitPackageRecord
+        //        {
+        //            FactoryArea = lockInfo.FactoryArea,
+        //            TaskNum = lockInfo.TaskNum,
+        //            OutStockLockInfoId = lockInfo.Id,
+        //            StockId = baseStockDetail.StockId,
+        //            Operator = App.User.UserName,
+        //            IsReverted = false,
+        //            OriginalBarcode = request.OriginalBarcode,
+        //            NewBarcode = newBarcode,
+        //            SplitQty = request.SplitQuantity,
+        //            RemainQuantity = remainingQty, // 璁板綍鎷嗗垎鍚庣殑鍓╀綑鏁伴噺
+        //            MaterielCode = lockInfo.MaterielCode,
+        //            SplitTime = DateTime.Now,
+        //            OrderNo = request.OrderNo,
+        //            PalletCode = request.PalletCode,
+        //            Status = (int)SplitPackageStatusEnum.宸叉媶鍖�,
+        //            PreviousSplitRecordId = previousSplitRecord?.Id??0 // 璁板綍鍓嶄竴娆℃媶鍖匢D锛屽缓绔嬫媶鍖呴摼
+        //        };
+        //        await Db.Insertable(splitHistory).ExecuteCommandAsync();
+
+        //        _unitOfWorkManage.CommitTran();
+
+        //        try
+        //        {
+        //            MaterielToMesDTO dto = new MaterielToMesDTO
+        //            {
+        //                batchNo = baseStockDetail.BatchNo,
+        //                factoryArea = baseStockDetail.FactoryArea,
+        //                materialCode = baseStockDetail.MaterielCode,
+        //                newmaterialCode = newBarcode,
+        //                oldmaterialCode = request.OriginalBarcode,
+        //                operationType = 1,
+        //                qty = remainingQty,
+        //                supplyCode = baseStockDetail.SupplyCode,
+        //                unit = baseStockDetail.BarcodeUnit,
+        //                warehouseCode = baseStockDetail.WarehouseCode,
+        //                reqCode = Guid.NewGuid().ToString(),
+        //                reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+        //            };
+        //            _invokeMESService.NewMaterielToMes(dto);
+        //        }
+        //        catch(Exception ex)
+        //        {
+        //            _logger.LogError("SplitPackage 鍥炰紶MES:  " + ex.Message);
+        //        }
+        //        return WebResponseContent.Instance.OK("鎷嗗寘鎴愬姛", new
+        //        {
+        //            NewBarcode = newBarcode,
+        //            NewLockInfoId = newLockInfo.Id
+        //        });
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        _unitOfWorkManage.RollbackTran();
+        //        return WebResponseContent.Instance.Error($"鎷嗗寘澶辫触: {ex.Message}");
+        //    }
+        //}
+        // 鑾峰彇鏉$爜鐨勬媶鍖呭巻鍙查摼
+
         public async Task<WebResponseContent> SplitPackage(SplitPackageDto request)
         {
             try
@@ -67,58 +230,63 @@
                 if (request.SplitQuantity > remainingLockQuantity)
                     return WebResponseContent.Instance.Error($"鎷嗗寘鏁伴噺涓嶈兘澶т簬鍓╀綑閿佸畾鏁伴噺锛屽墿浣欙細{remainingLockQuantity}");
 
-                var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
-               .Where(x => x.Barcode == request.OriginalBarcode && x.StockId == lockInfo.StockId)
-               .FirstAsync();
-                if (stockDetail == null)
+                // 3. 鏌ユ壘褰撳墠鏉$爜鐨勫簱瀛樹俊鎭�
+                var baseStockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+                    .Where(x => x.Barcode == request.OriginalBarcode && x.StockId == lockInfo.StockId)
+                    .FirstAsync();
+
+                if (baseStockDetail == null)
                     throw new Exception($"鏈壘鍒版潯鐮亄request.OriginalBarcode}瀵瑰簲鐨勫簱瀛樿褰�");
 
-                stockDetail.StockQuantity = request.SplitQuantity;
-                stockDetail.OutboundQuantity = request.SplitQuantity;
-                _stockInfoDetailService.Db.Updateable<Dt_StockInfoDetail>(stockDetail).ExecuteCommand();
+                // 4. 璁板綍鎷嗗寘鍓嶇殑搴撳瓨鏁伴噺鍜岄攣瀹氫俊鎭�
+                decimal stockBeforeSplit = baseStockDetail.StockQuantity;
+                decimal assignBeforeSplit = lockInfo.AssignQuantity;
 
+                // 5. 璁$畻鎷嗗垎鍚庣殑鍓╀綑鏁伴噺
+                decimal remainingQty = baseStockDetail.StockQuantity - request.SplitQuantity;
 
+                // 鏇存柊鍩虹鏉$爜鐨勫簱瀛樻暟閲忎负鍓╀綑鏁伴噺
+                baseStockDetail.StockQuantity = remainingQty;
+                baseStockDetail.OutboundQuantity = remainingQty;
+                await _stockInfoDetailService.Db.Updateable(baseStockDetail).ExecuteCommandAsync();
+
+                // 6. 鐢熸垚鏂版潯鐮�
                 var seq = await _dailySequenceService.GetNextSequenceAsync();
-                // 3. 鐢熸垚鏂版潯鐮�
                 string newBarcode = "WSLOT" + DateTime.Now.ToString("yyyyMMdd") + seq.ToString()?.PadLeft(5, '0');
 
-                decimal remainingQty = remainingLockQuantity - request.SplitQuantity;
-
-                // 涓烘媶鍖呬骇鐢熺殑鏂版潯鐮佸垱寤哄簱瀛樿褰�
+                // 7. 涓烘柊鏉$爜鍒涘缓搴撳瓨璁板綍锛堟媶鍒嗗嚭鐨勬暟閲忥級
                 var newStockDetail = new Dt_StockInfoDetail
                 {
-                    SupplyCode = stockDetail.SupplyCode,
-                    WarehouseCode = stockDetail.WarehouseCode,
-                    BarcodeQty = stockDetail.BarcodeQty,
-                    BarcodeUnit = stockDetail.BarcodeUnit,
-                    BusinessType = stockDetail.BusinessType,
-                    Unit = stockDetail.Unit,
+                    SupplyCode = baseStockDetail.SupplyCode,
+                    WarehouseCode = baseStockDetail.WarehouseCode,
+                    BarcodeQty = baseStockDetail.BarcodeQty,
+                    BarcodeUnit = baseStockDetail.BarcodeUnit,
+                    BusinessType = baseStockDetail.BusinessType,
+                    Unit = baseStockDetail.Unit,
                     StockId = lockInfo.StockId,
-                    MaterielCode = stockDetail.MaterielCode,
-                    OrderNo = stockDetail.OrderNo,
-                    BatchNo = stockDetail.BatchNo,
-                    StockQuantity = remainingQty,
-                    OutboundQuantity = remainingQty, // 閿佸畾鍏ㄩ儴鏁伴噺
+                    MaterielCode = baseStockDetail.MaterielCode,
+                    OrderNo = baseStockDetail.OrderNo,
+                    BatchNo = baseStockDetail.BatchNo,
+                    StockQuantity = request.SplitQuantity,
+                    OutboundQuantity = request.SplitQuantity,
                     Barcode = newBarcode,
-                    InboundOrderRowNo = stockDetail.InboundOrderRowNo,
-
+                    InboundOrderRowNo = baseStockDetail.InboundOrderRowNo,
                 };
-                await _outStockLockInfoService.Db.Insertable(newStockDetail).ExecuteCommandAsync();
+                await _stockInfoDetailService.Db.Insertable(newStockDetail).ExecuteCommandAsync();
 
-                // 4. 鍒涘缓鏂扮殑鍑哄簱閿佸畾淇℃伅锛堟柊鏉$爜锛�
+                // 8. 鍒涘缓鏂扮殑鍑哄簱閿佸畾淇℃伅锛堟柊鏉$爜锛�
                 var newLockInfo = new Dt_OutStockLockInfo
                 {
-
                     OrderNo = lockInfo.OrderNo,
                     OrderDetailId = lockInfo.OrderDetailId,
                     BatchNo = lockInfo.BatchNo,
                     MaterielCode = lockInfo.MaterielCode,
                     MaterielName = lockInfo.MaterielName,
                     StockId = lockInfo.StockId,
-                    OrderQuantity = remainingQty,
-                    OriginalQuantity = remainingQty,
-                    AssignQuantity = remainingQty, // 鏂版潯鐮佸垎閰嶆暟閲�
-                    PickedQty = 0, // 鏂版潯鐮佹湭鎷i��
+                    OrderQuantity = request.SplitQuantity,
+                    OriginalQuantity = request.SplitQuantity,
+                    AssignQuantity = request.SplitQuantity,
+                    PickedQty = 0,
                     LocationCode = lockInfo.LocationCode,
                     PalletCode = lockInfo.PalletCode,
                     TaskNum = lockInfo.TaskNum,
@@ -126,30 +294,33 @@
                     Unit = lockInfo.Unit,
                     SupplyCode = lockInfo.SupplyCode,
                     OrderType = lockInfo.OrderType,
-                    CurrentBarcode = newBarcode, // 鏂版潯鐮�
+                    CurrentBarcode = newBarcode,
                     OriginalLockQuantity = request.SplitQuantity,
                     IsSplitted = 1,
-                    ParentLockId = lockInfo.Id // 璁板綍鐖剁骇閿佸畾ID
+                    ParentLockId = lockInfo.Id
                 };
                 await _outStockLockInfoService.Db.Insertable(newLockInfo).ExecuteCommandAsync();
 
-                // 5. 鏇存柊鍘熼攣瀹氫俊鎭殑鍒嗛厤鏁伴噺锛堝噺灏戞媶鍖呮暟閲忥級
-                lockInfo.AssignQuantity = request.SplitQuantity;
+                // 9. 鏇存柊鍘熼攣瀹氫俊鎭殑鍒嗛厤鏁伴噺锛堝噺灏戞媶鍖呮暟閲忥級
+                lockInfo.AssignQuantity = remainingQty;
+                lockInfo.IsSplitted = 1;
                 await _outStockLockInfoService.Db.Updateable(lockInfo).ExecuteCommandAsync();
 
-                // 6. 璁板綍鎷嗗寘鍘嗗彶锛堢敤浜庤拷韪級
+                // 10. 璁板綍鎷嗗寘鍘嗗彶
                 var splitHistory = new Dt_SplitPackageRecord
                 {
                     FactoryArea = lockInfo.FactoryArea,
                     TaskNum = lockInfo.TaskNum,
                     OutStockLockInfoId = lockInfo.Id,
-                    StockId = stockDetail?.StockId ?? 0,
+                    StockId = baseStockDetail.StockId,
                     Operator = App.User.UserName,
                     IsReverted = false,
-                    OriginalBarcode = lockInfo.CurrentBarcode,
+                    OriginalBarcode = request.OriginalBarcode,
                     NewBarcode = newBarcode,
                     SplitQty = request.SplitQuantity,
-                    RemainQuantity = lockInfo.OriginalQuantity - request.SplitQuantity,
+                    RemainQuantity = remainingQty,
+                    StockBeforeSplit = stockBeforeSplit, // 璁板綍鎷嗗寘鍓嶇殑搴撳瓨鏁伴噺
+                    AssignBeforeSplit = assignBeforeSplit, // 璁板綍鎷嗗寘鍓嶇殑鍒嗛厤鏁伴噺
                     MaterielCode = lockInfo.MaterielCode,
                     SplitTime = DateTime.Now,
                     OrderNo = request.OrderNo,
@@ -159,34 +330,12 @@
                 await Db.Insertable(splitHistory).ExecuteCommandAsync();
 
                 _unitOfWorkManage.CommitTran();
-                              
-                try
-                {
-                    MaterielToMesDTO dto = new MaterielToMesDTO
-                    {
-                        batchNo = stockDetail.BatchNo,
-                        factoryArea = stockDetail.FactoryArea,
-                        materialCode = stockDetail.MaterielCode,
-                        newmaterialCode = newBarcode,
-                        oldmaterialCode = request.OriginalBarcode,
-                        operationType = 1,
-                        qty = remainingQty,
-                        supplyCode = stockDetail.SupplyCode,
-                        unit = stockDetail.BarcodeUnit,
-                        warehouseCode = stockDetail.WarehouseCode,
-                        reqCode = Guid.NewGuid().ToString(),
-                        reqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
-                    };
-                    _invokeMESService.NewMaterielToMes(dto);
-                }
-                catch(Exception ex)
-                {
-                    _logger.LogError("SplitPackage 鍥炰紶MES:  " + ex.Message);
-                }
-                return WebResponseContent.Instance.OK("鎷嗗寘鎴愬姛", new
+
+                return WebResponseContent.Instance.OK("鎷嗗寘鎴愬姛", new SplitPackageChainDto
                 {
                     NewBarcode = newBarcode,
-                    NewLockInfoId = newLockInfo.Id
+                    NewLockInfoId = newLockInfo.Id,
+                    RemainQuantity = remainingQty
                 });
             }
             catch (Exception ex)
@@ -196,7 +345,96 @@
             }
         }
 
- 
+        public async Task<WebResponseContent> RevertSplitPackage(string originalBarcode)
+        {
+            try
+            {
+                _unitOfWorkManage.BeginTran();
+
+                // 1. 鏌ユ壘璇ユ潯鐮佷綔涓哄師濮嬫潯鐮佺殑鎵�鏈夋湭鎾ら攢鎷嗗寘璁板綍锛屾寜鏃堕棿鍊掑簭
+                var splitRecords = await Db.Queryable<Dt_SplitPackageRecord>()
+                        .Where(x => x.OriginalBarcode == originalBarcode && !x.IsReverted)
+                        .OrderByDescending(x => x.SplitTime)
+                        .ToListAsync();
+
+                if (splitRecords == null || !splitRecords.Any())
+                    return WebResponseContent.Instance.Error("鏈壘鍒板彲鎾ら攢鐨勬媶鍖呰褰�");
+
+                // 2. 妫�鏌ユ墍鏈夋柊鏉$爜鏄惁宸叉嫞閫�
+                var newBarcodes = splitRecords.Select(x => x.NewBarcode).ToList();
+                var newLockInfos = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+                    .Where(x => newBarcodes.Contains(x.CurrentBarcode))
+                    .ToListAsync();
+
+                var pickedBarcodes = newLockInfos.Where(x => x.Status == 2).Select(x => x.CurrentBarcode).ToList();
+                if (pickedBarcodes.Any())
+                    return WebResponseContent.Instance.Error($"浠ヤ笅鏉$爜宸叉嫞閫夛紝鏃犳硶鎾ら攢鎷嗗寘锛歿string.Join(",", pickedBarcodes)}");
+
+                // 3. 鑾峰彇鍘熸潯鐮佺殑閿佸畾淇℃伅鍜屽簱瀛樹俊鎭�
+                var originalLockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+                    .Where(x => x.CurrentBarcode == originalBarcode)
+                    .FirstAsync();
+
+                if (originalLockInfo == null)
+                    return WebResponseContent.Instance.Error("鏈壘鍒板師鏉$爜閿佸畾淇℃伅");
+
+                var originalStockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+                    .Where(x => x.Barcode == originalBarcode && x.StockId == originalLockInfo.StockId)
+                    .FirstAsync();
+
+                if (originalStockDetail == null)
+                    return WebResponseContent.Instance.Error("鏈壘鍒板師鏉$爜搴撳瓨淇℃伅");
+
+                // 4. 鏌ユ壘绗竴娆℃媶鍖呰褰曪紝鑾峰彇鎷嗗寘鍓嶇殑鐘舵��
+                var firstSplitRecord = splitRecords.OrderBy(x => x.SplitTime).FirstOrDefault();
+                if (firstSplitRecord == null)
+                    return WebResponseContent.Instance.Error("鏈壘鍒版湁鏁堢殑鎷嗗寘璁板綍");
+
+                // 5. 鎭㈠鍘熸潯鐮佸埌鎷嗗寘鍓嶇殑鐘舵��
+                originalStockDetail.StockQuantity = firstSplitRecord.StockBeforeSplit;
+                originalStockDetail.OutboundQuantity = firstSplitRecord.StockBeforeSplit;
+                await _stockInfoDetailService.Db.Updateable(originalStockDetail).ExecuteCommandAsync();
+
+                // 6. 鎭㈠鍘熸潯鐮侀攣瀹氫俊鎭埌鎷嗗寘鍓嶇殑鐘舵��
+                originalLockInfo.AssignQuantity = firstSplitRecord.AssignBeforeSplit;
+                originalLockInfo.OriginalQuantity = firstSplitRecord.AssignBeforeSplit;
+                originalLockInfo.OrderQuantity = firstSplitRecord.AssignBeforeSplit;
+                originalLockInfo.Status = (int)OutLockStockStatusEnum.鍑哄簱涓�;
+                originalLockInfo.IsSplitted = 0; // 鎭㈠涓烘湭鎷嗗寘鐘舵��
+                await _outStockLockInfoService.Db.Updateable(originalLockInfo).ExecuteCommandAsync();
+
+                // 7. 鍒犻櫎鎵�鏈夋柊鏉$爜鐨勯攣瀹氫俊鎭�
+                await _outStockLockInfoService.Db.Deleteable<Dt_OutStockLockInfo>()
+                    .Where(x => newBarcodes.Contains(x.CurrentBarcode))
+                    .ExecuteCommandAsync();
+
+                // 8. 鍒犻櫎鎵�鏈夋柊鏉$爜鐨勫簱瀛樿褰�
+                await _stockInfoDetailService.Db.Deleteable<Dt_StockInfoDetail>()
+                    .Where(x => newBarcodes.Contains(x.Barcode))
+                    .ExecuteCommandAsync();
+
+                // 9. 鏍囪鎵�鏈夋媶鍖呰褰曚负宸叉挙閿�
+                foreach (var record in splitRecords)
+                {
+                    record.IsReverted = true;
+                    record.RevertTime = DateTime.Now;
+         
+                    record.Status = (int)SplitPackageStatusEnum.宸叉挙閿�;
+                }
+                await Db.Updateable(splitRecords).ExecuteCommandAsync();
+
+                _unitOfWorkManage.CommitTran();
+
+                return WebResponseContent.Instance.OK($"鎾ら攢鎷嗗寘鎴愬姛锛屽叡鎾ら攢{splitRecords.Count}娆℃媶鍖咃紝{originalBarcode}鎭㈠涓烘媶鍖呭墠鏁伴噺锛歿firstSplitRecord.StockBeforeSplit}");
+
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error($"鎾ら攢鎷嗗寘澶辫触锛歿ex.Message}");
+            }
+        }
+
         //public async Task<WebResponseContent> RevertSplitPackage(string originalBarcode)
         //{
         //    try
@@ -228,7 +466,7 @@
         //        if (originalLockInfo == null)
         //            return WebResponseContent.Instance.Error("鏈壘鍒板師鏉$爜閿佸畾淇℃伅");
 
-          
+
         //        originalLockInfo.AssignQuantity  += splitRecord.RemainQuantity;  
         //       // originalLockInfo.Status = (int)OutLockStockStatusEnum.鍑哄簱涓�;
         //        originalLockInfo.IsSplitted = 0; // 鏍囪涓烘湭鎷嗗寘
@@ -269,7 +507,7 @@
 
         //        // 8. 鏇存柊鎷嗗寘璁板綍涓哄凡鎾ら攢
         //        splitRecord.IsReverted = true;              
-        
+
         //        await Db.Updateable(splitRecord).ExecuteCommandAsync();
 
         //        _unitOfWorkManage.CommitTran();
@@ -283,101 +521,19 @@
         //        return WebResponseContent.Instance.Error($"鎾ら攢鎷嗗寘澶辫触锛歿ex.Message}");
         //    }
         //}
- 
-        public async Task<WebResponseContent> RevertSplitPackage(string originalBarcode)
+
+
+        // 鑾峰彇鍙挙閿�鐨勬媶鍖呰褰曞垪琛�
+        public Dt_SplitPackageRecord GetRevertableSplitRecords(string originalBarcode)
         {
-            try
-            {
-                _unitOfWorkManage.BeginTran();
+            var revertableRecords =   Db.Queryable<Dt_SplitPackageRecord>()
+                    .Where(x => x.OriginalBarcode == originalBarcode && !x.IsReverted)
+                    .OrderBy(x => x.SplitTime)
+                   .First();
 
-                // 1. 鏌ユ壘鎵�鏈夋湭鎾ら攢鐨勬媶鍖呰褰�
-                var splitRecords = await Db.Queryable<Dt_SplitPackageRecord>()
-                        .Where(x => x.OriginalBarcode == originalBarcode && !x.IsReverted)
-                        .OrderBy(x => x.SplitTime) // 鎸夋椂闂存搴忥紝浠庢渶鏃╁紑濮嬫挙閿�
-                        .ToListAsync();
-
-                if (splitRecords == null || !splitRecords.Any())
-                    return WebResponseContent.Instance.Error("鏈壘鍒板彲鎾ら攢鐨勬媶鍖呰褰�");
-
-                // 2. 妫�鏌ユ墍鏈夋柊鏉$爜鏄惁宸叉嫞閫�
-                var newBarcodes = splitRecords.Select(x => x.NewBarcode).ToList();
-                var newLockInfos = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
-                    .Where(x => newBarcodes.Contains(x.CurrentBarcode))
-                    .ToListAsync();
-
-                var pickedBarcodes = newLockInfos.Where(x => x.Status == 2).Select(x => x.CurrentBarcode).ToList();
-                if (pickedBarcodes.Any())
-                    return WebResponseContent.Instance.Error($"浠ヤ笅鏉$爜宸叉嫞閫夛紝鏃犳硶鎾ら攢锛歿string.Join(",", pickedBarcodes)}");
-
-                // 3. 鑾峰彇鍘熸潯鐮佷俊鎭�
-                var originalLockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
-                    .Where(x => x.CurrentBarcode == originalBarcode)
-                    .FirstAsync();
-
-                if (originalLockInfo == null)
-                    return WebResponseContent.Instance.Error("鏈壘鍒板師鏉$爜閿佸畾淇℃伅");
-
-                var originalStockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
-                    .Where(x => x.Barcode == originalBarcode && x.StockId == originalLockInfo.StockId)
-                    .FirstAsync();
-
-                // 4. 鑾峰彇鎵�鏈夋柊鏉$爜鐨勫簱瀛樿褰�
-                var newStockDetails = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
-                    .Where(x => newBarcodes.Contains(x.Barcode))
-                    .ToListAsync();
-
-                // 5. 璁$畻鎬昏繕鍘熸暟閲�
-                decimal totalRevertQty = newStockDetails.Sum(x => x.StockQuantity);
-
-                // 6. 杩樺師鍘熸潯鐮佸簱瀛樿褰�
-                if (originalStockDetail != null)
-                {
-                    // 鍘熸潯鐮佸綋鍓嶆暟閲忓姞涓婃墍鏈夋柊鏉$爜鐨勬暟閲�
-                    originalStockDetail.StockQuantity += totalRevertQty;
-                    originalStockDetail.OutboundQuantity += totalRevertQty;
-                    await _stockInfoDetailService.Db.Updateable(originalStockDetail).ExecuteCommandAsync();
-                }
-
-                // 7. 杩樺師鍘熸潯鐮侀攣瀹氫俊鎭�
-                decimal totalAssignQty = newLockInfos.Sum(x => x.AssignQuantity);
-                originalLockInfo.AssignQuantity += totalAssignQty;
-                if (originalLockInfo.OrderQuantity < originalLockInfo.AssignQuantity)
-                {
-                    originalLockInfo.AssignQuantity=originalLockInfo.OrderQuantity;
-                }
-                originalLockInfo.Status = (int)OutLockStockStatusEnum.鍑哄簱涓�;
-                originalLockInfo.IsSplitted = 0;
-                await _outStockLockInfoService.Db.Updateable(originalLockInfo).ExecuteCommandAsync();
-
-                // 8. 鍒犻櫎鎵�鏈夋柊鏉$爜鐨勯攣瀹氫俊鎭�
-                await _outStockLockInfoService.Db.Deleteable<Dt_OutStockLockInfo>()
-                    .Where(x => newBarcodes.Contains(x.CurrentBarcode))
-                    .ExecuteCommandAsync();
-
-                // 9. 鍒犻櫎鎵�鏈夋柊鏉$爜鐨勫簱瀛樿褰�
-                await _stockInfoDetailService.Db.Deleteable<Dt_StockInfoDetail>()
-                    .Where(x => newBarcodes.Contains(x.Barcode))
-                    .ExecuteCommandAsync();
-
-                // 10. 鏍囪鎵�鏈夋媶鍖呰褰曚负宸叉挙閿�
-                foreach (var record in splitRecords)
-                {
-                    record.IsReverted = true;
-              
-                }
-                await Db.Updateable(splitRecords).ExecuteCommandAsync();
-
-                _unitOfWorkManage.CommitTran();
-
-                return WebResponseContent.Instance.OK($"鎾ら攢鎷嗗寘鎴愬姛锛屽叡杩樺師{splitRecords.Count}娆℃媶鍖咃紝鎬绘暟閲忥細{totalRevertQty}");
-
-            }
-            catch (Exception ex)
-            {
-                _unitOfWorkManage.RollbackTran();
-                return WebResponseContent.Instance.Error($"鎾ら攢鎷嗗寘澶辫触锛歿ex.Message}");
-            }
+            return   revertableRecords ;
         }
+ 
         // 鑾峰彇鎷嗗寘淇℃伅
         public async Task<WebResponseContent> GetSplitPackageInfo(string orderNo, string palletCode, string barcode)
         {
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_StockService/StockInfoService.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_StockService/StockInfoService.cs"
index d392eb2..f5ce2dd 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_StockService/StockInfoService.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_StockService/StockInfoService.cs"
@@ -100,7 +100,7 @@
                 .SelectMany(x => x.Details)
                 .Where(x => x.MaterielCode == materielCode &&
                            x.StockQuantity > x.OutboundQuantity) // 鏈夊彲鐢ㄥ簱瀛�
-                .OrderBy(x => x.ProductionDate) // 鎸夌敓浜ф棩鏈熸帓搴忥紝鍏堣繘鍏堝嚭
+                .OrderBy(x => x.CreateDate) // 鎸夋棩鏈熸帓搴忥紝鍏堣繘鍏堝嚭
                 .ThenBy(x => x.StockId)         // 鐩稿悓鐢熶骇鏃ユ湡鎸夊簱瀛業D鎺掑簭
                 .ToList();
 
@@ -179,7 +179,7 @@
                 query = query.Where(x => x.BatchNo == batchNo);
             }
 
-            return await query.OrderBy(x => x.ProductionDate).ToListAsync();
+            return await query.OrderBy(x => x.CreateDate).ToListAsync();
         }
         public List<Dt_StockInfo> GetStockInfos(string materielCode, string lotNo, string supplyCode, List<string> locationCodes)
         {
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_TaskInfoService/TaskService.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_TaskInfoService/TaskService.cs"
index f8217d5..c2f09f0 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_TaskInfoService/TaskService.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_TaskInfoService/TaskService.cs"
@@ -293,11 +293,11 @@
                                }).ToList();
                             feedmodel.details = groupedData;
 
-                            var result= await _invokeMESService.FeedbackInbound(feedmodel);
+                            var result = await _invokeMESService.FeedbackInbound(feedmodel);
                             if (result != null && result.code == 200)
                             {
                                 _inboundOrderService.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 })
-                                .Where(it => it.Id== inboundOrder.Id).ExecuteCommand();
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
                                 _inboundOrderDetailService.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 })
                                 .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand();
                             }
@@ -329,7 +329,7 @@
             var outloks = _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>().Where(x => x.TaskNum == task.TaskNum).ToList();
 
             var stockids = outloks.Select(x => x.StockId).ToList();
-            
+
             _stockService.StockInfoService.Db.Updateable<Dt_StockInfo>()
                                   .SetColumns(it => new Dt_StockInfo
                                   {
@@ -343,9 +343,9 @@
                                   {
                                       Status = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt()
                                   })
-                                  .Where(it => stockids.Contains( it.StockId))
+                                  .Where(it => stockids.Contains(it.StockId))
                                   .ExecuteCommand();
- 
+
 
 
             return WebResponseContent.Instance.OK();
@@ -419,6 +419,17 @@
                 return WebResponseContent.Instance.Error($"鏈壘鍒拌鎵樼洏搴撳瓨鏄庣粏淇℃伅");
             }
 
+            // 鑾峰彇鎵�鏈夊洖搴撲腑鐨勫嚭搴撻攣瀹氳褰�
+            var returnLocks = _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>()
+                .Where(it => it.OrderNo == task.OrderNo && it.PalletCode == task.PalletCode && it.Status == (int)OutLockStockStatusEnum.鍥炲簱涓�)
+                .ToList();
+            // 鏇存柊鍑哄簱閿佸畾璁板綍鐘舵�佷负鍥炲簱瀹屾垚
+            foreach (var lockInfo in returnLocks)
+            {
+                lockInfo.Status = (int)OutLockStockStatusEnum.宸插洖搴�;
+            }
+            _outStockLockInfoService.Db.Updateable(returnLocks).ExecuteCommand();
+
             //鏌ヨ揣浣�
             Dt_LocationInfo locationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
             if (locationInfo == null)

--
Gitblit v1.9.3