From 5c5a26ca4f99953d06e75010eed5b0b59dff3b3f Mon Sep 17 00:00:00 2001 From: song zhou <1759742460@qq.com> Date: 周日, 18 5月 2025 19:44:26 +0800 Subject: [PATCH] wcs交互 --- HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 163 insertions(+), 14 deletions(-) diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs index 245278e..595662e 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs @@ -20,6 +20,8 @@ using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord; using Volo.Abp.Uow; using Microsoft.Extensions.DependencyInjection; +using NPOI.SS.Formula.Functions; +using System.Collections.Generic; namespace CMS.Plugin.HIAWms.Application.Implements; @@ -167,6 +169,7 @@ var insertObj = ObjectMapper.Map<WmsTaskCreateDto, WmsTask>(input); insertObj.Sort = sort; input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); + insertObj.PlcTaskId = new Random(Guid.NewGuid().GetHashCode()).Next(101, 99999); await wmsTaskRepository.InsertAsync(insertObj); @@ -197,7 +200,7 @@ } updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); - if(input.TaskStatus == Domain.Shared.Enums.WmsTaskStatus.WANCHENG || input.TaskStatus == Domain.Shared.Enums.WmsTaskStatus.QUXIAO) + if (input.TaskStatus == Domain.Shared.Enums.WmsTaskStatus.WANCHENG || input.TaskStatus == Domain.Shared.Enums.WmsTaskStatus.QUXIAO) { throw new UserFriendlyException("瀹屾垚鎴栬�呭彇娑堢殑浠诲姟涓嶅厑璁告洿鏀�"); } @@ -523,9 +526,12 @@ /// <param name="input"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> - public async Task FinishTaskAsync(WmsTaskUpdateDto input) + public async Task<WmsTaskDto> FinishTaskAsync(WmsTaskStatusDto input) { - + if (string.IsNullOrEmpty(input.TaskNo)) + { + throw new UserFriendlyException("浠诲姟鍙蜂笉鑳戒负绌�"); + } using var scope = _serviceProvider.CreateScope(); var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); using var uow = unitOfWorkManager.Begin(requiresNew: true); @@ -540,19 +546,35 @@ throw new UserFriendlyException("鍙栨秷鎴栬�呭畬鎴愮殑浠诲姟涓嶅厑璁告搷浣�"); } task.TaskStatus = WmsTaskStatus.WANCHENG; + task.TaskDodeviceStatus = TaskDodeviceStatus.SrmFinish; + await wmsTaskRepository.UpdateAsync(task); + + var place = await _wmsPlaceRepository.FindByNameAsync(task.ToPlace); + if (place == null) + { + throw new UserFriendlyException("鐩爣搴撲綅涓嶅瓨鍦�"); + } // 鏇存柊搴撳瓨 - var stockList = await _wmsMaterialStockRepository.GetStockListAsync(new WmsMaterialStock { MaterialModel = task.MutableParam1,PlaceNo = task.SourcePlace}); - if(stockList == null || stockList.Count<=0) + var stockList = await _wmsMaterialStockRepository.GetStockListAsync(new WmsMaterialStock { MaterialModel = task.MutableParam1, PlaceNo = task.SourcePlace }); + if (stockList == null || stockList.Count <= 0) { throw new UserFriendlyException("鍘熷簱浣嶄俊鎭笉瀛樺湪"); } var stock = stockList.FirstOrDefault(); stock.PlaceNo = task.ToPlace; + stock.StorageTypeNo = place.StorageTypeNo; + stock.InStockTime = DateTime.Now; stock.ContainerNo = "TP" + task.ToPlace; + await _wmsMaterialStockRepository.UpdateAsync(stock); + + place.PlaceStatus = PlaceStatusEnum.CUNHUO; + await _wmsPlaceRepository.UpdateAsync(place); + + var container = await _wmsContainerRepository.FindByNameAsync(stock.ContainerNo); - if(container == null) + if (container == null) { await _wmsContainerRepository.InsertAsync(new WmsContainer { @@ -561,9 +583,14 @@ ContainerType = ContainerTypeEnum.XUNI, }); } + else + { + container.ContainerStatus = ContainerStatusEnum.KUWEI; + await _wmsContainerRepository.UpdateAsync(container); + } var oldContainer = await _wmsContainerRepository.FindByNameAsync(task.ContainerNo); - if(oldContainer != null) + if (oldContainer != null) { await _wmsContainerRepository.DeleteAsync(oldContainer); } @@ -572,7 +599,7 @@ { // 璺熸柊鍗曟嵁瀹屾垚鏁伴噺 var orderNo = await _wmsInOutStockOrderRepository.FindByNameAsync(task.SourceOrderNo); - if(orderNo != null) + if (orderNo != null) { orderNo.CompleteNumber += 1; orderNo.OrderStatus = OrderStatusEnum.Executing; @@ -605,7 +632,7 @@ StockType = task.TaskType == TaskTypeEnum.CHUKU ? StockTypeEnum.OutBound : StockTypeEnum.InBound, ContainerNo = task.ContainerNo, MaterialId = stock.MaterialId, - MaterialModel= stock.MaterialModel, + MaterialModel = stock.MaterialModel, MaterialName = stock.MaterialName, MaterialNo = stock.MaterialNo, MaterialBatch = stock.MaterialBatch, @@ -617,6 +644,8 @@ await uow.SaveChangesAsync(); await uow.CompleteAsync(); + + return ObjectMapper.Map<WmsTask, WmsTaskDto>(task); } /// <summary> @@ -625,9 +654,12 @@ /// <param name="input"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> - public async Task CancelTaskAysnc(WmsTaskUpdateDto input) + public async Task CancelTaskAysnc(WmsTaskStatusDto input) { - + if (string.IsNullOrEmpty(input.TaskNo)) + { + throw new UserFriendlyException("浠诲姟鍙蜂笉鑳戒负绌�"); + } using var scope = _serviceProvider.CreateScope(); var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); using var uow = unitOfWorkManager.Begin(requiresNew: true); @@ -656,21 +688,138 @@ { // 璺熸柊鍗曟嵁瀹屾垚鏁伴噺 var orderNo = await _wmsInOutStockOrderRepository.FindByNameAsync(task.SourceOrderNo); - if(orderNo != null) + if (orderNo != null) { orderNo.CompleteNumber -= 1; orderNo.OrderStatus = OrderStatusEnum.NoStart; } - if (orderNo.CompleteNumber>0) + if (orderNo.CompleteNumber > 0) { orderNo.OrderStatus = OrderStatusEnum.Executing; } await _wmsInOutStockOrderRepository.UpdateAsync(orderNo); - + } await uow.SaveChangesAsync(); await uow.CompleteAsync(); } + + /// <summary> + /// 淇敼鐩爣搴撲綅 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task ChangeTaskToPlaceAsync(ChangeTaskToPlaceInput input) + { + + if (string.IsNullOrEmpty(input.TaskNo)) + { + throw new UserFriendlyException("浠诲姟鍙蜂笉鑳戒负绌�"); + } + + var task = await wmsTaskRepository.FindByNameAsync(input.TaskNo); + if (task == null) + { + throw new UserFriendlyException("浠诲姟淇℃伅涓嶅瓨鍦�"); + } + + if (task.TaskStatus != WmsTaskStatus.WEIZHIXING) + { + throw new UserFriendlyException("宸插紑濮嬫垨鑰呯粨鏉熺殑浠诲姟涓嶅厑璁镐慨鏀�"); + } + + var toPlaceInfo = await _wmsPlaceRepository.FindByNameAsync(input.ToPlace); + if (toPlaceInfo == null) + { + throw new UserFriendlyException("鐩爣搴撲綅淇℃伅涓嶅瓨鍦�"); + } + + if (toPlaceInfo.IsDisabled) + { + throw new UserFriendlyException("鐩爣搴撲綅宸茶绂佺敤"); + } + + var toplaceStock = await _wmsMaterialStockRepository.GetStockListAsync(new WmsMaterialStock { PlaceNo = input.ToPlace }); + if (toplaceStock != null && toplaceStock.Count > 0) + { + var model = toplaceStock.FirstOrDefault(); + if (model.MaterialModel != input.MutableParam1) + { + throw new UserFriendlyException("鐩爣搴撲綅鍨嬪彿涓庡綋鍓嶅瀷鍙蜂笉涓�鑷翠笉鍏佽淇敼"); + } + } + task.ToPlace = input.ToPlace; + + await wmsTaskRepository.UpdateAsync(task); + } + + /// <summary> + /// 鑾峰彇闇�瑕佹墽琛岀殑浠诲姟 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<WmsTaskDto> GetToExecuteTaskAsync(QueryTaskTypeInput input) + { + var queryInput = new GetWmsTaskInput + { + TaskStatus = WmsTaskStatus.WEIZHIXING, + }; + var whereConditions = DynamicGetQueryParams(queryInput); + + var NoStartTaskList = await wmsTaskRepository.GetTaskListAsync(whereConditions); + + + if (NoStartTaskList.Count <= 0) return null; + + var executeTaskList = NoStartTaskList.WhereIf(input.TaskType > 0, x => x.TaskType == input.TaskType).OrderBy(x => x.TaskType).ThenBy(x => x.TaskLevel).ToList(); + + var executeTask = executeTaskList.FirstOrDefault(); + if (input.OutStockHasGood) + { + executeTask = NoStartTaskList.OrderByDescending(x => x.TaskType == TaskTypeEnum.RUKU).ThenBy(x => x.TaskLevel).FirstOrDefault(); + } + + if (executeTask == null) + { + return ObjectMapper.Map<WmsTask, WmsTaskDto>(NoStartTaskList.FirstOrDefault()); + } + + if (executeTask.TaskType == TaskTypeEnum.CHUKU && input.OutStockHasGood) + { + return null; + } + + if(executeTask.TaskType == TaskTypeEnum.RUKU && !input.InStockHasGood) + { + return null; + } + + return ObjectMapper.Map<WmsTask, WmsTaskDto>(executeTask); + } + + + /// <summary> + /// 鏇存柊浠诲姟涓烘墽琛屼腑 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<WmsTaskDto> StartExecuteTaskAsync(ExcecuteTaskInput input) + { + if (string.IsNullOrEmpty(input.TaskNo)) + { + throw new UserFriendlyException("浠诲姟鍙蜂笉鑳戒负绌�"); + } + var task = await wmsTaskRepository.FindByNameAsync(input.TaskNo); + if(task == null) + { + return new WmsTaskDto(); + } + task.TaskStatus = WmsTaskStatus.ZHIXINGZHONG; + task.TaskDodeviceStatus = TaskDodeviceStatus.SrmProgress; + await wmsTaskRepository.UpdateAsync(task); + return ObjectMapper.Map<WmsTask, WmsTaskDto>(task); + } } -- Gitblit v1.9.3