wangxinhui
2025-10-14 0705cb6170a9ba77ba48bbb6dcebb9cf3d73cbea
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs
@@ -97,10 +97,10 @@
            return content;
        }
        //查找可用库存
        public List<Dt_ProStockInfo> GetUseableStocks(int warehoseId,Dt_ProOutOrderDetail proOutOrderDetail)
        public List<Dt_ProStockInfo> GetUseableStocks(int warehoseId,Dt_ProOutOrderDetail proOutOrderDetail, bool isFineWorks = false)
        {
            List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId);
            return BaseDal.GetProStocks(proOutOrderDetail,locationCodes);
            return BaseDal.GetProStocks(proOutOrderDetail,locationCodes, isFineWorks);
        }
        /// <summary>
        /// MES提库可用库存
@@ -126,10 +126,8 @@
        {
            List<Dt_ProStockInfo> assignOutStocks =new List<Dt_ProStockInfo>();
            bool isCanLot = string.IsNullOrEmpty(outOrderDetail.PLot);
            bool isCanDate = string.IsNullOrEmpty(outOrderDetail.DateCode);
            float stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1))
                            && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
                            && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
                            && (isCanLot ? isCanLot : x.ProductCode == outOrderDetail.PLot))
                        .Sum(v => v.StockPcsQty - v.OutboundQuantity)).Sum(x => x);
            //stockInfos = stockInfos.OrderBy(x => x.Id).ToList();
            
@@ -141,14 +139,12 @@
                    Dt_ProStockInfo stockInfo = stockInfos[index];
                    float useableStockQuantity = stockInfo.proStockInfoDetails
                        .Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0,1))
                            && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
                            && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
                            && (isCanLot ? isCanLot : x.ProductCode == outOrderDetail.PLot))
                        .Sum(x => x.StockPcsQty - x.OutboundQuantity);
                    if (useableStockQuantity < needQuantity && useableStockQuantity >0)
                    {
                        stockInfo.proStockInfoDetails.Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1))
                            && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
                            && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)).ToList().ForEach(x => x.OutboundQuantity = x.StockPcsQty);
                            && (isCanLot ? isCanLot : x.ProductCode == outOrderDetail.PLot)).ToList().ForEach(x => x.OutboundQuantity = x.StockPcsQty);
                        needQuantity -= useableStockQuantity;
                    }
                    else
@@ -158,8 +154,7 @@
                            //满足条件进行分配
                            if ((x.StockPcsQty > x.OutboundQuantity)
                                && x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1)) 
                                && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
                                && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
                                && (isCanLot ? isCanLot : x.ProductCode == outOrderDetail.PLot))
                            {
                                if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
                                {
@@ -182,52 +177,6 @@
                    index++;
                }
            }
            #region æˆå“å¯ç”¨åº“存不足不进行分配
            //else
            //{
            //    for (int i = 0; i < stockInfos.Count; i++)
            //    {
            //        Dt_ProStockInfo stockInfo = stockInfos[i];
            //        float useableStockQuantity = stockInfo.proStockInfoDetails
            //            .Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer
            //                && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
            //                && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
            //            .Sum(x => x.StockPcsQty - x.OutboundQuantity);
            //        if (useableStockQuantity < needQuantity)
            //        {
            //            stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty);
            //            needQuantity -= useableStockQuantity;
            //        }
            //        else
            //        {
            //            stockInfo.proStockInfoDetails.ForEach(x =>
            //            {
            //                if (x.StockPcsQty > x.OutboundQuantity && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer
            //                    && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot)
            //                    && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode))
            //                {
            //                    if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
            //                    {
            //                        x.OutboundQuantity += needQuantity;
            //                        needQuantity = 0;
            //                    }
            //                    else
            //                    {
            //                        needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
            //                        x.OutboundQuantity = x.StockPcsQty;
            //                    }
            //                }
            //            });
            //        }
            //        stockInfo.proStockInfoDetails.ForEach(x =>
            //        {
            //            x.OutDetailSaleNo = outOrderDetail.SaleOrder;
            //            x.OutDetailId = outOrderDetail.Id;
            //        });
            //        assignOutStocks.Add(stockInfo);
            //    }
            //}
            #endregion
            residueQuantity = needQuantity;
            return assignOutStocks;
        }
@@ -375,11 +324,14 @@
        {
            try
            {
                List<Dt_ProStockInfo> proStockInfo = BaseDal.QueryData(x => x.WarehouseId == warehouseId);
                List<int> proStockId = proStockInfo.Select(x => x.Id).ToList();
                List<Dt_ProStockInfoDetail> proStockInfoDetails = BaseDal.Db.Queryable<Dt_ProStockInfoDetail>().Where(x => proStockId.Contains(x.OutDetailId)).ToList();
                List<string> proCode = proStockInfoDetails.Select(x => x.ProductCode).ToList();
                return WebResponseContent.Instance.OK(data: proCode);
                //获取所有库存型号
                List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId)
                .Where((master, detail) => master.WarehouseId == warehouseId)
                .Select((master, detail) => detail)
                .ToList();
                //过滤重复
                List<string> proCode = proStockInfoDetails.Select(x => x.ProductCode).Distinct().ToList();
                return WebResponseContent.Instance.OK("成功",data: proCode);
            }
            catch (Exception ex)
            {
@@ -391,11 +343,14 @@
        {
            try
            {
                List<Dt_ProStockInfo> proStockInfo = BaseDal.QueryData(x => x.WarehouseId == warehouseId);
                List<int> proStockId = proStockInfo.Select(x => x.Id).ToList();
                List<Dt_ProStockInfoDetail> proStockInfoDetails = BaseDal.Db.Queryable<Dt_ProStockInfoDetail>().Where(x => scrapProCode.Contains(x.ProductCode) && proStockId.Contains(x.OutDetailId)).ToList();
                List<string> productVersion = proStockInfoDetails.Select(x => x.ProductVersion).ToList();
                return WebResponseContent.Instance.OK(data: productVersion);
                //获取指定产品库存版本
                List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId)
                .Where((master, detail) => master.WarehouseId == warehouseId && detail.ProductCode== scrapProCode)
                .Select((master, detail) => detail)
                .ToList();
                //过滤重复
                List<string> productVersion = proStockInfoDetails.Select(x => x.ProductVersion).Distinct().ToList();
                return WebResponseContent.Instance.OK("成功",data: productVersion);
            }
            catch (Exception ex)
            {
@@ -407,11 +362,14 @@
        {
            try
            {
                List<Dt_ProStockInfo> proStockInfo = BaseDal.QueryData(x => x.WarehouseId == warehouseId);
                List<int> proStockId = proStockInfo.Select(x => x.Id).ToList();
                List<Dt_ProStockInfoDetail> proStockInfoDetails = BaseDal.Db.Queryable<Dt_ProStockInfoDetail>().Where(x => scrapProCode.Contains(x.ProductCode) && proStockId.Contains(x.OutDetailId)).ToList();
                List<string> lotNumber = proStockInfoDetails.Select(x => x.LotNumber).ToList();
                return WebResponseContent.Instance.OK(data: lotNumber);
                //获取指定产品库存批次
                List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId)
                .Where((master, detail) => master.WarehouseId == warehouseId && detail.ProductCode == scrapProCode)
                .Select((master, detail) => detail)
                .ToList();
                //过滤重复
                List<string> lotNumber = proStockInfoDetails.Select(x => x.LotNumber).Distinct().ToList();
                return WebResponseContent.Instance.OK("成功", data: lotNumber);
            }
            catch (Exception ex)
            {