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;
|
using System.Text;
|
using System.Threading.Tasks;
|
using Volo.Abp;
|
|
namespace CMS.Plugin.HIAWms.Application.Implements
|
{
|
/// <summary>
|
/// 组盘入库
|
/// </summary>
|
public class WmsBindInStockAssService : CMSPluginAppService
|
{
|
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.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("请选择库位编号"); }
|
|
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);
|
}
|
}
|
}
|