From dca77df040a4339faf8498d1cf230456d4afd272 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周二, 13 5月 2025 13:57:09 +0800
Subject: [PATCH] 公共前端组件
---
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs | 74 +++++++++++++++++++++++++++++--------
1 files changed, 58 insertions(+), 16 deletions(-)
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs
index e8ef141..890f1c6 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs
@@ -1,4 +1,7 @@
锘縰sing 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;
using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
@@ -14,7 +17,7 @@
/// <summary>
/// 鍏叡鎿嶄綔鏈嶅姟
/// </summary>
- public class WmsCommonAppService : CMSPluginAppService
+ public class WmsCommonAppService : CMSPluginAppService,IWmsCommonAppService
{
private readonly IWmsMaterialRepository _wmsMaterialRepository;
private readonly IWmsPlaceRepository _wmsPlaceRepository;
@@ -30,17 +33,6 @@
_wmsMaterialStockRepository = wmsMaterialStockRepository;
}
- public async Task<List<MaterialModelOutput>> GetMaterialModeListAsync()
- {
- var materialList = await _wmsMaterialRepository.GetMaterialListAsync(new WmsMaterial());
- if (materialList == null || materialList.Count <= 0) return new List<MaterialModelOutput>(); ;
-
- return materialList.Select(material => new MaterialModelOutput
- {
- MaterialModel = material.MaterialModel,
- MaterialModelDesc = material.MaterialModel
- }).ToList();
- }
/// <summary>
/// 鏌ユ壘绌哄簱浣�
@@ -50,11 +42,13 @@
/// <param name="requiredNum"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
- public async Task<Dictionary<WmsPlace, int>> FindAvailablePlacesAsync(string materialModel, string materialNo, int requiredNum)
+ public async Task<Dictionary<WmsPlaceDto, int>> FindAvailablePlacesAsync(string materialModel,int requiredNum, string materialNo="" )
{
// 1. 鑾峰彇鎵�鏈夊簱瀛樺拰搴撲綅淇℃伅
- var stockList = await _wmsMaterialStockRepository.GetListAsync(new WmsMaterialStock());
- var allPlaceList = await _wmsPlaceRepository.GetListAsync(new WmsPlace());
+ var stockList = await _wmsMaterialStockRepository.GetListAsync(new WmsMaterialStock { StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI});
+
+ var placeList = await _wmsPlaceRepository.GetListAsync(new WmsPlace { StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI});
+ var allPlaceList = ObjectMapper.Map<List<WmsPlace>, List<WmsPlaceDto>>(placeList);
// 2. 鏌ユ壘鐩稿悓鐗╂枡鍨嬪彿鍜岀紪鍙风殑搴撳瓨锛堟寜搴撳瓨閲忛檷搴忥級
var sameModelStocks = stockList
@@ -63,7 +57,7 @@
.OrderByDescending(x => x.StockNumber)
.ToList();
- var availablePlaces = new Dictionary<WmsPlace, int>();
+ var availablePlaces = new Dictionary<WmsPlaceDto, int>();
int remainingNum = requiredNum;
// 3. 浼樺厛妫�鏌ュ凡鏈夊簱瀛樼殑搴撲綅鏄惁鑳藉瓨鏀撅紙鐩稿悓 MaterialNo锛�
@@ -108,5 +102,53 @@
return availablePlaces;
}
+
+ /// <summary>
+ /// 鏌ユ壘搴撳瓨
+ /// </summary>
+ /// <param name="materialModel"></param>
+ /// <param name="requiredNum"></param>
+ /// <param name="materialNo"></param>
+ /// <returns></returns>
+ public async Task<Dictionary<WmsMaterialStockDto, int>> FindStockAsync(string materialModel, int requiredNum, string materialNo = "")
+ {
+ // 1. 鑾峰彇鎵�鏈夊簱瀛橈紙鎺掗櫎閿佸畾搴撳瓨锛�
+ var stockList = (await _wmsMaterialStockRepository.GetListAsync(new WmsMaterialStock()))
+ .Where(x => x.IsLock == Domain.Shared.Enums.YesNoEnum.N)
+ .Where(x=>x.StorageTypeNo == Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI)
+ .ToList();
+
+ // 2. 绛涢�夊尮閰嶇墿鏂�
+ 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);
+ if (totalAvailable < requiredNum)
+ {
+ throw new UserFriendlyException(
+ $"搴撳瓨涓嶈冻锛侀渶姹�: {requiredNum}, 鍙敤: {totalAvailable}, 缂�: {requiredNum - totalAvailable}");
+ }
+
+ // 4. 璁$畻鍚勫簱浣嶅嚭搴撴暟閲�
+ var allocation = new Dictionary<WmsMaterialStockDto, int>(); // <搴撲綅鍙�, 鍑哄簱鏁�>
+ int remaining = requiredNum;
+
+ foreach (var stock in availableStocks)
+ {
+ if (remaining <= 0) break;
+
+ int deductAmount = Math.Min(stock.StockNumber, remaining);
+ allocation.Add(stock, deductAmount);
+ remaining -= deductAmount;
+ }
+
+ return allocation;
+ }
}
}
--
Gitblit v1.9.3