| | |
| | | using 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; |
| | |
| | | /// </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); |
| | | } |
| | | } |
| | | } |