From e31ca4e3e1774b7ddb832e8ec498b5ada24b2608 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期日, 16 十一月 2025 19:13:58 +0800
Subject: [PATCH] 提交

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs |  129 ++++++++++++++++++++++++++-----------------
 1 files changed, 78 insertions(+), 51 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 ca2bf8b..a40785a 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"
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing Microsoft.AspNetCore.Http;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -10,6 +11,7 @@
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Outbound;
 using WIDESEA_IRecordService;
 using WIDESEA_IStockService;
 using WIDESEA_Model.Models;
@@ -32,63 +34,57 @@
             _recordService = recordService;
         }
 
-        public Dt_OutStockLockInfo GetOutStockLockInfo(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, decimal assignQuantity, int? taskNum = null)
-        {
-
-            Dt_OutStockLockInfo outStockLockInfo = 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,
-                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,
-                TaskNum = taskNum,
-                OrderQuantity = outboundOrderDetail.OrderQuantity,
-                Unit = outboundOrderDetail.Unit,
-                //ProductionDate = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).FirstOrDefault()?.ProductionDate,
-                //EffectiveDate = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).FirstOrDefault()?.EffectiveDate
-            };
-
-            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)
+        public Dt_OutStockLockInfo GetOutStockLockInfo(
+            Dt_OutboundOrder outboundOrder,
+            Dt_OutboundOrderDetail outboundOrderDetail,
+            Dt_StockInfo outStock,
+            decimal assignQuantity,
+            string barcode = null)
         {
-            // 鑾峰彇搴撳瓨鏄庣粏涓殑鏉$爜淇℃伅锛堝鏋滄湭鎸囧畾鏉$爜锛屼娇鐢ㄧ涓�涓彲鐢ㄦ潯鐮侊級
-            var stockDetails = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode && x.StockQuantity > x.OutboundQuantity)
-                .OrderBy(x => x.ProductionDate).ToList();
+            // 鑾峰彇搴撳瓨鏄庣粏淇℃伅
+            var stockDetails = outStock.Details
+                .Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode)
+                .ToList();
 
             if (!stockDetails.Any())
             {
-                throw new Exception($"鏈壘鍒扮墿鏂橻{outboundOrderDetail.MaterielCode}]鐨勫彲鐢ㄥ簱瀛樻槑缁�");
+                throw new Exception($"鏈壘鍒扮墿鏂橻{outboundOrderDetail.MaterielCode}]鐨勫簱瀛樻槑缁�");
             }
 
-            // 纭畾鏉$爜锛堝鏋滄湭鎸囧畾锛屼娇鐢ㄦ渶鏃╁叆搴撶殑鏉$爜锛�
-            var targetBarcode = barcode;
-            if (string.IsNullOrEmpty(targetBarcode))
+            // 纭畾鏉$爜
+            string targetBarcode;
+            if (!string.IsNullOrEmpty(barcode))
             {
-                targetBarcode = stockDetails.First().Barcode;
+                // 楠岃瘉鎸囧畾鐨勬潯鐮佹槸鍚﹀瓨鍦�
+                var specifiedBarcodeDetail = stockDetails.FirstOrDefault(x => x.Barcode == barcode);
+                if (specifiedBarcodeDetail == null)
+                {
+                    throw new Exception($"鎸囧畾鐨勬潯鐮乕{barcode}]鍦ㄥ簱瀛樹腑涓嶅瓨鍦�");
+                }
+                targetBarcode = barcode;
             }
