|
@ -26,20 +26,20 @@ public class ThirdLocationRequestEventHandler |
|
|
{ |
|
|
{ |
|
|
private readonly IThirdLocationJobAppService _thirdLocationJobAppService; |
|
|
private readonly IThirdLocationJobAppService _thirdLocationJobAppService; |
|
|
private readonly IProductionLineAppService _productionLineAppService; |
|
|
private readonly IProductionLineAppService _productionLineAppService; |
|
|
private readonly IThirdLocationRequestManager _assembleRequestManager; |
|
|
private readonly IThirdLocationRequestManager _thirdLocationRequestManager; |
|
|
private readonly ILocationAppService _locationAppService; |
|
|
private readonly ILocationAppService _locationAppService; |
|
|
private readonly IBalanceAppService _balanceAppService; |
|
|
private readonly IBalanceAppService _balanceAppService; |
|
|
|
|
|
|
|
|
public ThirdLocationRequestEventHandler( |
|
|
public ThirdLocationRequestEventHandler( |
|
|
IThirdLocationJobAppService thirdLocationJobAppService |
|
|
IThirdLocationJobAppService thirdLocationJobAppService |
|
|
, IProductionLineAppService productionLineAppService |
|
|
, IProductionLineAppService productionLineAppService |
|
|
, IThirdLocationRequestManager assembleRequestManager |
|
|
, IThirdLocationRequestManager thirdLocationRequestManager |
|
|
, ILocationAppService locationAppService |
|
|
, ILocationAppService locationAppService |
|
|
, IBalanceAppService balanceAppService) |
|
|
, IBalanceAppService balanceAppService) |
|
|
{ |
|
|
{ |
|
|
_thirdLocationJobAppService = thirdLocationJobAppService; |
|
|
_thirdLocationJobAppService = thirdLocationJobAppService; |
|
|
_productionLineAppService = productionLineAppService; |
|
|
_productionLineAppService = productionLineAppService; |
|
|
_assembleRequestManager = assembleRequestManager; |
|
|
_thirdLocationRequestManager = thirdLocationRequestManager; |
|
|
_locationAppService = locationAppService; |
|
|
_locationAppService = locationAppService; |
|
|
_balanceAppService = balanceAppService; |
|
|
_balanceAppService = balanceAppService; |
|
|
} |
|
|
} |
|
@ -54,7 +54,7 @@ public class ThirdLocationRequestEventHandler |
|
|
|
|
|
|
|
|
//if (entity.AutoSubmit)
|
|
|
//if (entity.AutoSubmit)
|
|
|
//{
|
|
|
//{
|
|
|
// await _assembleRequestManager.SubmitAsync(entity).ConfigureAwait(false);
|
|
|
// await _thirdLocationRequestManager.SubmitAsync(entity).ConfigureAwait(false);
|
|
|
//}
|
|
|
//}
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -69,7 +69,7 @@ public class ThirdLocationRequestEventHandler |
|
|
{ |
|
|
{ |
|
|
if (entity.AutoSubmit) |
|
|
if (entity.AutoSubmit) |
|
|
{ |
|
|
{ |
|
|
await _assembleRequestManager.SubmitAsync(entity).ConfigureAwait(false); |
|
|
await _thirdLocationRequestManager.SubmitAsync(entity).ConfigureAwait(false); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
@ -116,23 +116,23 @@ public class ThirdLocationRequestEventHandler |
|
|
#region 私有
|
|
|
#region 私有
|
|
|
|
|
|
|
|
|
private async Task<List<ThirdLocationJobEditInput>> BuildThirdLocationJobAsync |
|
|
private async Task<List<ThirdLocationJobEditInput>> BuildThirdLocationJobAsync |
|
|
(ThirdLocationRequest assembleRequest) |
|
|
(ThirdLocationRequest thirdLocationRequest) |
|
|
{ |
|
|
{ |
|
|
var jobs = new List<ThirdLocationJobEditInput>(); |
|
|
var jobs = new List<ThirdLocationJobEditInput>(); |
|
|
|
|
|
|
|
|
var transactionType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);//库存事务
|
|
|
var transactionType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);//库存事务
|
|
|
|
|
|
|
|
|
var toLocationCodes = assembleRequest.Details.Select(p => p.ToLocationCode).Distinct().ToList();//所有发送库位的集合
|
|
|
var toLocationCodes = thirdLocationRequest.Details.Select(p => p.ToLocationCode).Distinct().ToList();//所有发送库位的集合
|
|
|
var toLocations = await _locationAppService.GetByCodesAsync(toLocationCodes).ConfigureAwait(false);//所有库位的集合
|
|
|
var toLocations = await _locationAppService.GetByCodesAsync(toLocationCodes).ConfigureAwait(false);//所有库位的集合
|
|
|
|
|
|
|
|
|
var assembleRequestDetails = assembleRequest.Details.Where(p => p.ToBeIssuedQty > 0);//所有还没发送物品的集合
|
|
|
var thirdLocationRequestDetails = thirdLocationRequest.Details.Where(p => p.ToBeIssuedQty > 0);//所有还没发送物品的集合
|
|
|
foreach (var assembleRequestDetail in assembleRequestDetails)//如果有还有剩余未叫料的数量 则创建新的任务
|
|
|
foreach (var thirdLocationRequestDetail in thirdLocationRequestDetails)//如果有还有剩余未叫料的数量 则创建新的任务
|
|
|
{ |
|
|
{ |
|
|
var toLocation = toLocations.FirstOrDefault(p => p.Code == assembleRequestDetail.ToLocationCode);//判断目标库位是否存在
|
|
|
var toLocation = toLocations.FirstOrDefault(p => p.Code == thirdLocationRequestDetail.ToLocationCode);//判断目标库位是否存在
|
|
|
Check.NotNull(toLocation, "库位代码", $"库位 {assembleRequestDetail.ToLocationCode} 不存在"); |
|
|
Check.NotNull(toLocation, "库位代码", $"库位 {thirdLocationRequestDetail.ToLocationCode} 不存在"); |
|
|
|
|
|
|
|
|
//创建详情
|
|
|
//创建详情
|
|
|
var jobDetails = await BuildThirdLocationJobDetailInputsAsync(assembleRequest, assembleRequestDetail, transactionType, toLocation.LocationGroupCode).ConfigureAwait(false); |
|
|
var jobDetails = await BuildThirdLocationJobDetailInputsAsync(thirdLocationRequest, thirdLocationRequestDetail, transactionType, toLocation.LocationGroupCode).ConfigureAwait(false); |
|
|
if (!jobDetails.Any()) |
|
|
if (!jobDetails.Any()) |
|
|
{ |
|
|
{ |
|
|
continue; |
|
|
continue; |
|
@ -141,22 +141,22 @@ public class ThirdLocationRequestEventHandler |
|
|
var fromLocationCode = jobDetails[0].RecommendFromLocationCode; |
|
|
var fromLocationCode = jobDetails[0].RecommendFromLocationCode; |
|
|
var fromLocation = await _locationAppService.GetByCodeAsync(fromLocationCode).ConfigureAwait(false); |
|
|
var fromLocation = await _locationAppService.GetByCodeAsync(fromLocationCode).ConfigureAwait(false); |
|
|
var job = jobs.FirstOrDefault(p => p.WorkGroupCode == fromLocation?.WorkGroupCode); |
|
|
var job = jobs.FirstOrDefault(p => p.WorkGroupCode == fromLocation?.WorkGroupCode); |
|
|
if (job == null || job.Details.Any(p => p.ToLocationCode != assembleRequestDetail.ToLocationCode)) |
|
|
if (job == null || job.Details.Any(p => p.ToLocationCode != thirdLocationRequestDetail.ToLocationCode)) |
|
|
{ |
|
|
{ |
|
|
job = BuildThirdLocationJobCreateInput(assembleRequest, fromLocation); |
|
|
job = BuildThirdLocationJobCreateInput(thirdLocationRequest, fromLocation); |
|
|
jobs.Add(job); |
|
|
jobs.Add(job); |
|
|
} |
|
|
} |
|
|
job.Details.AddRange(jobDetails); |
|
|
job.Details.AddRange(jobDetails); |
|
|
if (assembleRequestDetail.ToBeIssuedQty < 0) |
|
|
if (thirdLocationRequestDetail.ToBeIssuedQty < 0) |
|
|
{ |
|
|
{ |
|
|
assembleRequestDetail.Status = EnumStatus.Close; |
|
|
thirdLocationRequestDetail.Status = EnumStatus.Close; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
jobs = jobs.Where(p => p.Details.Any()).ToList(); |
|
|
jobs = jobs.Where(p => p.Details.Any()).ToList(); |
|
|
|
|
|
|
|
|
var openRequestDetails = |
|
|
var openRequestDetails = |
|
|
assembleRequest.Details.Where(p => p.Status != EnumStatus.Close).ToList(); |
|
|
thirdLocationRequest.Details.Where(p => p.Status != EnumStatus.Close).ToList(); |
|
|
|
|
|
|
|
|
if (!openRequestDetails.Any()) |
|
|
if (!openRequestDetails.Any()) |
|
|
{ |
|
|
{ |
|
@ -168,7 +168,7 @@ public class ThirdLocationRequestEventHandler |
|
|
if (enableMultipleCreateThirdLocationJob) |
|
|
if (enableMultipleCreateThirdLocationJob) |
|
|
{ |
|
|
{ |
|
|
|
|
|
|
|
|
//assembleRequest.Partial();
|
|
|
//thirdLocationRequest.Partial();
|
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
@ -182,34 +182,34 @@ public class ThirdLocationRequestEventHandler |
|
|
return jobs; |
|
|
return jobs; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private ThirdLocationJobEditInput BuildThirdLocationJobCreateInput(ThirdLocationRequest assembleRequest, LocationDTO fromLocation) |
|
|
private ThirdLocationJobEditInput BuildThirdLocationJobCreateInput(ThirdLocationRequest thirdLocationRequest, LocationDTO fromLocation) |
|
|
{ |
|
|
{ |
|
|
ThirdLocationJobEditInput job; |
|
|
ThirdLocationJobEditInput job; |
|
|
job = ObjectMapper.Map<ThirdLocationRequest, ThirdLocationJobEditInput>(assembleRequest); |
|
|
job = ObjectMapper.Map<ThirdLocationRequest, ThirdLocationJobEditInput>(thirdLocationRequest); |
|
|
job.JobType = EnumJobType.IssueJob; |
|
|
job.JobType = EnumJobType.IssueJob; |
|
|
job.JobStatus = EnumJobStatus.Open; |
|
|
job.JobStatus = EnumJobStatus.Open; |
|
|
job.WorkGroupCode = fromLocation.WorkGroupCode; |
|
|
job.WorkGroupCode = fromLocation.WorkGroupCode; |
|
|
job.WarehouseCode = fromLocation.WarehouseCode; |
|
|
job.WarehouseCode = fromLocation.WarehouseCode; |
|
|
job.ProdLine = fromLocation.LocationGroupCode; |
|
|
job.ProdLine = fromLocation.LocationGroupCode; |
|
|
job.Worker = assembleRequest.Worker; |
|
|
job.Worker = thirdLocationRequest.Worker; |
|
|
if (string.IsNullOrEmpty(job.Worker)) |
|
|
if (string.IsNullOrEmpty(job.Worker)) |
|
|
{ |
|
|
{ |
|
|
job.Worker = "admin"; |
|
|
job.Worker = "admin"; |
|
|
} |
|
|
} |
|
|
job.RequestNumber = assembleRequest.Number; |
|
|
job.RequestNumber = thirdLocationRequest.Number; |
|
|
return job; |
|
|
return job; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private async Task<List<ThirdLocationJobDetailInput>> BuildThirdLocationJobDetailInputsAsync(ThirdLocationRequest assembleRequest, |
|
|
private async Task<List<ThirdLocationJobDetailInput>> BuildThirdLocationJobDetailInputsAsync(ThirdLocationRequest thirdLocationRequest, |
|
|
ThirdLocationRequestDetail assembleRequestDetail, TransactionTypeDTO transactionType, string toLocationGroupCode) |
|
|
ThirdLocationRequestDetail thirdLocationRequestDetail, TransactionTypeDTO transactionType, string toLocationGroupCode) |
|
|
{ |
|
|
{ |
|
|
var jobDetails = new List<ThirdLocationJobDetailInput>(); |
|
|
var jobDetails = new List<ThirdLocationJobDetailInput>(); |
|
|
var input = new RecommendBalanceRequestInput() |
|
|
var input = new RecommendBalanceRequestInput() |
|
|
{ |
|
|
{ |
|
|
ItemCode = assembleRequestDetail.ItemCode, |
|
|
ItemCode = thirdLocationRequestDetail.ItemCode, |
|
|
Qty = assembleRequestDetail.ToBeIssuedQty, |
|
|
Qty = thirdLocationRequestDetail.ToBeIssuedQty, |
|
|
LocationTypes = transactionType.OutLocationTypes, |
|
|
LocationTypes = transactionType.OutLocationTypes, |
|
|
LocationAreas = new List<string> { assembleRequestDetail.FromLocationArea }, |
|
|
LocationAreas = new List<string> { thirdLocationRequestDetail.FromLocationArea }, |
|
|
Statuses = transactionType.OutInventoryStatuses, |
|
|
Statuses = transactionType.OutInventoryStatuses, |
|
|
}; |
|
|
}; |
|
|
//获取推荐库存
|
|
|
//获取推荐库存
|
|
@ -220,8 +220,8 @@ public class ThirdLocationRequestEventHandler |
|
|
foreach (var recommend in recommendList) |
|
|
foreach (var recommend in recommendList) |
|
|
{ |
|
|
{ |
|
|
//拿走需求量
|
|
|
//拿走需求量
|
|
|
var detail = await BuildThirdLocationJobDetailAsync(assembleRequestDetail, recommend, toLocationGroupCode).ConfigureAwait(false); |
|
|
var detail = await BuildThirdLocationJobDetailAsync(thirdLocationRequestDetail, recommend, toLocationGroupCode).ConfigureAwait(false); |
|
|
if (assembleRequest.UseOnTheWayLocation) |
|
|
if (thirdLocationRequest.UseOnTheWayLocation) |
|
|
{ |
|
|
{ |
|
|
//获取在途库
|
|
|
//获取在途库
|
|
|
var locationDto = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false); |
|
|
var locationDto = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false); |
|
@ -230,26 +230,26 @@ public class ThirdLocationRequestEventHandler |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
jobDetails.Add(detail); |
|
|
jobDetails.Add(detail); |
|
|
assembleRequestDetail.IssuedQty += recommend.Qty; |
|
|
thirdLocationRequestDetail.IssuedQty += recommend.Qty; |
|
|
|
|
|
|
|
|
//await _assembleRequestManager.UpdateDetailsAsync(assembleRequest).ConfigureAwait(false);
|
|
|
//await _thirdLocationRequestManager.UpdateDetailsAsync(thirdLocationRequest).ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
return jobDetails; |
|
|
return jobDetails; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private async Task<ThirdLocationJobDetailInput> BuildThirdLocationJobDetailAsync(ThirdLocationRequestDetail assembleRequestDetail, BalanceDTO balance, string toLocationGroupCode) |
|
|
private async Task<ThirdLocationJobDetailInput> BuildThirdLocationJobDetailAsync(ThirdLocationRequestDetail thirdLocationRequestDetail, BalanceDTO balance, string toLocationGroupCode) |
|
|
{ |
|
|
{ |
|
|
|
|
|
|
|
|
//ProductionLineDTO prodLine = await _productionLineAppService.GetByLocationGroupCodeAsync(toLocationGroupCode).ConfigureAwait(false);
|
|
|
//ProductionLineDTO prodLine = await _productionLineAppService.GetByLocationGroupCodeAsync(toLocationGroupCode).ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
var detail = ObjectMapper.Map<BalanceDTO, ThirdLocationJobDetailInput>(balance); |
|
|
var detail = ObjectMapper.Map<BalanceDTO, ThirdLocationJobDetailInput>(balance); |
|
|
detail.RequestLocationCode = assembleRequestDetail.ToLocationCode; |
|
|
detail.RequestLocationCode = thirdLocationRequestDetail.ToLocationCode; |
|
|
detail.WorkStation = assembleRequestDetail.WorkStation; |
|
|
detail.WorkStation = thirdLocationRequestDetail.WorkStation; |
|
|
detail.ExpiredTime = assembleRequestDetail.ExpiredTime; |
|
|
detail.ExpiredTime = thirdLocationRequestDetail.ExpiredTime; |
|
|
detail.PositionCode = assembleRequestDetail.PositionCode; |
|
|
detail.PositionCode = thirdLocationRequestDetail.PositionCode; |
|
|
detail.RecommendType = assembleRequestDetail.RecommendType; |
|
|
detail.RecommendType = thirdLocationRequestDetail.RecommendType; |
|
|
|
|
|
|
|
|
detail.RecommendPackingCode = balance.PackingCode; |
|
|
detail.RecommendPackingCode = balance.PackingCode; |
|
|
detail.RecommendContainerCode = balance.ContainerCode; |
|
|
detail.RecommendContainerCode = balance.ContainerCode; |
|
@ -267,10 +267,10 @@ public class ThirdLocationRequestEventHandler |
|
|
detail.RecommendQty = balance.Qty; |
|
|
detail.RecommendQty = balance.Qty; |
|
|
detail.Uom = balance.Uom; |
|
|
detail.Uom = balance.Uom; |
|
|
|
|
|
|
|
|
detail.ToLocationCode = assembleRequestDetail.ToLocationCode; |
|
|
detail.ToLocationCode = thirdLocationRequestDetail.ToLocationCode; |
|
|
detail.ToLocationErpCode = assembleRequestDetail.ToLocationErpCode; |
|
|
detail.ToLocationErpCode = thirdLocationRequestDetail.ToLocationErpCode; |
|
|
detail.ToLocationArea = assembleRequestDetail.ToLocationArea; |
|
|
detail.ToLocationArea = thirdLocationRequestDetail.ToLocationArea; |
|
|
detail.ToWarehouseCode = assembleRequestDetail.ToWarehouseCode; |
|
|
detail.ToWarehouseCode = thirdLocationRequestDetail.ToWarehouseCode; |
|
|
|
|
|
|
|
|
//detail.ProdLine = prodLine == null ? toLocationGroupCode : prodLine.Code;
|
|
|
//detail.ProdLine = prodLine == null ? toLocationGroupCode : prodLine.Code;
|
|
|
detail.ProdLine = toLocationGroupCode; |
|
|
detail.ProdLine = toLocationGroupCode; |
|
|