|
|
@ -29,6 +29,8 @@ using Win_in.Sfs.Wms.Store.Jobs.IssueJobs.proxy; |
|
|
|
using Win_in.Sfs.Wms.Store.Options; |
|
|
|
using Microsoft.Extensions.Logging; |
|
|
|
using Microsoft.Extensions.Options; |
|
|
|
using Volo.Abp.ObjectMapping; |
|
|
|
using NUglify.Helpers; |
|
|
|
|
|
|
|
namespace Win_in.Sfs.Wms.Store.Application; |
|
|
|
|
|
|
@ -54,10 +56,10 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase |
|
|
|
private readonly IExpectOutAppService _expectOutAppService; //
|
|
|
|
private readonly IInventoryLabelAppService _inventoryLabelAppService; |
|
|
|
private readonly IHttpClientFactory _httpClientFactory; |
|
|
|
|
|
|
|
private readonly IItemBasicAppService _itemBasicAppService; |
|
|
|
private readonly IOptions<AgvOptions> _agvOptions; |
|
|
|
|
|
|
|
private readonly ILogger<AssembleIssueJobAppService> _logger; |
|
|
|
private readonly ILogger<TransferNoteAppService> _logger; |
|
|
|
|
|
|
|
private readonly IPostionLocationAppService _postionLocationAppService; |
|
|
|
|
|
|
@ -76,6 +78,10 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase |
|
|
|
IIssueJobAppService issueJobAppService, |
|
|
|
IInventoryLabelAppService inventoryLabelAppService, |
|
|
|
IHttpClientFactory _httpClientFactory, |
|
|
|
ILogger<TransferNoteAppService> logger, |
|
|
|
IOptions<AgvOptions> agvOptions, |
|
|
|
IPostionLocationAppService postionLocationAppService, |
|
|
|
IItemBasicAppService itemBasicAppService, |
|
|
|
IExpectOutAppService expectOutAppService) : base(repository) |
|
|
|
{ |
|
|
|
_transferNoteManager = transferNoteManager; |
|
|
@ -88,6 +94,10 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase |
|
|
|
_issueJobAppService = issueJobAppService; |
|
|
|
_inventoryLabelAppService = inventoryLabelAppService; |
|
|
|
_expectOutAppService = expectOutAppService; |
|
|
|
_logger = logger; |
|
|
|
_agvOptions = agvOptions; |
|
|
|
_postionLocationAppService = postionLocationAppService; |
|
|
|
_itemBasicAppService = itemBasicAppService; |
|
|
|
} |
|
|
|
|
|
|
|
#region 东阳使用
|
|
|
@ -666,124 +676,243 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase |
|
|
|
#if DEBUG
|
|
|
|
#endif
|
|
|
|
var errors = new List<string>(); |
|
|
|
var first = request.Data.FirstOrDefault(); |
|
|
|
var job = await _repository.GetAsync(p => p.Number == first.OrderNum).ConfigureAwait(false); |
|
|
|
//var first = request.Data.FirstOrDefault();
|
|
|
|
//var job = await _repository.GetAsync(p => p.Number == first.OrderNum).ConfigureAwait(false);
|
|
|
|
var ret = new AgvResultObject |
|
|
|
{ |
|
|
|
Code = "0", |
|
|
|
Message = "OK", |
|
|
|
ReqCode = job.RequestNumber, |
|
|
|
ReqCode = "", |
|
|
|
}; |
|
|
|
// using var unitOfWork = _unitOfWorkManager.Begin();
|
|
|
|
try |
|
|
|
{ |
|
|
|
if (request.Data.Count > 0) |
|
|
|
{ |
|
|
|
var jobs = request.Data; |
|
|
|
var numbers = jobs.Select(p => p.OrderNum); |
|
|
|
var query = _repository.WithDetails() |
|
|
|
.Where(p => numbers.Contains(p.Number) ); |
|
|
|
var entities = query.ToList(); |
|
|
|
if (entities.Count == 0) |
|
|
|
{ |
|
|
|
errors.Add($"任务号{string.Join(",", numbers)}不存在!"); |
|
|
|
} |
|
|
|
var dtos = ObjectMapper.Map<List<TransferNote>, List<TransferNoteDTO>>(entities); |
|
|
|
|
|
|
|
foreach (var itm in dtos) |
|
|
|
var notes = request.Data; |
|
|
|
var numbers = notes.Select(p => p.OrderNum); |
|
|
|
foreach (var number in numbers) |
|
|
|
{ |
|
|
|
var arys = jobs.Where(p => p.OrderNum == itm.Number); |
|
|
|
var itmDetails = itm.Details.ToList(); |
|
|
|
var details = new List<TransferNoteDetailDTO>(); |
|
|
|
foreach (var detail in arys) |
|
|
|
var details= notes.Where(p => p.OrderNum == number).ToList(); |
|
|
|
TransferNoteEditInput transfer= new TransferNoteEditInput(); |
|
|
|
transfer.CallJobNumber = number; |
|
|
|
transfer.Type= EnumTransSubType.Agv_Transfer_WIP.ToString(); |
|
|
|
transfer.Worker = "Agv"; |
|
|
|
transfer.UseOnTheWayLocation = false; |
|
|
|
|
|
|
|
foreach (var detail in details) |
|
|
|
{ |
|
|
|
var fromloc = await _postionLocationAppService.GetByCodeAsync(detail.BeginPosition).ConfigureAwait(false); |
|
|
|
if (fromloc == null) |
|
|
|
{ |
|
|
|
errors.Add($"来源起始点{detail.BeginPosition}没查到"); |
|
|
|
} |
|
|
|
LocationDTO fromlocation = null; |
|
|
|
if (fromloc != null) |
|
|
|
{ |
|
|
|
fromlocation = await _locationAppService.GetByCodeAsync(fromloc.LocationCode).ConfigureAwait(false); |
|
|
|
} |
|
|
|
if (fromlocation == null) |
|
|
|
{ |
|
|
|
errors.Add($"来源起始点{detail.BeginPosition}库位没查到"); |
|
|
|
} |
|
|
|
var toloc = await _postionLocationAppService.GetByCodeAsync(detail.EndPosition) |
|
|
|
.ConfigureAwait(false); |
|
|
|
if (toloc == null) |
|
|
|
{ |
|
|
|
errors.Add($"结束点{detail.EndPosition}没查到"); |
|
|
|
} |
|
|
|
LocationDTO tolocation = null; |
|
|
|
if (toloc != null) |
|
|
|
{ |
|
|
|
tolocation = await _locationAppService.GetByCodeAsync(toloc.LocationCode).ConfigureAwait(false); |
|
|
|
} |
|
|
|
if (tolocation == null) |
|
|
|
{ |
|
|
|
errors.Add($"结束点{detail.EndPosition}库位没查到"); |
|
|
|
} |
|
|
|
var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.MatCode); |
|
|
|
if (entity == null) |
|
|
|
|
|
|
|
List<TransferNoteDetailInput> transferNoteDetailInputs = new List<TransferNoteDetailInput>(); |
|
|
|
|
|
|
|
TransferNoteDetailInput detailInput = new TransferNoteDetailInput(); |
|
|
|
var fromloc = await _postionLocationAppService.GetByCodeAsync(detail.BeginPosition).ConfigureAwait(false); |
|
|
|
if (fromloc == null) |
|
|
|
{ |
|
|
|
errors.Add($"来源起始点{detail.BeginPosition}没查到"); |
|
|
|
} |
|
|
|
LocationDTO fromlocation = null; |
|
|
|
if (fromloc != null) |
|
|
|
{ |
|
|
|
fromlocation = await _locationAppService.GetByCodeAsync(fromloc.LocationCode).ConfigureAwait(false); |
|
|
|
} |
|
|
|
if (fromlocation == null) |
|
|
|
{ |
|
|
|
errors.Add($"来源起始点{detail.BeginPosition}库位没查到"); |
|
|
|
} |
|
|
|
var toloc = await _postionLocationAppService.GetByCodeAsync(detail.EndPosition) |
|
|
|
.ConfigureAwait(false); |
|
|
|
if (toloc == null) |
|
|
|
{ |
|
|
|
errors.Add($"结束点{detail.EndPosition}没查到"); |
|
|
|
} |
|
|
|
LocationDTO tolocation = null; |
|
|
|
if (toloc != null) |
|
|
|
{ |
|
|
|
tolocation = await _locationAppService.GetByCodeAsync(toloc.LocationCode).ConfigureAwait(false); |
|
|
|
} |
|
|
|
if (tolocation == null) |
|
|
|
{ |
|
|
|
errors.Add($"结束点{detail.EndPosition}库位没查到"); |
|
|
|
} |
|
|
|
|
|
|
|
var item =await _itemBasicAppService.GetByCodeAsync(detail.MatCode).ConfigureAwait(false); |
|
|
|
if (item == null) |
|
|
|
{ |
|
|
|
errors.Add($"物料号{detail.MatCode}不在任务明细内!"); |
|
|
|
|
|
|
|
errors.Add($"零件号{detail.MatCode}的零件不存在!"); |
|
|
|
} |
|
|
|
if (errors.Count > 0) |
|
|
|
else |
|
|
|
{ |
|
|
|
return ret = new AgvResultObject() |
|
|
|
{ |
|
|
|
Code = "-1", |
|
|
|
ReqCode = "", |
|
|
|
Message = string.Join(",", errors.ToArray()) |
|
|
|
}; |
|
|
|
detailInput.ItemCode = item.Code; |
|
|
|
detailInput.Uom = item.BasicUom; |
|
|
|
detailInput.ItemName = item.Name; |
|
|
|
} |
|
|
|
var dto = new TransferNoteDetailDTO(); |
|
|
|
dto.InjectFrom(entity); |
|
|
|
dto.ToLocationCode = toloc.Code; |
|
|
|
dto.ToLocationGroup = tolocation.LocationGroupCode; |
|
|
|
dto.ToLocationArea = tolocation.AreaCode; |
|
|
|
dto.ToLocationErpCode = tolocation.ErpLocationCode; |
|
|
|
|
|
|
|
dto.ToWarehouseCode = tolocation.WarehouseCode; |
|
|
|
dto.Qty = detail.MatQty; |
|
|
|
dto.ToLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; |
|
|
|
dto.ToPackingCode = string.Empty; |
|
|
|
|
|
|
|
dto.FromWarehouseCode = fromlocation.WarehouseCode; |
|
|
|
dto.FromLocationCode = fromlocation.Code; |
|
|
|
dto.FromLocationGroup = fromlocation.LocationGroupCode; |
|
|
|
dto.FromLocationArea = fromlocation.AreaCode; |
|
|
|
dto.FromLocationErpCode = fromlocation.ErpLocationCode; |
|
|
|
dto.Qty = detail.MatQty; |
|
|
|
dto.FromLot = string.Empty; |
|
|
|
dto.FromPackingCode = string.Empty; |
|
|
|
details.Add(dto); |
|
|
|
|
|
|
|
if (errors.Count > 0) |
|
|
|
{ |
|
|
|
return ret = new AgvResultObject() |
|
|
|
{ |
|
|
|
Code = "-1", |
|
|
|
ReqCode = "", |
|
|
|
Message = string.Join(",", errors.ToArray()) |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
detailInput.ToLocationCode = tolocation.Code; |
|
|
|
detailInput.ToLocationGroup = tolocation.LocationGroupCode; |
|
|
|
detailInput.ToLocationArea = tolocation.AreaCode; |
|
|
|
detailInput.ToLocationErpCode = tolocation.ErpLocationCode; |
|
|
|
|
|
|
|
detailInput.ToWarehouseCode = tolocation.WarehouseCode; |
|
|
|
detailInput.Qty = detail.MatQty; |
|
|
|
detailInput.ToLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; |
|
|
|
detailInput.ToPackingCode = string.Empty; |
|
|
|
|
|
|
|
detailInput.FromWarehouseCode = fromlocation.WarehouseCode; |
|
|
|
detailInput.FromLocationCode = fromlocation.Code; |
|
|
|
detailInput.FromLocationGroup = fromlocation.LocationGroupCode; |
|
|
|
detailInput.FromLocationArea = fromlocation.AreaCode; |
|
|
|
detailInput.FromLocationErpCode = fromlocation.ErpLocationCode; |
|
|
|
detailInput.Qty = detail.MatQty; |
|
|
|
detailInput.FromLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; |
|
|
|
detailInput.FromPackingCode = string.Empty; |
|
|
|
|
|
|
|
transfer.Details.Add(detailInput); |
|
|
|
|
|
|
|
} |
|
|
|
await CreateAsync(transfer).ConfigureAwait(false); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//await ExecuteDetailExtAsync(itm.Id, entity.Id, dto).ConfigureAwait(false);
|
|
|
|
} |
|
|
|
|
|
|
|
if (errors.Count > 0) |
|
|
|
{ |
|
|
|
ret = new AgvResultObject() |
|
|
|
{ |
|
|
|
Code = "-1", |
|
|
|
ReqCode = "", |
|
|
|
Message = string.Join(",", errors.ToArray()) |
|
|
|
}; |
|
|
|
} |
|
|
|
itm.Worker = "AGV"; |
|
|
|
itm.Details = details; |
|
|
|
|
|
|
|
_logger.LogInformation($"{flag}接收Agv确认单据内容:" + json + "Agv任务完成"); |
|
|
|
} |
|
|
|
//var query = _repository.WithDetails()
|
|
|
|
// .Where(p => numbers.Contains(p.Number));
|
|
|
|
|
|
|
|
|
|
|
|
//var query = _repository.WithDetails()
|
|
|
|
// .Where(p => numbers.Contains(p.Number) );
|
|
|
|
//var entities = query.ToList();
|
|
|
|
//if (entities.Count == 0)
|
|
|
|
//{
|
|
|
|
// errors.Add($"任务号{string.Join(",", numbers)}不存在!");
|
|
|
|
//}
|
|
|
|
//var dtos = ObjectMapper.Map<List<TransferNote>, List<TransferNoteDTO>>(entities);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//List<TransferNote> notelist = new List<TransferNote>();
|
|
|
|
|
|
|
|
|
|
|
|
//foreach (var itm in dtos)
|
|
|
|
//{
|
|
|
|
// var note = ObjectMapper.Map<TransferNoteDTO, TransferNote>(itm);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// itm.Type = EnumTransSubType.Agv_Transfer_WIP.ToString();
|
|
|
|
// var arys = jobs.Where(p => p.OrderNum == itm.Number);
|
|
|
|
// var itmDetails = itm.Details.ToList();
|
|
|
|
// var details = new List<TransferNoteDetailDTO>();
|
|
|
|
// foreach (var detail in arys)
|
|
|
|
// {
|
|
|
|
// var fromloc = await _postionLocationAppService.GetByCodeAsync(detail.BeginPosition).ConfigureAwait(false);
|
|
|
|
// if (fromloc == null)
|
|
|
|
// {
|
|
|
|
// errors.Add($"来源起始点{detail.BeginPosition}没查到");
|
|
|
|
// }
|
|
|
|
// LocationDTO fromlocation = null;
|
|
|
|
// if (fromloc != null)
|
|
|
|
// {
|
|
|
|
// fromlocation = await _locationAppService.GetByCodeAsync(fromloc.LocationCode).ConfigureAwait(false);
|
|
|
|
// }
|
|
|
|
// if (fromlocation == null)
|
|
|
|
// {
|
|
|
|
// errors.Add($"来源起始点{detail.BeginPosition}库位没查到");
|
|
|
|
// }
|
|
|
|
// var toloc = await _postionLocationAppService.GetByCodeAsync(detail.EndPosition)
|
|
|
|
// .ConfigureAwait(false);
|
|
|
|
// if (toloc == null)
|
|
|
|
// {
|
|
|
|
// errors.Add($"结束点{detail.EndPosition}没查到");
|
|
|
|
// }
|
|
|
|
// LocationDTO tolocation = null;
|
|
|
|
// if (toloc != null)
|
|
|
|
// {
|
|
|
|
// tolocation = await _locationAppService.GetByCodeAsync(toloc.LocationCode).ConfigureAwait(false);
|
|
|
|
// }
|
|
|
|
// if (tolocation == null)
|
|
|
|
// {
|
|
|
|
// errors.Add($"结束点{detail.EndPosition}库位没查到");
|
|
|
|
// }
|
|
|
|
// var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.MatCode);
|
|
|
|
// if (entity == null)
|
|
|
|
// {
|
|
|
|
// errors.Add($"物料号{detail.MatCode}不在任务明细内!");
|
|
|
|
// }
|
|
|
|
// if (errors.Count > 0)
|
|
|
|
// {
|
|
|
|
// return ret = new AgvResultObject()
|
|
|
|
// {
|
|
|
|
// Code = "-1",
|
|
|
|
// ReqCode = "",
|
|
|
|
// Message = string.Join(",", errors.ToArray())
|
|
|
|
// };
|
|
|
|
// }
|
|
|
|
// var dto = new TransferNoteDetailDTO();
|
|
|
|
// dto.InjectFrom(entity);
|
|
|
|
// dto.ToLocationCode = toloc.Code;
|
|
|
|
// dto.ToLocationGroup = tolocation.LocationGroupCode;
|
|
|
|
// dto.ToLocationArea = tolocation.AreaCode;
|
|
|
|
// dto.ToLocationErpCode = tolocation.ErpLocationCode;
|
|
|
|
|
|
|
|
// dto.ToWarehouseCode = tolocation.WarehouseCode;
|
|
|
|
// dto.Qty = detail.MatQty;
|
|
|
|
// dto.ToLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty;
|
|
|
|
// dto.ToPackingCode = string.Empty;
|
|
|
|
|
|
|
|
// dto.FromWarehouseCode = fromlocation.WarehouseCode;
|
|
|
|
// dto.FromLocationCode = fromlocation.Code;
|
|
|
|
// dto.FromLocationGroup = fromlocation.LocationGroupCode;
|
|
|
|
// dto.FromLocationArea = fromlocation.AreaCode;
|
|
|
|
// dto.FromLocationErpCode = fromlocation.ErpLocationCode;
|
|
|
|
// dto.Qty = detail.MatQty;
|
|
|
|
// dto.FromLot = string.Empty;
|
|
|
|
// dto.FromPackingCode = string.Empty;
|
|
|
|
// details.Add(dto);
|
|
|
|
|
|
|
|
// //var details=
|
|
|
|
|
|
|
|
|
|
|
|
// //note.Details.Add()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// //await ExecuteDetailExtAsync(itm.Id, entity.Id, dto).ConfigureAwait(false);
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (errors.Count > 0)
|
|
|
|
// {
|
|
|
|
// ret = new AgvResultObject()
|
|
|
|
// {
|
|
|
|
// Code = "-1",
|
|
|
|
// ReqCode = "",
|
|
|
|
// Message = string.Join(",", errors.ToArray())
|
|
|
|
// };
|
|
|
|
// }
|
|
|
|
// itm.Worker = "AGV";
|
|
|
|
// itm.Details = details;
|
|
|
|
|
|
|
|
// _logger.LogInformation($"{flag}接收Agv确认单据内容:" + json + "Agv任务完成");
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
{ |
|
|
|
errors.Add("Agv确认单据里无数据! \n"); |
|
|
@ -791,11 +920,13 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
ret = new AgvResultObject |
|
|
|
{ |
|
|
|
Code = "-1", |
|
|
|
ReqCode = job.RequestNumber, |
|
|
|
Message = ex.Message, |
|
|
|
ReqCode ="", |
|
|
|
Message = ex.Message |
|
|
|
}; |
|
|
|
//await unitOfWork.RollbackAsync();
|
|
|
|
return ret; |
|
|
@ -807,7 +938,7 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase |
|
|
|
{ |
|
|
|
Code = "-1", |
|
|
|
Message = string.Join(",", errors.ToArray()), |
|
|
|
ReqCode = job.RequestNumber |
|
|
|
ReqCode = "" |
|
|
|
}; |
|
|
|
} |
|
|
|
return ret; |
|
|
|