From 14f9c8378bde7d9a8d8f1fcc393e0e8d49eced82 Mon Sep 17 00:00:00 2001 From: zs <zhousong@weben-smart.com> Date: 周五, 09 5月 2025 17:44:29 +0800 Subject: [PATCH] 查找空库位,查找库存 --- HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAssService.cs | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 156 insertions(+), 5 deletions(-) diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAssService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAssService.cs index 5be0b4f..097119d 100644 --- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAssService.cs +++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAssService.cs @@ -1,4 +1,15 @@ 锘縰sing CMS.Plugin.HIAWms.Application.Contracts.Dtos.BindInstockDto; +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.WmsContainerPlace; +using CMS.Plugin.HIAWms.Domain.WmsContainers; +using CMS.Plugin.HIAWms.Domain.WmsMaterialContainer; +using CMS.Plugin.HIAWms.Domain.WmsMaterialInfos; +using CMS.Plugin.HIAWms.Domain.WmsMaterials; +using CMS.Plugin.HIAWms.Domain.WmsPlaces; +using CMS.Plugin.HIAWms.Domain.WmsTask; using System; using System.Collections.Generic; using System.Linq; @@ -13,21 +24,161 @@ /// </summary> public class WmsBindInStockAssService : CMSPluginAppService { - public async Task BindMaterialContaienrAsync(BindMaterialInput input) + private readonly IWmsMaterialRepository _wmsMaterialRepository; + private readonly IWmsContainerRepository _wmsContainerRepository; + private readonly IWmsPlaceRepository _wmsPlaceRepository; + private readonly IWmsMaterialContainerRepository _wmsMaterialContainerRepository; + private readonly IWmsContainerPlaceRepository _wmsContainerPlaceRepository; + private readonly IWmsMaterialInfoRepository _wmsMaterialInfoRepository; + private readonly IWmsMaterialStockAppService _wmsMaterialStockAppService; + private readonly IWmsCommonAppService _wmsCommonAppService; + private readonly IWmsTaskRepository _wmsTaskRepository; + private readonly IWmsTaskAppService _wmsTaskAppService; + + public WmsBindInStockAssService(IWmsMaterialRepository wmsMaterialRepository, + IWmsContainerRepository wmsContainerRepository, + IWmsPlaceRepository wmsPlaceRepository +, + IWmsMaterialContainerRepository wmsMaterialContainerRepository, + IWmsContainerPlaceRepository wmsContainerPlaceRepository, + IWmsMaterialInfoRepository wmsMaterialInfoRepository, + IWmsMaterialStockAppService wmsMaterialStockAppService, + IWmsCommonAppService wmsCommonAppService, + IWmsTaskRepository wmsTaskRepository, + IWmsTaskAppService wmsTaskAppService) + { + _wmsMaterialRepository = wmsMaterialRepository; + _wmsContainerRepository = wmsContainerRepository; + _wmsPlaceRepository = wmsPlaceRepository; + _wmsMaterialContainerRepository = wmsMaterialContainerRepository; + _wmsContainerPlaceRepository = wmsContainerPlaceRepository; + _wmsMaterialInfoRepository = wmsMaterialInfoRepository; + _wmsMaterialStockAppService = wmsMaterialStockAppService; + _wmsCommonAppService = wmsCommonAppService; + _wmsTaskRepository = wmsTaskRepository; + _wmsTaskAppService = wmsTaskAppService; + } + + public async Task BindMaterialContaienrAsync(BindInstockInput input) { if (string.IsNullOrEmpty(input.MaterialModel)) { throw new UserFriendlyException("璇烽�夋嫨搴撲綅缂栧彿"); } if (string.IsNullOrEmpty(input.MaterialBatch)) { throw new UserFriendlyException("璇疯緭鍏ユ壒娆″彿"); } - if (input.MaterialStockNumber<=0) { throw new UserFriendlyException("鍏ュ簱鏁伴噺蹇呴』澶т簬0"); } + if (input.StockNumber <= 0) { throw new UserFriendlyException("鍏ュ簱鏁伴噺蹇呴』澶т簬0"); } + #region 搴熷純 + //string containerNo = DateTime.Now.ToString("yyMMddHHmmss") + new Random(Guid.NewGuid().GetHashCode()).Next(100, 9999).ToString(); + //// 5. 鍒涘缓鎵樼洏 + //var container = new WmsContainer + //{ + // ContainerNo = containerNo, + // ContainerType = Domain.Shared.Enums.ContainerTypeEnum.XUNI, + // ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.ZUPANG, + //}; + //await _wmsContainerRepository.InsertAsync(container); + //var materialContainerList = new List<WmsMaterialContainer>(); + //var materialInfoList = new List<WmsMaterialInfo>(); + //for (int i = 0; i < input.MaterialStockNumber; i++) + //{ + // string materialId = Guid.NewGuid().ToString("N"); + // var materialContainer = new WmsMaterialContainer + // { + // MaterialId = materialId, + // ContainerNo = containerNo, + // }; + // materialContainerList.Add(materialContainer); + + // var materialInfo = new WmsMaterialInfo + // { + + // }; + // materialInfoList.Add(materialInfo); + //} + + //await _wmsMaterialContainerRepository.InsertManyAsync(materialContainerList); + //await _wmsMaterialInfoRepository.InsertManyAsync(materialInfoList); + #endregion + + var material = await _wmsMaterialRepository.FindByModelAsync(input.MaterialModel); + if (material == null) + { + throw new UserFriendlyException($"鐗╂枡鍨嬪彿 {input.MaterialModel} 涓嶅瓨鍦紒"); + } + + // 5. 鍒涘缓鎵樼洏 + var containerNo = input.ContainerNo; + if (string.IsNullOrEmpty(containerNo)) + { + containerNo = DateTime.Now.ToString("yyMMddHHmmss") + new Random(Guid.NewGuid().GetHashCode()).Next(100, 9999).ToString(); + } + var container = new WmsContainer + { + ContainerNo = containerNo, + ContainerType = Domain.Shared.Enums.ContainerTypeEnum.XUNI, + ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.ZUPANG, + }; + await _wmsContainerRepository.InsertAsync(container); + + var materialStock = new WmsMaterialStockCreateDto + { + MaterialNo = material.MaterialNo, + MaterialName = material.MaterialName, + MaterialBatch = input.MaterialBatch, + StockNumber = input.StockNumber, + CheckStatus = Domain.Shared.Enums.MaterialCheckStatusEnum.HEGE, + IsLock = Domain.Shared.Enums.YesNoEnum.N, + PlaceNo = input.PlaceNo, + ContainerNo = containerNo, + EmptyContainer = Domain.Shared.Enums.YesNoEnum.N, + }; + await _wmsMaterialStockAppService.CreateAsync(materialStock); } + + /// <summary> + /// 缁勭洏鍏ュ簱 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> public async Task BindInStockAsync(BindInstockInput input) { - if(string.IsNullOrEmpty(input.PlaceNo)) { throw new UserFriendlyException("璇烽�夋嫨搴撲綅缂栧彿"); } + if (string.IsNullOrEmpty(input.PlaceNo)) { throw new UserFriendlyException("璇烽�夋嫨搴撲綅缂栧彿"); } - var bindInput = ObjectMapper.Map<BindInstockInput, BindMaterialInput>(input); - await BindMaterialContaienrAsync(bindInput); + input.ContainerNo = DateTime.Now.ToString("yyMMddHHmmss") + new Random(Guid.NewGuid().GetHashCode()).Next(100, 9999).ToString(); + await BindMaterialContaienrAsync(input); + + // 鐢熸垚浠诲姟 + var plactDict = await _wmsCommonAppService.FindAvailablePlacesAsync(input.MaterialNo, input.StockNumber); + var taskList = new List<WmsTask>(); + foreach (var kvp in plactDict) + { + var place = kvp.Key; // WmsPlace瀵硅薄 + var quantity = kvp.Value; // 鍒嗛厤鏁伴噺 + + for (int i = 0; i < quantity; i++) + { + var task = new WmsTask + { + TaskNo = $"RK_{DateTime.Now:yyyyMMddHHmmss}_{Guid.NewGuid().ToString("N").Substring(0, 6)}", + ContainerNo = input.ContainerNo, + SourcePlace = input.PlaceNo, + ToPlace = place.PlaceNo, + TaskType = TaskTypeEnum.RUKU, + SonTaskType = SonTaskTypeEnum.RGRUKU, + TaskStatus = WmsTaskStatus.WEIZHIXING, + TaskLevel = 999, + Aisle = 1, + DodeviceId = 0, + TaskDodeviceStatus = TaskDodeviceStatus.SrmNoStart, + IsNextTask = (int)YesNoEnum.Y, + IsRead = true, + MutableParam1 = input.MaterialModel, + }; + taskList.Add(task); + } + } + await _wmsTaskRepository.InsertManyAsync(taskList); } } } -- Gitblit v1.9.3