From c4e1a656954799267cbd61d3de3a040e8dc8e46a Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期二, 11 十一月 2025 08:48:42 +0800
Subject: [PATCH] 提交出库

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs |  133 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 133 insertions(+), 0 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/OutStockLockInfoService.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/OutStockLockInfoService.cs"
index a48a488..ca2bf8b 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/OutStockLockInfoService.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/OutStockLockInfoService.cs"
@@ -46,6 +46,7 @@
                 OrderDetailId = outboundOrderDetail.Id,
                 OrderNo = outboundOrder.OrderNo,
                 OrderType = outboundOrder.OrderType,
+
                 OriginalQuantity = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).Sum(x => x.StockQuantity),
                 Status = taskNum == null ? OutLockStockStatusEnum.宸插垎閰�.ObjToInt() : OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt(),
                 StockId = outStock.Id,
@@ -58,5 +59,137 @@
 
             return outStockLockInfo;
         }
+
+        /// <summary>
+        /// 鍒涘缓鍑哄簱閿佸畾淇℃伅
+        /// </summary>
+        public Dt_OutStockLockInfo GetOutStockLockInfo(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, decimal assignQuantity, string barcode = null, int? taskNum = null)
+        {
+            // 鑾峰彇搴撳瓨鏄庣粏涓殑鏉$爜淇℃伅锛堝鏋滄湭鎸囧畾鏉$爜锛屼娇鐢ㄧ涓�涓彲鐢ㄦ潯鐮侊級
+            var stockDetails = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode && x.StockQuantity > x.OutboundQuantity)
+                .OrderBy(x => x.ProductionDate).ToList();
+
+            if (!stockDetails.Any())
+            {
+                throw new Exception($"鏈壘鍒扮墿鏂橻{outboundOrderDetail.MaterielCode}]鐨勫彲鐢ㄥ簱瀛樻槑缁�");
+            }
+
+            // 纭畾鏉$爜锛堝鏋滄湭鎸囧畾锛屼娇鐢ㄦ渶鏃╁叆搴撶殑鏉$爜锛�
+            var targetBarcode = barcode;
+            if (string.IsNullOrEmpty(targetBarcode))
+            {
+                targetBarcode = stockDetails.First().Barcode;
+            }
+            // 鑾峰彇璇ユ潯鐮佺殑鍙敤鏁伴噺
+            var barcodeDetail = stockDetails.FirstOrDefault(x => x.Barcode == targetBarcode);
+            if (barcodeDetail == null)
+            {
+                throw new Exception($"鏉$爜[{targetBarcode}]鍦ㄥ簱瀛樹腑涓嶅瓨鍦�");
+            }
+
+            return new Dt_OutStockLockInfo()
+            {
+                PalletCode = outStock.PalletCode,
+                AssignQuantity = assignQuantity,
+                MaterielCode = outboundOrderDetail.MaterielCode,
+                BatchNo = outboundOrderDetail.BatchNo ?? outStock.Details.FirstOrDefault()?.BatchNo,
+                LocationCode = outStock.LocationCode,
+                MaterielName = outboundOrderDetail.MaterielName,
+                OrderDetailId = outboundOrderDetail.Id,
+                OrderNo = outboundOrder.OrderNo,
+                OrderQuantity = outboundOrderDetail.OrderQuantity,
+                OriginalQuantity = outStock.Details
+                    .Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode)
+                    .Sum(x => x.StockQuantity),
+                Status = taskNum == null ? (int)OutLockStockStatusEnum.宸插垎閰� : (int)OutLockStockStatusEnum.鍑哄簱涓�,
+                StockId = outStock.Id,
+                TaskNum = taskNum,
+                Unit = outboundOrderDetail.Unit,
+
+
+                // 鏂板瀛楁璧嬪��
+                CurrentBarcode = targetBarcode, // 褰撳墠鍒嗛厤鐨勬潯鐮�
+                OriginalLockQuantity = assignQuantity, // 鍘熷閿佸畾鏁伴噺
+                IsSplitted = 0 // 鍒濆鏈媶鍖�
+            };
+        }
+
+        /// <summary>
+        /// 鏍规嵁璁㈠崟鏄庣粏ID鑾峰彇鍑哄簱閿佸畾淇℃伅
+        /// </summary>
+        public async Task<List<Dt_OutStockLockInfo>> GetByOrderDetailId(int orderDetailId)
+        {
+            return await Db.Queryable<Dt_OutStockLockInfo>()
+                .Where(x => x.OrderDetailId == orderDetailId)
+                .OrderBy(x => x.Id)
+                .ToListAsync();
+        }
+
+        /// <summary>
+        /// 鏍规嵁鎵樼洏缂栧彿鑾峰彇鍑哄簱閿佸畾淇℃伅
+        /// </summary>
+        public async Task<List<Dt_OutStockLockInfo>> GetByPalletCode(string palletCode, int? status = null)
+        {
+            var query = Db.Queryable<Dt_OutStockLockInfo>()
+                .Where(x => x.PalletCode == palletCode);
+
+            if (status.HasValue)
+            {
+                query = query.Where(x => x.Status == status.Value);
+            }
+
+            return await query.OrderBy(x => x.Id).ToListAsync();
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎵樼洏鐨勯攣瀹氫俊鎭�
+        /// </summary>
+        public async Task<List<Dt_OutStockLockInfo>> GetPalletLockInfos(string palletCode)
+        {
+            return await Db.Queryable<Dt_OutStockLockInfo>()
+                .Where(x => x.PalletCode == palletCode && x.Status == (int)OutLockStockStatusEnum.鍑哄簱涓�)
+                .ToListAsync();
+        }
+
+        /// <summary>
+        /// 鏇存柊鍑哄簱閿佸畾淇℃伅鐨勬潯鐮侊紙鐢ㄤ簬鎷嗗寘鎿嶄綔锛�
+        /// </summary>
+        public async Task<WebResponseContent> UpdateLockInfoBarcode(int lockInfoId, string newBarcode)
+        {
+            try
+            {
+                var lockInfo = await Db.Queryable<Dt_OutStockLockInfo>()
+                    .Where(x => x.Id == lockInfoId)
+                    .FirstAsync();
+
+                if (lockInfo == null)
+                    return WebResponseContent.Instance.Error("鏈壘鍒板嚭搴撻攣瀹氫俊鎭�");
+
+                // 楠岃瘉鏂版潯鐮佹槸鍚﹀瓨鍦�
+                var stockDetail = await Db.Queryable<Dt_StockInfoDetail>()
+                    .Where(x => x.Barcode == newBarcode &&
+                               x.StockId == lockInfo.StockId &&
+                               x.MaterielCode == lockInfo.MaterielCode)
+                    .FirstAsync();
+
+                if (stockDetail == null)
+                    return WebResponseContent.Instance.Error("鏂版潯鐮佸湪搴撳瓨涓笉瀛樺湪");
+
+                // 鏇存柊鏉$爜鍜屾媶鍖呯姸鎬�
+                lockInfo.CurrentBarcode = newBarcode;
+                lockInfo.IsSplitted = 1;
+
+                await Db.Updateable(lockInfo).ExecuteCommandAsync();
+
+                return WebResponseContent.Instance.OK("鏇存柊鏉$爜鎴愬姛");
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error($"鏇存柊鏉$爜澶辫触: {ex.Message}");
+            }
+        }
+
+
+
     }
 }

--
Gitblit v1.9.3