From a88c5bf8607a44e88604f8168459a90f64b0d696 Mon Sep 17 00:00:00 2001 From: song zhou <1759742460@qq.com> Date: 周日, 18 5月 2025 19:45:25 +0800 Subject: [PATCH] 返回值 --- HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs | 483 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 426 insertions(+), 57 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 a5ffc7b..fdb8c6f 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs @@ -1,8 +1,8 @@ using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask; using CMS.Plugin.HIAWms.Application.Contracts.Services; using CMS.Plugin.HIAWms.Domain.Shared; -using CMS.Plugin.HIAWms.Domain.WmsTask; using CmsQueryExtensions; +using CMS.Plugin.HIAWms.Domain.WmsTask; using CmsQueryExtensions.Extension; using System.Linq.Expressions; using Volo.Abp; @@ -10,27 +10,67 @@ using Volo.Abp.Data; using Volo.Abp.ObjectExtending; 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; +using NPOI.SS.Formula.Functions; +using System.Collections.Generic; namespace CMS.Plugin.HIAWms.Application.Implements; /// <summary> -/// Wms浠诲姟绠$悊琛ㄥ簲鐢ㄦ湇鍔� +/// Wms浠诲姟绠$悊搴旂敤鏈嶅姟 /// </summary> public class WmsTaskAppService : CMSPluginAppService, IWmsTaskAppService { 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) + 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> - /// 鑾峰彇鎸囧畾Wms浠诲姟绠$悊琛� + /// 鑾峰彇鎸囧畾Wms浠诲姟绠$悊 /// </summary> /// <param name="id"></param> /// <returns></returns> @@ -40,7 +80,7 @@ } /// <summary> - /// 鍒嗛〉鑾峰彇Wms浠诲姟绠$悊琛� + /// 鍒嗛〉鑾峰彇Wms浠诲姟绠$悊 /// </summary> /// <param name="input"></param> /// <returns></returns> @@ -90,7 +130,7 @@ } /// <summary> - /// 鏂板缓Wms浠诲姟绠$悊琛� + /// 鏂板缓Wms浠诲姟绠$悊 /// </summary> /// <param name="input"></param> /// <returns></returns> @@ -104,6 +144,24 @@ { throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.TaskNo]); } + // 鏍¢獙鎵樼洏鏄惁瀛樺湪 + var existContainer = await _wmsContainerRepository.NameExistAsync(input.ContainerNo); + if (existContainer) + { + throw new UserFriendlyException("鎵樼洏涓嶅瓨鍦紝璇峰厛娣诲姞鎵樼洏"); + } + // 鏍¢獙鐗╂枡鏄惁瀛樺湪 + var existSourcePlace = await _wmsPlaceRepository.NameExistAsync(input.SourcePlace); + if (existSourcePlace) + { + throw new UserFriendlyException("璧峰搴撲綅涓嶅瓨鍦紝璇峰厛娣诲姞搴撲綅"); + } + //鏍¢獙搴撲綅鏄惁瀛樺湪 + var existToPlace = await _wmsPlaceRepository.NameExistAsync(input.ToPlace); + if (existToPlace) + { + throw new UserFriendlyException("鐩爣搴撲綅涓嶅瓨鍦紝璇峰厛娣诲姞搴撲綅"); + } var maxSort = await wmsTaskRepository.GetMaxSortAsync(); var sort = input.Sort ?? maxSort; @@ -111,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); @@ -123,7 +182,7 @@ } /// <summary> - /// 鏇存柊Wms浠诲姟绠$悊琛� + /// 鏇存柊Wms浠诲姟绠$悊 /// </summary> /// <param name="id"></param> /// <param name="input"></param> @@ -141,28 +200,32 @@ } updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); + if (input.TaskStatus == Domain.Shared.Enums.WmsTaskStatus.WANCHENG || input.TaskStatus == Domain.Shared.Enums.WmsTaskStatus.QUXIAO) + { + throw new UserFriendlyException("瀹屾垚鎴栬�呭彇娑堢殑浠诲姟涓嶅厑璁告洿鏀�"); + } + input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None); - updateObj.Aisle = input.Aisle; + updateObj.TaskNo = input.TaskNo; + updateObj.TaskType = input.TaskType; + updateObj.TaskLevel = input.TaskLevel; + updateObj.TaskStatus = input.TaskStatus; updateObj.ContainerNo = input.ContainerNo; + updateObj.SourcePlace = input.SourcePlace; + updateObj.ToPlace = input.ToPlace; + updateObj.Aisle = input.Aisle; updateObj.DodeviceId = input.DodeviceId; updateObj.Dodevicetype = input.Dodevicetype; - updateObj.IsDisabled = input.IsDisabled; - updateObj.IsNextTask = input.IsNextTask; + updateObj.TaskDodeviceStatus = input.TaskDodeviceStatus; updateObj.IsRead = input.IsRead; + updateObj.SonTaskType = input.SonTaskType; + updateObj.SourceOrderNo = input.SourceOrderNo; + updateObj.IsNextTask = input.IsNextTask; updateObj.MutableParam1 = input.MutableParam1; updateObj.MutableParam2 = input.MutableParam2; updateObj.MutableParam3 = input.MutableParam3; - updateObj.SonTaskType = input.SonTaskType; - updateObj.SourceOrderNo = input.SourceOrderNo; - updateObj.SourcePlace = input.SourcePlace; - updateObj.TaskDodeviceStatus = input.TaskDodeviceStatus; - updateObj.TaskLevel = input.TaskLevel; - updateObj.TaskNo = input.TaskNo; - updateObj.TaskStatus = input.TaskStatus; - updateObj.TaskType = input.TaskType; - updateObj.ToPlace = input.ToPlace; - + updateObj.IsDisabled = input.IsDisabled; await wmsTaskRepository.UpdateAsync(updateObj); @@ -170,7 +233,7 @@ } /// <summary> - /// 鍏嬮殕Wms浠诲姟绠$悊琛� + /// 鍏嬮殕Wms浠诲姟绠$悊 /// </summary> /// <param name="ids"></param> /// <returns></returns> @@ -210,7 +273,7 @@ } /// <summary> - /// 鍒犻櫎鍗曚釜Wms浠诲姟绠$悊琛� + /// 鍒犻櫎鍗曚釜Wms浠诲姟绠$悊 /// </summary> /// <param name="id"></param> /// <returns></returns> @@ -220,7 +283,7 @@ } /// <summary> - /// 鍒犻櫎澶氫釜Wms浠诲姟绠$悊琛� + /// 鍒犻櫎澶氫釜Wms浠诲姟绠$悊 /// </summary> /// <param name="ids"></param> /// <returns></returns> @@ -233,7 +296,7 @@ } /// <summary> - /// 璋冩暣鎺掑簭Wms浠诲姟绠$悊琛� + /// 璋冩暣鎺掑簭Wms浠诲姟绠$悊 /// </summary> /// <param name="id"></param> /// <param name="sort"></param> @@ -271,7 +334,7 @@ } /// <summary> - /// 瀵煎叆Wms浠诲姟绠$悊琛� + /// 瀵煎叆Wms浠诲姟绠$悊 /// </summary> /// <param name="input"></param> /// <returns></returns> @@ -317,25 +380,25 @@ { var wmsTaskUpdateDto = new WmsTaskUpdateDto { - Aisle = impItem.Aisle, + TaskNo = impItem.TaskNo, + TaskType = impItem.TaskType, + TaskLevel = impItem.TaskLevel, + TaskStatus = impItem.TaskStatus, ContainerNo = impItem.ContainerNo, + SourcePlace = impItem.SourcePlace, + ToPlace = impItem.ToPlace, + Aisle = impItem.Aisle, DodeviceId = impItem.DodeviceId, Dodevicetype = impItem.Dodevicetype, - IsDisabled = impItem.IsDisabled, - IsNextTask = impItem.IsNextTask, + TaskDodeviceStatus = impItem.TaskDodeviceStatus, IsRead = impItem.IsRead, + SonTaskType = impItem.SonTaskType, + SourceOrderNo = impItem.SourceOrderNo, + IsNextTask = impItem.IsNextTask, MutableParam1 = impItem.MutableParam1, MutableParam2 = impItem.MutableParam2, MutableParam3 = impItem.MutableParam3, - SonTaskType = impItem.SonTaskType, - SourceOrderNo = impItem.SourceOrderNo, - SourcePlace = impItem.SourcePlace, - TaskDodeviceStatus = impItem.TaskDodeviceStatus, - TaskLevel = impItem.TaskLevel, - TaskNo = impItem.TaskNo, - TaskStatus = impItem.TaskStatus, - TaskType = impItem.TaskType, - ToPlace = impItem.ToPlace, + IsDisabled = impItem.IsDisabled, }; @@ -345,25 +408,25 @@ { var wmsTaskCreateDto = new WmsTaskCreateDto { - Aisle = impItem.Aisle, + TaskNo = impItem.TaskNo, + TaskType = impItem.TaskType, + TaskLevel = impItem.TaskLevel, + TaskStatus = impItem.TaskStatus, ContainerNo = impItem.ContainerNo, + SourcePlace = impItem.SourcePlace, + ToPlace = impItem.ToPlace, + Aisle = impItem.Aisle, DodeviceId = impItem.DodeviceId, Dodevicetype = impItem.Dodevicetype, - IsDisabled = impItem.IsDisabled, - IsNextTask = impItem.IsNextTask, + TaskDodeviceStatus = impItem.TaskDodeviceStatus, IsRead = impItem.IsRead, + SonTaskType = impItem.SonTaskType, + SourceOrderNo = impItem.SourceOrderNo, + IsNextTask = impItem.IsNextTask, MutableParam1 = impItem.MutableParam1, MutableParam2 = impItem.MutableParam2, MutableParam3 = impItem.MutableParam3, - SonTaskType = impItem.SonTaskType, - SourceOrderNo = impItem.SourceOrderNo, - SourcePlace = impItem.SourcePlace, - TaskDodeviceStatus = impItem.TaskDodeviceStatus, - TaskLevel = impItem.TaskLevel, - TaskNo = impItem.TaskNo, - TaskStatus = impItem.TaskStatus, - TaskType = impItem.TaskType, - ToPlace = impItem.ToPlace, + IsDisabled = impItem.IsDisabled, }; @@ -402,7 +465,7 @@ } /// <summary> - /// 瀵煎嚭Wms浠诲姟绠$悊琛� + /// 瀵煎嚭Wms浠诲姟绠$悊 /// </summary> /// <param name="input"></param> /// <returns></returns> @@ -431,26 +494,332 @@ ["閰嶇疆"] = ExportHelper.ConvertListToExportData(result), }; - var fileName = result.Count > 1 ? "Wms浠诲姟绠$悊琛ㄥ垪琛�" : result.Count == 1 ? result[0]?.TaskNo : "WmsTask妯$増"; + var fileName = result.Count > 1 ? "Wms浠诲姟绠$悊鍒楄〃" : result.Count == 1 ? result[0]?.TaskNo : "WmsTask妯$増"; return (sheets, fileName); } /// <summary> - /// 鏍¢獙Wms浠诲姟绠$悊琛紝褰撴柊寤烘垨鏇存柊鏃� + /// 鏍¢獙Wms浠诲姟绠$悊锛屽綋鏂板缓鎴栨洿鏂版椂 /// </summary> /// <param name="input"></param> /// <returns></returns> protected Task CheckCreateOrUpdateDtoAsync(WmsTaskCreateOrUpdateDtoBase input) { Check.NotNull(input, nameof(input)); - Check.NotNull(input.Dodevicetype, "璁惧绫诲瀷"); - Check.NotNull(input.IsRead, "WCS鏄惁鍙互璇诲彇"); - Check.NotNull(input.TaskDodeviceStatus, "璁惧浠诲姟鐘舵��"); - Check.NotNull(input.TaskLevel, "浠诲姟绛夌骇"); Check.NotNullOrWhiteSpace(input.TaskNo, "浠诲姟鍙�", 50); - Check.NotNull(input.TaskStatus, "浠诲姟鐘舵��"); Check.NotNull(input.TaskType, "浠诲姟绫诲瀷"); + Check.NotNull(input.TaskLevel, "浠诲姟绛夌骇"); + Check.NotNull(input.TaskStatus, "浠诲姟鐘舵��"); + Check.NotNull(input.Dodevicetype, "璁惧绫诲瀷"); + Check.NotNull(input.ContainerNo, "鎵樼洏鍙�"); + Check.NotNull(input.SourcePlace, "璧峰浣嶇疆"); + Check.NotNull(input.ToPlace, "鐩爣鏈煡"); + Check.NotNull(input.TaskDodeviceStatus, "璁惧浠诲姟鐘舵��"); + Check.NotNull(input.IsRead, "WCS鏄惁鍙互璇诲彇"); return Task.CompletedTask; } + + /// <summary> + /// 浠诲姟寮哄埗瀹屾垚 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + 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); + + 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; + 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) + { + 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) + { + await _wmsContainerRepository.InsertAsync(new WmsContainer + { + ContainerNo = stock.ContainerNo, + ContainerStatus = ContainerStatusEnum.KUWEI, + ContainerType = ContainerTypeEnum.XUNI, + }); + } + else + { + container.ContainerStatus = ContainerStatusEnum.KUWEI; + await _wmsContainerRepository.UpdateAsync(container); + } + + 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(); + + return ObjectMapper.Map<WmsTask, WmsTaskDto>(task); + } + + /// <summary> + /// 鍙栨秷浠诲姟 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + 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); + + 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(); + } + + /// <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 null; + } + task.TaskStatus = WmsTaskStatus.ZHIXINGZHONG; + task.TaskDodeviceStatus = TaskDodeviceStatus.SrmProgress; + await wmsTaskRepository.UpdateAsync(task); + return ObjectMapper.Map<WmsTask, WmsTaskDto>(task); + } } -- Gitblit v1.9.3