From edca9fd026f88d4edad94b528694d95d62246c67 Mon Sep 17 00:00:00 2001 From: zs <zhousong@weben-smart.com> Date: 周五, 16 5月 2025 16:19:33 +0800 Subject: [PATCH] 添加记录 --- HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/LMesOperateAppService.cs | 35 +++ HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsBindInStockAppService.cs | 3 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs | 62 +++++- HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs | 2 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAppService.cs | 13 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsCommonAppService.cs | 19 + HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/LMesCallMaterialInput.cs | 11 + HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/StockTypeEnum.cs | 6 HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx | 12 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/MoveStockInput.cs | 63 +++++++ HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs | 12 + HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs | 186 +++++++++++++++++++ HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/ReduceStockInput{.cs | 59 ++++++ 13 files changed, 445 insertions(+), 38 deletions(-) diff --git a/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx index 4e33776..9ac1ac1 100644 --- a/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx +++ b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx @@ -68,12 +68,12 @@ const formItems = reactive([ // 鍩虹淇℃伅 { - label: '鐗╂枡缂栧彿', - prop: 'materialNo', + label: '鐗╂枡鍨嬪彿', + prop: 'materialModel', el: 'input', - placeholder: '璇疯緭鍏ョ墿鏂欑紪鍙�', + placeholder: '璇疯緭鍏ョ墿鏂欏瀷鍙�', rules: [ - { required: true, message: '鐗╂枡缂栧彿涓嶈兘涓虹┖', trigger: 'blur' }, + { required: true, message: '鐗╂枡鍨嬪彿涓嶈兘涓虹┖', trigger: 'blur' }, { max: 50, message: '闀垮害涓嶈兘瓒呰繃50涓瓧绗�', trigger: 'blur' }, ], }, @@ -210,7 +210,7 @@ const onConfirm = async () => { await formRef.value?.validate() const data = { - materialNo: formData.value.materialNo, + materialModel: formData.value.materialModel, materialName: formData.value.materialName, containerNo: formData.value.containerNo, stockNumber: formData.value.stockNumber, @@ -302,7 +302,7 @@ ) const res = data?.items[0] formData.value = { - materialNo: res.materialNo, + materialModel: res.materialModel, materialName: res.materialName, containerNo: res.containerNo, stockNumber: res.stockNumber, diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/LMesCallMaterialInput.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/LMesCallMaterialInput.cs index f826836..065a84c 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/LMesCallMaterialInput.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/LMesCallMaterialInput.cs @@ -26,4 +26,15 @@ /// </summary> public string? MaterialMode { get; set; } } + + /// <summary> + /// 鎵e噺搴撳瓨 + /// </summary> + public class ReduceInput: LMesCallMaterialInput + { + /// <summary> + /// 搴撲綅鍙� + /// </summary> + public string PlaceNo { get; set; } + } } diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/MoveStockInput.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/MoveStockInput.cs new file mode 100644 index 0000000..35dbdae --- /dev/null +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/MoveStockInput.cs @@ -0,0 +1,63 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto +{ + /// <summary> + /// 搴撳瓨杞Щ鍙傛暟 + /// </summary> + public class MoveStockInput + { + /// <summary> + /// 浠诲姟鍙� + /// </summary> + public string TaskNo { get; set; } + /// <summary> + /// 鍗曟嵁鍙� + /// </summary> + public string OrderNo { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + public string MaterialName { get; set; } + + /// <summary> + /// 瀹瑰櫒缂栧彿 + /// </summary> + public string? ContainerNo { get; set; } + + /// <summary> + /// 鐗╂枡缂栧彿 + /// </summary> + public string MaterialNo { get; set; } + + /// <summary> + /// 搴撳瓨鏁伴噺 + /// </summary> + public int StockNumber { get; set; } + + /// <summary> + /// 鐗╂枡鎵规 + /// </summary> + public string? MaterialBatch { get; set; } + + /// <summary> + /// 鏈哄瀷/瑙勬牸 + /// </summary> + public string? MaterialModel { get; set; } + + /// <summary> + /// 璧峰搴撲綅 + /// </summary> + public string SourcePlace { get; set; } + + /// <summary> + /// 鐩爣搴撲綅 + /// </summary> + public string ToPlace { get; set; } + } +} diff --git "a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/ReduceStockInput\173.cs" "b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/ReduceStockInput\173.cs" new file mode 100644 index 0000000..9b8debf --- /dev/null +++ "b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/ReduceStockInput\173.cs" @@ -0,0 +1,59 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto +{ + /// <summary> + /// 鎵e噺搴撳瓨鍏ュ簱 + /// </summary> + public class ReduceStockInput + { + /// <summary> + /// 浠诲姟鍙� + /// </summary> + public string TaskNo { get; set; } + /// <summary> + /// 鍗曟嵁鍙� + /// </summary> + public string OrderNo { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + public string MaterialName { get; set; } + + /// <summary> + /// 瀹瑰櫒缂栧彿 + /// </summary> + public string? ContainerNo { get; set; } + + /// <summary> + /// 鐗╂枡缂栧彿 + /// </summary> + public string MaterialNo { get; set; } + + /// <summary> + /// 搴撳瓨鏁伴噺 + /// </summary> + public int StockNumber { get; set; } + + /// <summary> + /// 鐗╂枡鎵规 + /// </summary> + public string? MaterialBatch { get; set; } + + /// <summary> + /// 鏈哄瀷/瑙勬牸 + /// </summary> + public string? MaterialModel { get; set; } + + /// <summary> + /// 搴撲綅缂栧彿 + /// </summary> + public string? PlaceNo { get; set; } + + } +} diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs index 2f89dc8..41df00d 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs @@ -15,5 +15,15 @@ /// <summary> /// 鏄惁绂佺敤 /// </summary> - public bool? IsDisabled { get; set; } = false; + public bool? IsDisabled { get; set; } = false; + + /// <summary> + /// 浠诲姟鍙� + /// </summary> + public string TaskNo { get; set; } + + /// <summary> + /// 鍗曟嵁缂栧彿 + /// </summary> + public string OrderNo { get; set; } } diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsBindInStockAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsBindInStockAppService.cs index 795a8fc..d507f61 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsBindInStockAppService.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsBindInStockAppService.cs @@ -1,4 +1,5 @@ 锘縰sing CMS.Plugin.HIAWms.Application.Contracts.Dtos.BindInstockDto; +using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; using System; using System.Collections.Generic; using System.Linq; @@ -17,7 +18,7 @@ /// </summary> /// <param name="input"></param> /// <returns></returns> - Task BindMaterialContaienrAsync(BindInstockInput input); + Task<WmsMaterialStockDto> BindMaterialContaienrAsync(BindInstockInput input); /// <summary> /// 缁勭洏鍏ュ簱 diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsCommonAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsCommonAppService.cs index 44c546f..574c76b 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsCommonAppService.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsCommonAppService.cs @@ -1,5 +1,7 @@ -锘縰sing CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; +锘縰sing CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto; +using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlace; +using CMS.Plugin.HIAWms.Domain.Shared.Enums; using System; using System.Collections.Generic; using System.Linq; @@ -26,6 +28,19 @@ /// <param name="requiredNum"></param> /// <param name="materialNo"></param> /// <returns></returns> - Task<Dictionary<WmsMaterialStockDto, int>> FindStockAsync(string materialModel, int requiredNum, string materialNo = ""); + Task<Dictionary<WmsMaterialStockDto, int>> FindStockAsync(string materialModel, int requiredNum, string placeNo = "", PlaceTypeEnum placeType = PlaceTypeEnum.YUANLIAOKUWEI, string materialNo = ""); + + /// <summary> + /// 鎵e噺搴撳瓨 + /// </summary> + /// <returns></returns> + Task<List<WmsMaterialStockDto>> ReduceMaterialStockAsync(ReduceStockInput input); + + /// <summary> + /// 搴撳瓨杞Щ + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + Task<List<WmsMaterialStockDto>> MoveMaterialStock(MoveStockInput input); } } diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/LMesOperateAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/LMesOperateAppService.cs index d9d1571..4549ca4 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/LMesOperateAppService.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/LMesOperateAppService.cs @@ -2,6 +2,7 @@ using CMS.Plugin.HIAWms.Application.Contracts.Dtos.OutStockDto; using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder; using CMS.Plugin.HIAWms.Application.Contracts.Services; +using CMS.Plugin.HIAWms.Domain.Shared.Enums; using CMS.Plugin.HIAWms.Domain.WmsMaterials; using CMS.Plugin.HIAWms.Domain.WmsTask; using Microsoft.Extensions.DependencyInjection; @@ -22,6 +23,7 @@ { private readonly IWmsTaskRepository _wmsTaskRepository; private readonly IWmsMaterialRepository _wmsMaterialRepository; + private readonly IWmsCommonAppService _wmsCommonAppService; private readonly IWmsInOutStockOrderAppService _wmsInOutStockOrderAppService; private readonly IWmsOutStockAppService _wmsOutStockOrderAppService; private readonly IServiceProvider _serviceProvider; @@ -31,13 +33,15 @@ IWmsInOutStockOrderAppService wmsInOutStockOrderAppService, IWmsOutStockAppService wmsOutStockOrderAppService , - IServiceProvider serviceProvider) + IServiceProvider serviceProvider, + IWmsCommonAppService wmsCommonAppService) { _wmsTaskRepository = wmsTaskRepository; _wmsMaterialRepository = wmsMaterialRepository; _wmsInOutStockOrderAppService = wmsInOutStockOrderAppService; _wmsOutStockOrderAppService = wmsOutStockOrderAppService; _serviceProvider = serviceProvider; + _wmsCommonAppService = wmsCommonAppService; } /// <summary> @@ -116,5 +120,34 @@ return result; } + + /// <summary> + /// LMes鍑哄簱 + /// </summary> + /// <returns></returns> + public async Task LMesOutStockAsync(ReduceInput input) + { + if (input == null) + { + throw new UserFriendlyException("鍑哄簱鍙傛暟閿欒"); + } + + using var scope = _serviceProvider.CreateScope(); + var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); + using var uow = unitOfWorkManager.Begin(requiresNew: true); + if (string.IsNullOrEmpty(input.MaterialMode)) + { + throw new UserFriendlyException("鍑哄簱鍨嬪彿涓嶈兘涓虹┖"); + } + var reduceInput = new ReduceStockInput + { + MaterialModel = input.MaterialMode, + StockNumber = input.Quantity, + PlaceNo = input.PlaceNo, + }; + await _wmsCommonAppService.ReduceMaterialStockAsync(reduceInput); + + await uow.SaveChangesAsync(); + } } } diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAppService.cs index c975a78..0ac4502 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAppService.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAppService.cs @@ -64,7 +64,7 @@ _serviceProvider = serviceProvider; } - public async Task BindMaterialContaienrAsync(BindInstockInput input) + public async Task<WmsMaterialStockDto> BindMaterialContaienrAsync(BindInstockInput input) { using var scope = _serviceProvider.CreateScope(); var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); @@ -134,16 +134,19 @@ MaterialName = material.MaterialName, MaterialBatch = input.MaterialBatch, StockNumber = input.StockNumber, - CheckStatus = Domain.Shared.Enums.MaterialCheckStatusEnum.HEGE, - IsLock = Domain.Shared.Enums.YesNoEnum.N, + CheckStatus = MaterialCheckStatusEnum.HEGE, + IsLock = YesNoEnum.N, PlaceNo = input.PlaceNo, ContainerNo = containerNo, - EmptyContainer = Domain.Shared.Enums.YesNoEnum.N, + MaterialModel = input.MaterialModel, + EmptyContainer = YesNoEnum.N, }; - await _wmsMaterialStockAppService.CreateAsync(materialStock); + var result = await _wmsMaterialStockAppService.CreateAsync(materialStock); await uow.SaveChangesAsync(); await uow.CompleteAsync(); + + return result; } 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 177cf9a..f90eeff 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs @@ -2,10 +2,13 @@ using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlace; using CMS.Plugin.HIAWms.Application.Contracts.Services; +using CMS.Plugin.HIAWms.Domain.Shared.Enums; +using CMS.Plugin.HIAWms.Domain.WmsInOutStockRecord; using CMS.Plugin.HIAWms.Domain.WmsMaterials; using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks; using CMS.Plugin.HIAWms.Domain.WmsPlaces; using CmsQueryExtensions.Extension; +using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; @@ -13,26 +16,33 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp; +using Volo.Abp.Uow; namespace CMS.Plugin.HIAWms.Application.Implements { /// <summary> /// 鍏叡鎿嶄綔鏈嶅姟 /// </summary> - public class WmsCommonAppService : CMSPluginAppService,IWmsCommonAppService + public class WmsCommonAppService : CMSPluginAppService, IWmsCommonAppService { private readonly IWmsMaterialRepository _wmsMaterialRepository; private readonly IWmsPlaceRepository _wmsPlaceRepository; private readonly IWmsMaterialStockRepository _wmsMaterialStockRepository; + private readonly IWmsInOutStockRecordRepository _wmsInOutStockRecordRepository; + private readonly IServiceProvider _serviceProvider; public WmsCommonAppService(IWmsMaterialRepository wmsMaterialRepository, IWmsPlaceRepository wmsPlaceRepository, IWmsMaterialStockRepository wmsMaterialStockRepository - ) +, + IServiceProvider serviceProvider, + IWmsInOutStockRecordRepository wmsInOutStockRecordRepository) { _wmsMaterialRepository = wmsMaterialRepository; _wmsPlaceRepository = wmsPlaceRepository; _wmsMaterialStockRepository = wmsMaterialStockRepository; + _serviceProvider = serviceProvider; + _wmsInOutStockRecordRepository = wmsInOutStockRecordRepository; } @@ -44,14 +54,14 @@ /// <param name="requiredNum"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> - public async Task<Dictionary<WmsPlaceDto, int>> FindAvailablePlacesAsync(string materialModel,int requiredNum, string materialNo="" ) + public async Task<Dictionary<WmsPlaceDto, int>> FindAvailablePlacesAsync(string materialModel, int requiredNum, string materialNo = "") { var whereConditions = DynamicGetQueryParams(new GetWmsMaterialStockInput { StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI }); // 1. 鑾峰彇鎵�鏈夊簱瀛樺拰搴撲綅淇℃伅 var stockList = await _wmsMaterialStockRepository.GetListAsync(whereConditions); - var placeList = await _wmsPlaceRepository.GetListAsync(new WmsPlace { 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.Where(x => !x.IsDisabled).ToList()); // 2. 鏌ユ壘鐩稿悓鐗╂枡鍨嬪彿鍜岀紪鍙风殑搴撳瓨锛堟寜搴撳瓨閲忛檷搴忥級 @@ -114,14 +124,28 @@ /// <param name="requiredNum"></param> /// <param name="materialNo"></param> /// <returns></returns> - public async Task<Dictionary<WmsMaterialStockDto, int>> FindStockAsync(string materialModel, int requiredNum, string materialNo = "") + public async Task<Dictionary<WmsMaterialStockDto, int>> FindStockAsync(string materialModel, int requiredNum, string placeNo = "", PlaceTypeEnum placeType = PlaceTypeEnum.YUANLIAOKUWEI, string materialNo = "") { + var allocation = new Dictionary<WmsMaterialStockDto, int>(); // <搴撲綅鍙�, 鍑哄簱鏁�> // 1. 鑾峰彇鎵�鏈夊簱瀛橈紙鎺掗櫎閿佸畾搴撳瓨锛� + var input = new GetWmsMaterialStockInput(); var whereConditions = DynamicGetQueryParams(new GetWmsMaterialStockInput()); var stockList = (await _wmsMaterialStockRepository.GetListAsync(whereConditions)) .Where(x => x.IsLock == Domain.Shared.Enums.YesNoEnum.N) - .Where(x=>x.StorageTypeNo == Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI) + .Where(x => x.StorageTypeNo == placeType) .ToList(); + + if (!string.IsNullOrEmpty(placeNo)) + { + var stock = stockList.Where(x => x.PlaceNo == placeNo).FirstOrDefault(); + if (stock.StockNumber < requiredNum) + { + throw new UserFriendlyException($"搴撲綅{placeNo}搴撳瓨涓嶈冻,鍙敤: {stock.StockNumber}, 缂�: {requiredNum - stock.StockNumber}"); + } + + allocation.Add(ObjectMapper.Map<WmsMaterialStock, WmsMaterialStockDto>(stock), requiredNum); + return allocation; + } // 2. 绛涢�夊尮閰嶇墿鏂� var availableStocklist = stockList @@ -141,7 +165,6 @@ } // 4. 璁$畻鍚勫簱浣嶅嚭搴撴暟閲� - var allocation = new Dictionary<WmsMaterialStockDto, int>(); // <搴撲綅鍙�, 鍑哄簱鏁�> int remaining = requiredNum; foreach (var stock in availableStocks) @@ -173,5 +196,154 @@ return whereConditions; } + + + /// <summary> + /// 鎵e噺搴撳瓨 + /// </summary> + /// <returns></returns> + public async Task<List<WmsMaterialStockDto>> ReduceMaterialStockAsync(ReduceStockInput input) + { + using var scope = _serviceProvider.CreateScope(); + var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); + using var uow = unitOfWorkManager.Begin(requiresNew: true); + + var materialModel = await _wmsMaterialRepository.FindByModelAsync(input.MaterialModel); + if (materialModel == null) + { + throw new UserFriendlyException("鐗╂枡鍨嬪彿涓嶅瓨鍦�"); + } + var placeInfo = await _wmsPlaceRepository.FindByNameAsync(input.PlaceNo); + if (placeInfo == null) + { + throw new UserFriendlyException("搴撲綅淇℃伅涓嶅瓨鍦�"); + } + var stockresult = await FindStockAsync(input.MaterialModel, input.StockNumber, input.PlaceNo, placeInfo.StorageTypeNo); + if (stockresult == null) + { + throw new UserFriendlyException("褰撳墠鏃犲簱瀛�"); + } + var recordList = new List<WmsInOutStockRecord>(); + var delStock = new List<WmsMaterialStock>(); + foreach (var kvp in stockresult) + { + var stock = kvp.Key; // WmsPlace瀵硅薄 + var quantity = kvp.Value; // 鍒嗛厤鏁伴噺 + + // 鎵e噺搴撳瓨 + var stockList = await _wmsMaterialStockRepository.GetStockListAsync(new WmsMaterialStock { MaterialModel = input.MaterialModel, PlaceNo = stock.PlaceNo }); + var reduceStockList = stockList.OrderBy(x => x.InStockTime).Take(quantity).ToList(); + delStock.AddRange(reduceStockList); + + // 鍑哄叆搴撹褰� + foreach (var item in reduceStockList) + { + var record = new WmsInOutStockRecord + { + TaskNo = input.TaskNo, + OrderNo = input.OrderNo, + StockType = StockTypeEnum.Move, + ContainerNo = item.ContainerNo, + MaterialId = item.MaterialId, + MaterialModel = item.MaterialModel, + MaterialName = item.MaterialName, + MaterialNo = item.MaterialNo, + MaterialBatch = item.MaterialBatch, + SourcePlace = item.PlaceNo, + ToPlace = "鍑哄簱", + OperateTime = DateTime.Now, + Remark = "鍑哄簱鎵e噺", + }; + recordList.Add(record); + } + } + await _wmsMaterialStockRepository.DeleteManyAsync(delStock); + await _wmsInOutStockRecordRepository.InsertManyAsync(recordList); + + await uow.SaveChangesAsync(); + await uow.CompleteAsync(); + + var result = ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(delStock); + return result; + } + + /// <summary> + /// 搴撳瓨杞Щ + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<List<WmsMaterialStockDto>> MoveMaterialStock(MoveStockInput input) + { + using var scope = _serviceProvider.CreateScope(); + var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); + using var uow = unitOfWorkManager.Begin(requiresNew: true); + + var materialModel = await _wmsMaterialRepository.FindByModelAsync(input.MaterialModel); + if (materialModel == null) + { + throw new UserFriendlyException("鐗╂枡鍨嬪彿涓嶅瓨鍦�"); + } + + var placeInfo = await _wmsPlaceRepository.FindByNameAsync(input.SourcePlace); + if (placeInfo == null) + { + throw new UserFriendlyException("鏉ユ簮搴撲綅淇℃伅涓嶅瓨鍦�"); + } + var toPlace = await _wmsPlaceRepository.FindByNameAsync(input.ToPlace); + if (toPlace == null) + { + throw new UserFriendlyException("鐩爣搴撲綅淇℃伅涓嶅瓨鍦�"); + } + var stockresult = await FindStockAsync(input.MaterialModel, input.StockNumber, input.SourcePlace, placeInfo.StorageTypeNo); + if (stockresult == null) + { + throw new UserFriendlyException("褰撳墠鏃犲簱瀛�"); + } + + var recordList = new List<WmsInOutStockRecord>(); + var result = new List<WmsMaterialStockDto>(); + foreach (var kvp in stockresult) + { + var stock = kvp.Key; // WmsPlace瀵硅薄 + var quantity = kvp.Value; // 鍒嗛厤鏁伴噺 + + // 鎵e噺杞Щ + var stockList = await _wmsMaterialStockRepository.GetStockListAsync(new WmsMaterialStock { MaterialModel = input.MaterialModel, PlaceNo = stock.PlaceNo }); + var reduceStockList = stockList.OrderBy(x => x.InStockTime).Take(quantity).ToList(); + + // 鍑哄叆搴撹褰� + foreach (var item in reduceStockList) + { + var record = new WmsInOutStockRecord + { + TaskNo = input.TaskNo, + OrderNo = input.OrderNo, + StockType = StockTypeEnum.Move, + ContainerNo = item.ContainerNo, + MaterialId = item.MaterialId, + MaterialModel = item.MaterialModel, + MaterialName = item.MaterialName, + MaterialNo = item.MaterialNo, + MaterialBatch = item.MaterialBatch, + SourcePlace = item.PlaceNo, + ToPlace = input.ToPlace, + OperateTime = DateTime.Now, + Remark = "鍑哄簱鎵e噺", + }; + recordList.Add(record); + item.PlaceNo = input.ToPlace; + } + + await _wmsMaterialStockRepository.UpdateManyAsync(reduceStockList); + await _wmsInOutStockRecordRepository.InsertManyAsync(recordList); + + result.AddRange(ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(reduceStockList)); + } + + await uow.SaveChangesAsync(); + await uow.CompleteAsync(); + + return result; + } } } diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs index 6cb1570..f8d424b 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs @@ -1,9 +1,13 @@ +using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail; +using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord; using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask; using CMS.Plugin.HIAWms.Application.Contracts.Services; +using CMS.Plugin.HIAWms.Domain.Shared.Enums; using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialStocks; using CMS.Plugin.HIAWms.Domain.WmsAreas; using CMS.Plugin.HIAWms.Domain.WmsContainers; +using CMS.Plugin.HIAWms.Domain.WmsInOutStockRecord; using CMS.Plugin.HIAWms.Domain.WmsMaterials; using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks; using CMS.Plugin.HIAWms.Domain.WmsPlaces; @@ -11,8 +15,10 @@ using CmsQueryExtensions; using CmsQueryExtensions.Extension; using Microsoft.Extensions.DependencyInjection; +using SqlKata; using System.Linq.Expressions; using System.Text.Json; +using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Data; @@ -29,6 +35,8 @@ private readonly IWmsContainerRepository _wmscontainerRepository; private readonly IWmsPlaceRepository _wmsplaceRepository; private readonly IWmsAreaRepository _wmsareaRepository; + private readonly IWmsInOutStockRecordAppService _wmspInOutStockRecordAppService; + private readonly IWmsInOutStockRecordRepository _wmsInOutStockRecordRepository; private readonly IServiceProvider _serviceProvider; /// <summary> @@ -41,7 +49,10 @@ IWmsPlaceRepository wmsplaceRepository, IWmsAreaRepository wmsareaRepository , - IServiceProvider serviceProvider) + IServiceProvider serviceProvider, + IWmsInOutStockRecordAppService wmspInOutStockRecordAppService, + IWmsInOutStockRecordRepository wmsInOutStockRecordRepository + ) { _wmsmaterialstockRepository = wmsmaterialstockRepository; _wmsMaterialRepository = wmsMaterialRepository; @@ -49,6 +60,8 @@ _wmsplaceRepository = wmsplaceRepository; _wmsareaRepository = wmsareaRepository; _serviceProvider = serviceProvider; + _wmspInOutStockRecordAppService = wmspInOutStockRecordAppService; + _wmsInOutStockRecordRepository = wmsInOutStockRecordRepository; } /// <inheritdoc /> @@ -162,12 +175,13 @@ using var uow = unitOfWorkManager.Begin(requiresNew: true); await CheckCreateOrUpdateDtoAsync(input); - //var exist = await _wmsmaterialstockRepository.NameExistAsync(input.MaterialNo); - //if (exist) - //{ - // throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]); - //} - var material = await _wmsMaterialRepository.FindByNameAsync(input.MaterialNo); + var materialModel = await _wmsMaterialRepository.FindByModelAsync(input.MaterialModel); + if(materialModel == null) + { + throw new UserFriendlyException("鐗╂枡鍨嬪彿涓嶅瓨鍦�"); + } + + var material = await _wmsMaterialRepository.FindByNameAsync(materialModel.MaterialNo); if (material == null) { throw new UserFriendlyException("鐗╂枡淇℃伅涓嶅瓨鍦�"); @@ -183,10 +197,10 @@ wmsmaterialstock.MaterialId = Guid.NewGuid().ToString("N"); wmsmaterialstock.MaterialName = material.MaterialName; - wmsmaterialstock.ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.KUWEI; - wmsmaterialstock.ContainerType = container == null ? Domain.Shared.Enums.ContainerTypeEnum.XUNI : container.ContainerType; - wmsmaterialstock.StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.XUNIKUWEI; - wmsmaterialstock.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.DAIRU; + wmsmaterialstock.ContainerStatus = ContainerStatusEnum.KUWEI; + wmsmaterialstock.ContainerType = container == null ? ContainerTypeEnum.XUNI : container.ContainerType; + wmsmaterialstock.StorageTypeNo = PlaceTypeEnum.XUNIKUWEI; + wmsmaterialstock.PlaceStatus = PlaceStatusEnum.DAIRU; if (!string.IsNullOrEmpty(input.PlaceNo)) { var place = await _wmsplaceRepository.FindByNameAsync(input.PlaceNo); @@ -200,12 +214,12 @@ throw new UserFriendlyException("搴撲綅搴撳尯淇℃伅涓嶅瓨鍦�"); } - wmsmaterialstock.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.CUNHUO; + wmsmaterialstock.PlaceStatus = PlaceStatusEnum.CUNHUO; wmsmaterialstock.StorageTypeNo = place.StorageTypeNo; wmsmaterialstock.AreaCode = place.AreaCode; wmsmaterialstock.AreaName = area.AreaName; - place.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.CUNHUO; + place.PlaceStatus = PlaceStatusEnum.CUNHUO; place.Islock = input.IsLock; await _wmsplaceRepository.UpdateAsync(place); @@ -229,6 +243,7 @@ wmsmaterialstock.InStockTime = DateTime.Now; var stockList = new List<WmsMaterialStock>(); + var recordList = new List<WmsInOutStockRecord>(); for (int i = 0; i < input.StockNumber; i++) { var stock = new WmsMaterialStock(); @@ -237,8 +252,27 @@ stock.MaterialId = Guid.NewGuid().ToString("N"); stock.StockNumber = 1; stockList.Add(stock); - } + // 娣诲姞搴撳瓨璁板綍 + var record = new WmsInOutStockRecord + { + TaskNo = input.TaskNo, + OrderNo = input.OrderNo, + StockType = StockTypeEnum.InBound, + ContainerNo = stock.ContainerNo, + MaterialId = stock.MaterialId, + MaterialModel = stock.MaterialModel, + MaterialName = stock.MaterialName, + MaterialNo = stock.MaterialNo, + MaterialBatch = stock.MaterialBatch, + SourcePlace = "娣诲姞搴撳瓨", + ToPlace = stock.PlaceNo, + OperateTime = DateTime.Now, + Remark = "鍏ュ簱", + }; + recordList.Add(record); + } + await _wmsInOutStockRecordRepository.InsertManyAsync(recordList); await _wmsmaterialstockRepository.InsertManyAsync(stockList); if (container == null) diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/StockTypeEnum.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/StockTypeEnum.cs index a7d0926..6fe1a52 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/StockTypeEnum.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/StockTypeEnum.cs @@ -24,5 +24,11 @@ /// </summary> [Description("鍑哄簱")] OutBound = 2, + + /// <summary> + /// 杞Щ + /// </summary> + [Description("杞Щ")] + Move = 3, } } diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs b/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs index c84b892..6e670be 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs @@ -58,7 +58,7 @@ } /// <summary> - /// 鍝嚭鏉ユ槑缁� + /// 搴撳瓨鏄庣粏 /// </summary> /// <param name="input"></param> /// <returns></returns> -- Gitblit v1.9.3