using CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.OutStockDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CMS.Plugin.HIAWms.Domain.WmsTask;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.Application.Implements
{
///
/// LMES操作服务
///
public class LMesOperateAppService : CMSPluginAppService, ILMesOperateAppService
{
private readonly IWmsTaskRepository _wmsTaskRepository;
private readonly IWmsMaterialRepository _wmsMaterialRepository;
private readonly IWmsInOutStockOrderAppService _wmsInOutStockOrderAppService;
private readonly IWmsOutStockAppService _wmsOutStockOrderAppService;
private readonly IServiceProvider _serviceProvider;
public LMesOperateAppService(IWmsTaskRepository wmsTaskRepository,
IWmsMaterialRepository wmsMaterialRepository,
IWmsInOutStockOrderAppService wmsInOutStockOrderAppService,
IWmsOutStockAppService wmsOutStockOrderAppService
,
IServiceProvider serviceProvider)
{
_wmsTaskRepository = wmsTaskRepository;
_wmsMaterialRepository = wmsMaterialRepository;
_wmsInOutStockOrderAppService = wmsInOutStockOrderAppService;
_wmsOutStockOrderAppService = wmsOutStockOrderAppService;
_serviceProvider = serviceProvider;
}
///
/// lmes叫料.
///
///
///
///
public async Task> LMesCallMaterialAsync(List input)
{
if (input == null || input.Count == 0)
{
throw new UserFriendlyException("叫料参数错误");
}
//using var scope = _serviceProvider.CreateScope();
//var unitOfWorkManager = scope.ServiceProvider.GetRequiredService();
//using var uow = unitOfWorkManager.Begin(requiresNew: true);
var result = new List();
foreach (var item in input)
{
if (string.IsNullOrEmpty(item.MaterialMode))
{
throw new UserFriendlyException("叫料型号不能为空");
}
var task = await _wmsTaskRepository.QueryWmsTaskByDataIdentifierAasync(item.DataIdentifier);
if (task != null)
{
throw new UserFriendlyException($"原料标识{item.DataIdentifier}已生成任务,任务号{task.TaskNo},无需重复操作");
}
// 生成出库单
var materiaL = await _wmsMaterialRepository.FindByModelAsync(item.MaterialMode);
if (materiaL == null)
{
throw new UserFriendlyException("该型号物料信息不存在");
}
var createOrderInput = new WmsInOutStockOrderCreateDto
{
OrderType = Domain.Shared.Enums.OrderTypeEnum.PRODUCTCALL,
MaterialNo = materiaL.MaterialNo,
MaterialName = materiaL.MaterialName,
MaterialModel = item.MaterialMode,
MaterialNumber = 1,
MaterialBatch = item.MaterialMode
};
var createResult = await _wmsInOutStockOrderAppService.CreateAsync(createOrderInput);
// 叫料
var callInput = new List
{
new CallMaterialInput
{
OrderNo = createResult.OrderNo,
MaterialModel = item.MaterialMode,
MaterialNumber = 1,
MaterialNo = materiaL.MaterialNo,
MaterialName = materiaL.MaterialName,
DataIdentifier = item.DataIdentifier,
},
};
var callresult = await _wmsOutStockOrderAppService.CallMaterialAsync(callInput);
result.AddRange(callresult);
}
//await uow.SaveChangesAsync();
return result;
}
}
}