zs
2025-05-11 3322dfd299755416176cd946265577e176cae795
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs
@@ -1,4 +1,5 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
@@ -108,7 +109,7 @@
        /// <param name="requiredNum"></param>
        /// <param name="materialNo"></param>
        /// <returns></returns>
        public async Task<Dictionary<string, int>> FindStockAsync(string materialModel, int requiredNum, string materialNo = "")
        public async Task<Dictionary<WmsMaterialStockDto, int>> FindStockAsync(string materialModel, int requiredNum, string materialNo = "")
        {
            // 1. 获取所有库存(排除锁定库存)
            var stockList = (await _wmsMaterialStockRepository.GetListAsync(new WmsMaterialStock()))
@@ -116,11 +117,13 @@
                .ToList();
            // 2. 筛选匹配物料
            var availableStocks = stockList
            var availableStocklist = stockList
                .Where(x => x.MaterialModel == materialModel)
                .WhereIf(!string.IsNullOrEmpty(materialNo), x => x.MaterialNo == materialNo)
                .OrderBy(x => x.StockNumber) // 优先从库存少的库位出
                .ToList();
            var availableStocks = ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(availableStocklist);
            // 3. 检查总库存是否足够
            int totalAvailable = availableStocks.Sum(x => x.StockNumber);
@@ -131,7 +134,7 @@
            }
            // 4. 计算各库位出库数量
            var allocation = new Dictionary<string, int>(); // <库位号, 出库数>
            var allocation = new Dictionary<WmsMaterialStockDto, int>(); // <库位号, 出库数>
            int remaining = requiredNum;
            foreach (var stock in availableStocks)
@@ -139,7 +142,7 @@
                if (remaining <= 0) break;
                int deductAmount = Math.Min(stock.StockNumber, remaining);
                allocation.Add(stock.PlaceNo, deductAmount);
                allocation.Add(stock, deductAmount);
                remaining -= deductAmount;
            }