From 17c0c88cb5419351e4f0bf498e4b9535c5b39197 Mon Sep 17 00:00:00 2001 From: schangxiang@126.com <schangxiang@126.com> Date: 周日, 11 5月 2025 21:55:40 +0800 Subject: [PATCH] Merge branch 'master' of http://222.71.245.114:9086/r/HIA24016N_PipeLineDemo --- HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs | 191 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 190 insertions(+), 1 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 2366783..245278e 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs @@ -12,6 +12,14 @@ using Volo.Abp.ObjectMapping; using CMS.Plugin.HIAWms.Domain.WmsContainers; using CMS.Plugin.HIAWms.Domain.WmsPlaces; +using CMS.Plugin.HIAWms.Domain.Shared.Enums; +using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks; +using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrder; +using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrderDetail; +using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail; +using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord; +using Volo.Abp.Uow; +using Microsoft.Extensions.DependencyInjection; namespace CMS.Plugin.HIAWms.Application.Implements; @@ -23,16 +31,40 @@ private readonly IWmsTaskRepository wmsTaskRepository; private readonly IWmsContainerRepository _wmsContainerRepository; private readonly IWmsPlaceRepository _wmsPlaceRepository; + private readonly IWmsMaterialStockRepository _wmsMaterialStockRepository; + private readonly IWmsInOutStockOrderRepository _wmsInOutStockOrderRepository; + private readonly IWmsInOutStockOrderDetailRepository _wmsInOutStockOrderDetailRepository; + private readonly IWmsContainerRepository _wmsContainerRepository1; + private readonly IWmsInOutStockOrderDetailAppService _wmsInOutStockOrderDetailAppService; + private readonly IWmsInOutStockRecordAppService _wmsInOutStockRecordAppService; + private readonly IServiceProvider _serviceProvider; /// <summary> /// Initializes a new instance of the <see cref="WmsTaskAppService"/> class. /// </summary> /// <param name="WmsTaskRepository">The task job repository.</param> - public WmsTaskAppService(IWmsTaskRepository _WmsTaskRepository, IWmsContainerRepository wmsContainerRepository, IWmsPlaceRepository wmsPlaceRepository) + public WmsTaskAppService(IWmsTaskRepository _WmsTaskRepository, + IWmsContainerRepository wmsContainerRepository, + IWmsPlaceRepository wmsPlaceRepository, + IWmsMaterialStockRepository wmsMaterialStockRepository, + IWmsInOutStockOrderRepository wmsInOutStockOrderRepository, + IWmsInOutStockOrderDetailRepository wmsInOutStockOrderDetailRepository +, + IWmsContainerRepository wmsContainerRepository1, + IWmsInOutStockOrderDetailAppService wmsInOutStockOrderDetailAppService, + IWmsInOutStockRecordAppService wmsInOutStockRecordAppService, + IServiceProvider serviceProvider = null) { wmsTaskRepository = _WmsTaskRepository; _wmsContainerRepository = wmsContainerRepository; _wmsPlaceRepository = wmsPlaceRepository; + _wmsMaterialStockRepository = wmsMaterialStockRepository; + _wmsInOutStockOrderRepository = wmsInOutStockOrderRepository; + _wmsInOutStockOrderDetailRepository = wmsInOutStockOrderDetailRepository; + _wmsContainerRepository1 = wmsContainerRepository1; + _wmsInOutStockOrderDetailAppService = wmsInOutStockOrderDetailAppService; + _wmsInOutStockRecordAppService = wmsInOutStockRecordAppService; + _serviceProvider = serviceProvider; } /// <summary> @@ -484,4 +516,161 @@ return Task.CompletedTask; } + + /// <summary> + /// 浠诲姟寮哄埗瀹屾垚 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task FinishTaskAsync(WmsTaskUpdateDto input) + { + + using var scope = _serviceProvider.CreateScope(); + var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); + using var uow = unitOfWorkManager.Begin(requiresNew: true); + + var task = await wmsTaskRepository.FindByNameAsync(input.TaskNo); + if (task == null) + { + throw new UserFriendlyException("浠诲姟涓嶅瓨鍦�"); + } + if (task.TaskStatus == WmsTaskStatus.WANCHENG || task.TaskStatus == WmsTaskStatus.QUXIAO) + { + throw new UserFriendlyException("鍙栨秷鎴栬�呭畬鎴愮殑浠诲姟涓嶅厑璁告搷浣�"); + } + task.TaskStatus = WmsTaskStatus.WANCHENG; + + // 鏇存柊搴撳瓨 + 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.ContainerNo = "TP" + task.ToPlace; + + var container = await _wmsContainerRepository.FindByNameAsync(stock.ContainerNo); + if(container == null) + { + await _wmsContainerRepository.InsertAsync(new WmsContainer + { + ContainerNo = stock.ContainerNo, + ContainerStatus = ContainerStatusEnum.KUWEI, + ContainerType = ContainerTypeEnum.XUNI, + }); + } + + var oldContainer = await _wmsContainerRepository.FindByNameAsync(task.ContainerNo); + if(oldContainer != null) + { + await _wmsContainerRepository.DeleteAsync(oldContainer); + } + + if (!string.IsNullOrEmpty(task.SourceOrderNo)) + { + // 璺熸柊鍗曟嵁瀹屾垚鏁伴噺 + var orderNo = await _wmsInOutStockOrderRepository.FindByNameAsync(task.SourceOrderNo); + if(orderNo != null) + { + orderNo.CompleteNumber += 1; + orderNo.OrderStatus = OrderStatusEnum.Executing; + } + if (orderNo.MaterialNumber <= orderNo.CompleteNumber) + { + orderNo.OrderStatus = OrderStatusEnum.Finish; + } + + await _wmsInOutStockOrderRepository.UpdateAsync(orderNo); + // 璁板綍涓�鏉¤鎯� + var detail = new WmsInOutStockOrderDetailCreateDto + { + OrderNo = orderNo.OrderNo, + OrderType = orderNo.OrderType, + MaterialId = stock.MaterialId, + MaterialBatch = stock.MaterialBatch, + MaterialModel = stock.MaterialModel, + MaterialName = stock.MaterialName, + MaterialNo = stock.MaterialNo, + }; + await _wmsInOutStockOrderDetailAppService.CreateAsync(detail); + } + + // 鍑哄叆搴撹褰� + var record = new WmsInOutStockRecordCreateDto + { + TaskNo = task.TaskNo, + OrderNo = task.SourceOrderNo, + StockType = task.TaskType == TaskTypeEnum.CHUKU ? StockTypeEnum.OutBound : StockTypeEnum.InBound, + ContainerNo = task.ContainerNo, + MaterialId = stock.MaterialId, + MaterialModel= stock.MaterialModel, + MaterialName = stock.MaterialName, + MaterialNo = stock.MaterialNo, + MaterialBatch = stock.MaterialBatch, + SourcePlace = task.SourcePlace, + ToPlace = task.ToPlace, + OperateTime = DateTime.Now, + }; + await _wmsInOutStockRecordAppService.CreateAsync(record); + + await uow.SaveChangesAsync(); + await uow.CompleteAsync(); + } + + /// <summary> + /// 鍙栨秷浠诲姟 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task CancelTaskAysnc(WmsTaskUpdateDto input) + { + + using var scope = _serviceProvider.CreateScope(); + var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); + using var uow = unitOfWorkManager.Begin(requiresNew: true); + + var task = await wmsTaskRepository.FindByNameAsync(input.TaskNo); + if (task == null) + { + throw new UserFriendlyException("浠诲姟涓嶅瓨鍦�"); + } + if (task.TaskStatus == WmsTaskStatus.WANCHENG || task.TaskStatus == WmsTaskStatus.QUXIAO) + { + throw new UserFriendlyException("鍙栨秷鎴栬�呭畬鎴愮殑浠诲姟涓嶅厑璁告搷浣�"); + } + task.TaskStatus = WmsTaskStatus.QUXIAO; + + // 鏇存柊搴撳瓨 + 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(); + await _wmsMaterialStockRepository.DeleteAsync(stock); + + if (!string.IsNullOrEmpty(task.SourceOrderNo)) + { + // 璺熸柊鍗曟嵁瀹屾垚鏁伴噺 + var orderNo = await _wmsInOutStockOrderRepository.FindByNameAsync(task.SourceOrderNo); + if(orderNo != null) + { + orderNo.CompleteNumber -= 1; + orderNo.OrderStatus = OrderStatusEnum.NoStart; + } + if (orderNo.CompleteNumber>0) + { + orderNo.OrderStatus = OrderStatusEnum.Executing; + } + + await _wmsInOutStockOrderRepository.UpdateAsync(orderNo); + + } + + await uow.SaveChangesAsync(); + await uow.CompleteAsync(); + } } -- Gitblit v1.9.3