From fd38e10c2e982540a3aaf5804ecbc925991b06dd Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期二, 11 十一月 2025 11:41:15 +0800
Subject: [PATCH] 提交

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs |  168 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 167 insertions(+), 1 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 96bdd97..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"
@@ -4,6 +4,7 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Common.StockEnum;
+using WIDESEA_Common.WareHouseEnum;
 using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
@@ -12,6 +13,7 @@
 using WIDESEA_IRecordService;
 using WIDESEA_IStockService;
 using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.Basic;
 
 namespace WIDESEA_IOutboundService
 {
@@ -20,10 +22,174 @@
         public IRepository<Dt_OutStockLockInfo> Repository => BaseDal;
         public IUnitOfWorkManage _unitOfWorkManage;
 
-        public OutStockLockInfoService(IRepository<Dt_OutStockLockInfo> BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        private readonly IStockService _stockService;
+        private readonly IRecordService _recordService;
+
+        public OutStockLockInfoService(IRepository<Dt_OutStockLockInfo> BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockService stockService, IRecordService recordService) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
+            _stockService = stockService;
+            _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)
+        {
+            // 鑾峰彇搴撳瓨鏄庣粏涓殑鏉$爜淇℃伅锛堝鏋滄湭鎸囧畾鏉$爜锛屼娇鐢ㄧ涓�涓彲鐢ㄦ潯鐮侊級
+            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