-            // 鑾峰彇璇ユ潯鐮佺殑鍙敤鏁伴噺
-            var barcodeDetail = stockDetails.FirstOrDefault(x => x.Barcode == targetBarcode);
-            if (barcodeDetail == null)
+            else
             {
-                throw new Exception($"鏉$爜[{targetBarcode}]鍦ㄥ簱瀛樹腑涓嶅瓨鍦�");
+                // 浣跨敤绗竴涓彲鐢ㄦ潯鐮�
+                var firstAvailableDetail = stockDetails
+                    .Where(x => x.StockQuantity > x.OutboundQuantity)
+                    .OrderBy(x => x.CreateDate)
+                    .FirstOrDefault();
+
+                if (firstAvailableDetail == null)
+                {
+                    throw new Exception($"鐗╂枡[{outboundOrderDetail.MaterielCode}]娌℃湁鍙敤搴撳瓨");
+                }
+                targetBarcode = firstAvailableDetail.Barcode;
             }
 
             return new Dt_OutStockLockInfo()
             {
+
                 PalletCode = outStock.PalletCode,
                 AssignQuantity = assignQuantity,
                 MaterielCode = outboundOrderDetail.MaterielCode,
@@ -101,19 +97,19 @@
                 OriginalQuantity = outStock.Details
                     .Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode)
                     .Sum(x => x.StockQuantity),
-                Status = taskNum == null ? (int)OutLockStockStatusEnum.宸插垎閰� : (int)OutLockStockStatusEnum.鍑哄簱涓�,
+                Status = (int)OutLockStockStatusEnum.宸插垎閰�,
                 StockId = outStock.Id,
-                TaskNum = taskNum,
                 Unit = outboundOrderDetail.Unit,
-
-
-                // 鏂板瀛楁璧嬪��
-                CurrentBarcode = targetBarcode, // 褰撳墠鍒嗛厤鐨勬潯鐮�
-                OriginalLockQuantity = assignQuantity, // 鍘熷閿佸畾鏁伴噺
-                IsSplitted = 0 // 鍒濆鏈媶鍖�
+                FactoryArea = outboundOrder.FactoryArea,
+                OrderType=outboundOrder.OrderType,
+                SupplyCode = outboundOrderDetail.SupplyCode,
+                WarehouseCode = outboundOrderDetail.WarehouseCode,
+                // 鏂板瀛楁
+                CurrentBarcode = targetBarcode,
+                OriginalLockQuantity = assignQuantity,
+                IsSplitted = 0
             };
         }
-
         /// <summary>
         /// 鏍规嵁璁㈠崟鏄庣粏ID鑾峰彇鍑哄簱閿佸畾淇℃伅
         /// </summary>
@@ -125,6 +121,37 @@
                 .ToListAsync();
         }
 
+        public async Task<LockInfoDetailDto> GetLockInfoDetail(int lockInfoId)
+        {
+            var lockInfo = await Db.Queryable<Dt_OutStockLockInfo>()
+                .LeftJoin<Dt_OutboundOrderDetail>((lockInfo, detail) => lockInfo.OrderDetailId == detail.Id)
+                .Where((lockInfo, detail) => lockInfo.Id == lockInfoId)
+                .Select((lockInfo, detail) => new LockInfoDetailDto
+                {
+                    Id = lockInfo.Id,
+                    OrderNo = lockInfo.OrderNo,
+                    OrderDetailId = lockInfo.OrderDetailId,
+                    BatchNo = lockInfo.BatchNo,
+                    MaterielCode = lockInfo.MaterielCode,
+                    StockId = lockInfo.StockId,
+                    OrderQuantity = lockInfo.OrderQuantity,
+                    OriginalQuantity = lockInfo.OriginalQuantity,
+                    AssignQuantity = lockInfo.AssignQuantity,
+                    PickedQty = lockInfo.PickedQty,
+                    LocationCode = lockInfo.LocationCode,
+                    PalletCode = lockInfo.PalletCode,
+                    Status = lockInfo.Status,
+                    IsSplitted = lockInfo.IsSplitted,
+                    ParentLockId = lockInfo.ParentLockId,
+
+                    MaterielName = detail.MaterielName,
+                    Unit = detail.Unit
+                })
+                .FirstAsync();
+
+            return lockInfo;
+        }
+
         /// <summary>
         /// 鏍规嵁鎵樼洏缂栧彿鑾峰彇鍑哄簱閿佸畾淇℃伅
         /// </summary>

--
Gitblit v1.9.3