diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs index 942883be4..53b775616 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs @@ -62,6 +62,7 @@ public class AssembleIssueJobAppService private readonly IPostionLocationAppService _postionLocationAppService; private readonly ILocationDeliveryAppService _locationDeliveryAppService; private readonly IItemBasicAppService _itemBasicAppService; + private readonly ITransferNoteAppService _transferNoteAppService; public AssembleIssueJobAppService( ILogger logger, @@ -73,7 +74,10 @@ public class AssembleIssueJobAppService , IOptions options, ITransferLibRequestAppService transferLibRequestAppService, ICurrentUser currentUser, UnitOfWorkManager unitOfWorkManager , IOptions agvOptions - , IPostionLocationAppService postionLocationAppService, ILocationDeliveryAppService locationDeliveryAppService) : base( + , IPostionLocationAppService postionLocationAppService, ILocationDeliveryAppService locationDeliveryAppService + , ITransferNoteAppService transferNoteAppService + + ) : base( repository, assembleIssueJobManager @@ -94,6 +98,7 @@ public class AssembleIssueJobAppService _agvOptions = agvOptions; _itemBasicAppService = itemBasicAppService; + _transferNoteAppService = transferNoteAppService; } [HttpPost("get-by-number-2")] @@ -1057,6 +1062,155 @@ public class AssembleIssueJobAppService return ret; } + /// + /// Agv 回库 接口 + /// + /// + /// + [HttpPost("call-return-back-agv")] + public async Task CallReturnBackAgvAsync(AgvRequestDto request) + { + var json = JsonSerializer.Serialize(request); + var flag = DateTime.Now.ToString("yyyyMMddHHmmss"); + _logger.LogInformation($"{flag}接收到AGV确认单据内容:" + json); +#if DEBUG +#endif + var errors = new List(); + var ret = new AgvResultObject + { + Code = "0", + Message = "OK", + ReqCode = "", + }; + using var unitOfWork = _unitOfWorkManager.Begin(); + try + { + if (request.Data.Count > 0) + { + var notes = request.Data; + + foreach (var detail in notes) + { + TransferNoteEditInput transfer = new TransferNoteEditInput(); + transfer.CallJobNumber = detail.OrderNum; + transfer.Type = EnumTransSubType.Agv_Transfer_WIP.ToString(); + transfer.Worker = "Agv"; + transfer.UseOnTheWayLocation = false; + List transferNoteDetailInputs = new List(); + 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}的零件不存在!"); + } + else + { + detailInput.ItemCode = item.Code; + detailInput.Uom = item.BasicUom; + detailInput.ItemName = item.Name; + detailInput.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : string.Empty; + } + 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.FromStatus = tolocation.DefaultInventoryStatus; + + + + 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.ToStatus = fromlocation.DefaultInventoryStatus; + detailInput.Qty = detail.MatQty; + detailInput.FromLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; + detailInput.FromPackingCode = string.Empty; + + transfer.Details.Add(detailInput); + + + await _transferNoteAppService.CreateAsync(transfer).ConfigureAwait(false); + } + } + else + { + errors.Add("Agv确认单据里无数据! \n"); + } + } + catch (Exception ex) + { + ret = new AgvResultObject + { + Code = "-1", + ReqCode = "", + Message = ex.Message + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + + } + + if (errors.Count > 0) + { + ret = new AgvResultObject + { + Code = "-1", + Message = string.Join(",", errors.ToArray()), + ReqCode = "" + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + } + return ret; + + + + + } + + /// /// 调用Agv接口实现 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs index bc2cd39f2..0eb936b68 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs @@ -54,7 +54,7 @@ public class CoatingIssueJobAppService private readonly IOptions _agvOptions; private readonly IPostionLocationAppService _postionLocationAppService; private readonly IItemBasicAppService _itemBasicAppService; - + private readonly ITransferNoteAppService _transferNoteAppService; protected ICoatingIssueRequestAppService CoatingIssueRequestAppService => LazyServiceProvider.LazyGetRequiredService(); @@ -68,7 +68,7 @@ public class CoatingIssueJobAppService , IHttpClientFactory httpClientFactory , IOptions options, ITransferLibRequestAppService transferLibRequestAppService, ICurrentUser currentUser, IOptions agvOptions , UnitOfWorkManager unitOfWorkManager - , IPostionLocationAppService postionLocationAppService, IItemBasicAppService _itemBasicAppService + , IPostionLocationAppService postionLocationAppService, IItemBasicAppService _itemBasicAppService, ITransferNoteAppService transferNoteAppService ) : base( repository, coatingIssueJobManager) { @@ -85,6 +85,7 @@ public class CoatingIssueJobAppService _unitOfWorkManager = unitOfWorkManager; _agvOptions = agvOptions; _postionLocationAppService = postionLocationAppService; + _transferLibRequestAppService= transferLibRequestAppService; } [HttpPost("get-by-number-2")] @@ -1034,11 +1035,165 @@ public class CoatingIssueJobAppService } /// - /// 调用Agv接口实现 + /// Agv 回库 接口 /// - /// + /// /// - private async Task SendInterFaceAsync(CoatingIssueJobDTO job) + [HttpPost("call-return-back-agv")] + public async Task CallReturnBackAgvAsync(AgvRequestDto request) + { + var json = JsonSerializer.Serialize(request); + var flag = DateTime.Now.ToString("yyyyMMddHHmmss"); + _logger.LogInformation($"{flag}接收到AGV确认单据内容:" + json); +#if DEBUG +#endif + var errors = new List(); + var ret = new AgvResultObject + { + Code = "0", + Message = "OK", + ReqCode = "", + }; + using var unitOfWork = _unitOfWorkManager.Begin(); + try + { + if (request.Data.Count > 0) + { + var notes = request.Data; + + foreach (var detail in notes) + { + TransferNoteEditInput transfer = new TransferNoteEditInput(); + transfer.CallJobNumber = detail.OrderNum; + transfer.Type = EnumTransSubType.Agv_Transfer_WIP.ToString(); + transfer.Worker = "Agv"; + transfer.UseOnTheWayLocation = false; + List transferNoteDetailInputs = new List(); + 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}的零件不存在!"); + } + else + { + detailInput.ItemCode = item.Code; + detailInput.Uom = item.BasicUom; + detailInput.ItemName = item.Name; + detailInput.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : string.Empty; + } + 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.FromStatus = tolocation.DefaultInventoryStatus; + + + + 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.ToStatus = fromlocation.DefaultInventoryStatus; + detailInput.Qty = detail.MatQty; + detailInput.FromLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; + detailInput.FromPackingCode = string.Empty; + + transfer.Details.Add(detailInput); + + + await _transferNoteAppService.CreateAsync(transfer).ConfigureAwait(false); + } + } + else + { + errors.Add("Agv确认单据里无数据! \n"); + } + } + catch (Exception ex) + { + ret = new AgvResultObject + { + Code = "-1", + ReqCode = "", + Message = ex.Message + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + + } + + if (errors.Count > 0) + { + ret = new AgvResultObject + { + Code = "-1", + Message = string.Join(",", errors.ToArray()), + ReqCode = "" + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + } + return ret; + + + + + } + + + + + + + + /// + /// 调用Agv接口实现 + /// + /// + /// + private async Task SendInterFaceAsync(CoatingIssueJobDTO job) { #if DEBUG diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs index fa838c96a..9f3587345 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs @@ -52,6 +52,7 @@ public class InjectionIssueJobAppService private readonly IPostionLocationAppService _postionLocationAppService; private readonly ILogger _logger; private readonly IItemBasicAppService _itemBasicAppService; + private readonly ITransferNoteAppService _transferNoteAppService; protected IInjectionIssueRequestAppService InjectionIssueRequestAppService => @@ -971,6 +972,157 @@ public class InjectionIssueJobAppService } return ret; } + /// + /// Agv 回库 接口 + /// + /// + /// + [HttpPost("call-return-back-agv")] + public async Task CallReturnBackAgvAsync(AgvRequestDto request) + { + var json = JsonSerializer.Serialize(request); + var flag = DateTime.Now.ToString("yyyyMMddHHmmss"); + _logger.LogInformation($"{flag}接收到AGV确认单据内容:" + json); +#if DEBUG +#endif + var errors = new List(); + var ret = new AgvResultObject + { + Code = "0", + Message = "OK", + ReqCode = "", + }; + using var unitOfWork = _unitOfWorkManager.Begin(); + try + { + if (request.Data.Count > 0) + { + var notes = request.Data; + + foreach (var detail in notes) + { + TransferNoteEditInput transfer = new TransferNoteEditInput(); + transfer.CallJobNumber = detail.OrderNum; + transfer.Type = EnumTransSubType.Agv_Transfer_WIP.ToString(); + transfer.Worker = "Agv"; + transfer.UseOnTheWayLocation = false; + List transferNoteDetailInputs = new List(); + 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}的零件不存在!"); + } + else + { + detailInput.ItemCode = item.Code; + detailInput.Uom = item.BasicUom; + detailInput.ItemName = item.Name; + detailInput.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : string.Empty; + } + 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.FromStatus = tolocation.DefaultInventoryStatus; + + + + 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.ToStatus = fromlocation.DefaultInventoryStatus; + detailInput.Qty = detail.MatQty; + detailInput.FromLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; + detailInput.FromPackingCode = string.Empty; + + transfer.Details.Add(detailInput); + + + await _transferNoteAppService.CreateAsync(transfer).ConfigureAwait(false); + } + } + else + { + errors.Add("Agv确认单据里无数据! \n"); + } + } + catch (Exception ex) + { + ret = new AgvResultObject + { + Code = "-1", + ReqCode = "", + Message = ex.Message + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + + } + + if (errors.Count > 0) + { + ret = new AgvResultObject + { + Code = "-1", + Message = string.Join(",", errors.ToArray()), + ReqCode = "" + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + } + return ret; + + + + + } + + + + /// /// 调用Agv接口实现 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs index 8de64741c..a08916f84 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs @@ -53,6 +53,7 @@ public class KittingIssueJobAppService private readonly IPostionLocationAppService _postionLocationAppService; private readonly ILogger _logger; private readonly IItemBasicAppService _itemBasicAppService; + private readonly ITransferNoteAppService _transferNoteAppService; protected IKittingIssueRequestAppService KittingIssueRequestAppService => LazyServiceProvider.LazyGetRequiredService(); @@ -979,6 +980,160 @@ public class KittingIssueJobAppService return ret; } + /// + /// Agv 回库 接口 + /// + /// + /// + [HttpPost("call-return-back-agv")] + public async Task CallReturnBackAgvAsync(AgvRequestDto request) + { + var json = JsonSerializer.Serialize(request); + var flag = DateTime.Now.ToString("yyyyMMddHHmmss"); + _logger.LogInformation($"{flag}接收到AGV确认单据内容:" + json); +#if DEBUG +#endif + var errors = new List(); + var ret = new AgvResultObject + { + Code = "0", + Message = "OK", + ReqCode = "", + }; + using var unitOfWork = _unitOfWorkManager.Begin(); + try + { + if (request.Data.Count > 0) + { + var notes = request.Data; + + foreach (var detail in notes) + { + TransferNoteEditInput transfer = new TransferNoteEditInput(); + transfer.CallJobNumber = detail.OrderNum; + transfer.Type = EnumTransSubType.Agv_Transfer_WIP.ToString(); + transfer.Worker = "Agv"; + transfer.UseOnTheWayLocation = false; + List transferNoteDetailInputs = new List(); + 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}的零件不存在!"); + } + else + { + detailInput.ItemCode = item.Code; + detailInput.Uom = item.BasicUom; + detailInput.ItemName = item.Name; + detailInput.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : string.Empty; + } + 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.FromStatus = tolocation.DefaultInventoryStatus; + + + + 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.ToStatus = fromlocation.DefaultInventoryStatus; + detailInput.Qty = detail.MatQty; + detailInput.FromLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; + detailInput.FromPackingCode = string.Empty; + + transfer.Details.Add(detailInput); + + + await _transferNoteAppService.CreateAsync(transfer).ConfigureAwait(false); + } + } + else + { + errors.Add("Agv确认单据里无数据! \n"); + } + } + catch (Exception ex) + { + ret = new AgvResultObject + { + Code = "-1", + ReqCode = "", + Message = ex.Message + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + + } + + if (errors.Count > 0) + { + ret = new AgvResultObject + { + Code = "-1", + Message = string.Join(",", errors.ToArray()), + ReqCode = "" + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + } + return ret; + + + + + } + + + + + + + /// /// 调用Agv接口实现 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs index 0c0705a7c..80bf2ec58 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/SparePartIssueJobs/SparePartIssueJobAppService.cs @@ -52,6 +52,7 @@ public class SparePartIssueJobAppService private readonly IPostionLocationAppService _postionLocationAppService; private readonly ILogger _logger; private readonly IItemBasicAppService _itemBasicAppService; + private readonly ITransferNoteAppService _transferNoteAppService; protected ISparePartIssueRequestAppService SparePartIssueRequestAppService => LazyServiceProvider.LazyGetRequiredService(); @@ -63,7 +64,7 @@ public class SparePartIssueJobAppService ISparePartIssueNoteAppService sparePartIssueNoteAppService, IExpectOutAppService expectOutAppService , IHttpClientFactory httpClientFactory , IOptions options, ITransferLibRequestAppService transferLibRequestAppService, ICurrentUser currentUser, ILogger logger - , UnitOfWorkManager unitOfWorkManager, IOptions agvOptions, IItemBasicAppService itemBasicAppService + , UnitOfWorkManager unitOfWorkManager, IOptions agvOptions, IItemBasicAppService itemBasicAppService, ITransferNoteAppService transferNoteAppService ) : base( repository, sparePartIssueJobManager) { @@ -80,6 +81,7 @@ public class SparePartIssueJobAppService _agvOptions = agvOptions; _logger = logger; _itemBasicAppService = itemBasicAppService; + _transferNoteAppService = transferNoteAppService; } [HttpPost("get-by-number-2")] @@ -953,6 +955,155 @@ public class SparePartIssueJobAppService } return ret; } + /// + /// Agv 回库 接口 + /// + /// + /// + [HttpPost("call-return-back-agv")] + public async Task CallReturnBackAgvAsync(AgvRequestDto request) + { + var json = JsonSerializer.Serialize(request); + var flag = DateTime.Now.ToString("yyyyMMddHHmmss"); + _logger.LogInformation($"{flag}接收到AGV确认单据内容:" + json); +#if DEBUG +#endif + var errors = new List(); + var ret = new AgvResultObject + { + Code = "0", + Message = "OK", + ReqCode = "", + }; + using var unitOfWork = _unitOfWorkManager.Begin(); + try + { + if (request.Data.Count > 0) + { + var notes = request.Data; + + foreach (var detail in notes) + { + TransferNoteEditInput transfer = new TransferNoteEditInput(); + transfer.CallJobNumber = detail.OrderNum; + transfer.Type = EnumTransSubType.Agv_Transfer_WIP.ToString(); + transfer.Worker = "Agv"; + transfer.UseOnTheWayLocation = false; + List transferNoteDetailInputs = new List(); + 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}的零件不存在!"); + } + else + { + detailInput.ItemCode = item.Code; + detailInput.Uom = item.BasicUom; + detailInput.ItemName = item.Name; + detailInput.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : string.Empty; + } + 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.FromStatus = tolocation.DefaultInventoryStatus; + + + + 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.ToStatus = fromlocation.DefaultInventoryStatus; + detailInput.Qty = detail.MatQty; + detailInput.FromLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; + detailInput.FromPackingCode = string.Empty; + + transfer.Details.Add(detailInput); + + + await _transferNoteAppService.CreateAsync(transfer).ConfigureAwait(false); + } + } + else + { + errors.Add("Agv确认单据里无数据! \n"); + } + } + catch (Exception ex) + { + ret = new AgvResultObject + { + Code = "-1", + ReqCode = "", + Message = ex.Message + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + + } + + if (errors.Count > 0) + { + ret = new AgvResultObject + { + Code = "-1", + Message = string.Join(",", errors.ToArray()), + ReqCode = "" + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + } + return ret; + + + + + } + + /// /// 调用Agv接口实现 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index f96e2bdca..7799f9d21 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -50,7 +50,8 @@ public class UnplannedIssueJobAppService private readonly IOptions _agvOptions; private readonly IHttpClientFactory _httpClientFactory; private readonly IPostionLocationAppService _postionLocationAppService; - + private readonly ITransferNoteAppService _transferNoteAppService; + public UnplannedIssueJobAppService( IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, @@ -58,7 +59,8 @@ public class UnplannedIssueJobAppService IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService, IUnitOfWorkManager unitOfWorkManager, ILogger logger, IItemBasicAppService itemBasicAppService, IOptions agvOptions, - IPostionLocationAppService postionLocationAppService + IPostionLocationAppService postionLocationAppService, + ITransferNoteAppService transferNoteAppService , IHttpClientFactory httpClientFactory ) : base(repository, unplannedIssueJobManager) @@ -72,6 +74,7 @@ public class UnplannedIssueJobAppService _itemBasicAppService = itemBasicAppService; _agvOptions = agvOptions; _httpClientFactory = httpClientFactory; + _transferNoteAppService= transferNoteAppService; _postionLocationAppService = postionLocationAppService; } @@ -860,6 +863,156 @@ public class UnplannedIssueJobAppService return ret; } + /// + /// Agv 回库 接口 + /// + /// + /// + [HttpPost("call-return-back-agv")] + public async Task CallReturnBackAgvAsync(AgvRequestDto request) + { + var json = JsonSerializer.Serialize(request); + var flag = DateTime.Now.ToString("yyyyMMddHHmmss"); + _logger.LogInformation($"{flag}接收到AGV确认单据内容:" + json); +#if DEBUG +#endif + var errors = new List(); + var ret = new AgvResultObject + { + Code = "0", + Message = "OK", + ReqCode = "", + }; + using var unitOfWork = _unitOfWorkManager.Begin(); + try + { + if (request.Data.Count > 0) + { + var notes = request.Data; + + foreach (var detail in notes) + { + TransferNoteEditInput transfer = new TransferNoteEditInput(); + transfer.CallJobNumber = detail.OrderNum; + transfer.Type = EnumTransSubType.Agv_Transfer_WIP.ToString(); + transfer.Worker = "Agv"; + transfer.UseOnTheWayLocation = false; + List transferNoteDetailInputs = new List(); + 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}的零件不存在!"); + } + else + { + detailInput.ItemCode = item.Code; + detailInput.Uom = item.BasicUom; + detailInput.ItemName = item.Name; + detailInput.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : string.Empty; + } + 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.FromStatus = tolocation.DefaultInventoryStatus; + + + + 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.ToStatus = fromlocation.DefaultInventoryStatus; + detailInput.Qty = detail.MatQty; + detailInput.FromLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; + detailInput.FromPackingCode = string.Empty; + + transfer.Details.Add(detailInput); + + + await _transferNoteAppService.CreateAsync(transfer).ConfigureAwait(false); + } + } + else + { + errors.Add("Agv确认单据里无数据! \n"); + } + } + catch (Exception ex) + { + ret = new AgvResultObject + { + Code = "-1", + ReqCode = "", + Message = ex.Message + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + + } + + if (errors.Count > 0) + { + ret = new AgvResultObject + { + Code = "-1", + Message = string.Join(",", errors.ToArray()), + ReqCode = "" + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + } + return ret; + + + + + } + + + /// /// 调用Agv接口实现 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedReceiptJobs/UnplannedReceiptJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedReceiptJobs/UnplannedReceiptJobAppService.cs index 46c0db919..172c90c0d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedReceiptJobs/UnplannedReceiptJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedReceiptJobs/UnplannedReceiptJobAppService.cs @@ -56,6 +56,7 @@ public class UnplannedReceiptJobAppService private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly IPostionLocationAppService _postionLocationAppService; private readonly ILogger _logger; + private readonly ITransferNoteAppService _transferNoteAppService; public UnplannedReceiptJobAppService( @@ -66,7 +67,8 @@ public class UnplannedReceiptJobAppService IOptions agvOptions, IHttpClientFactory httpClientFactory, IUnitOfWorkManager unitOfWorkManager, - ILogger logger + ILogger logger, + ITransferNoteAppService transferNoteAppService ) : base(repository, UnplannedReceiptJobManager) @@ -81,6 +83,7 @@ public class UnplannedReceiptJobAppService _unitOfWorkManager = unitOfWorkManager; _logger = logger; _postionLocationAppService = postionLocationAppService; + _transferNoteAppService = transferNoteAppService; } @@ -521,6 +524,155 @@ public class UnplannedReceiptJobAppService } return ret; } + /// + /// Agv 回库 接口 + /// + /// + /// + [HttpPost("call-return-back-agv")] + public async Task CallReturnBackAgvAsync(AgvRequestDto request) + { + var json = JsonSerializer.Serialize(request); + var flag = DateTime.Now.ToString("yyyyMMddHHmmss"); + _logger.LogInformation($"{flag}接收到AGV确认单据内容:" + json); +#if DEBUG +#endif + var errors = new List(); + var ret = new AgvResultObject + { + Code = "0", + Message = "OK", + ReqCode = "", + }; + using var unitOfWork = _unitOfWorkManager.Begin(); + try + { + if (request.Data.Count > 0) + { + var notes = request.Data; + + foreach (var detail in notes) + { + TransferNoteEditInput transfer = new TransferNoteEditInput(); + transfer.CallJobNumber = detail.OrderNum; + transfer.Type = EnumTransSubType.Agv_Transfer_WIP.ToString(); + transfer.Worker = "Agv"; + transfer.UseOnTheWayLocation = false; + List transferNoteDetailInputs = new List(); + 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}的零件不存在!"); + } + else + { + detailInput.ItemCode = item.Code; + detailInput.Uom = item.BasicUom; + detailInput.ItemName = item.Name; + detailInput.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : string.Empty; + } + 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.FromStatus = tolocation.DefaultInventoryStatus; + + + + 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.ToStatus = fromlocation.DefaultInventoryStatus; + detailInput.Qty = detail.MatQty; + detailInput.FromLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; + detailInput.FromPackingCode = string.Empty; + + transfer.Details.Add(detailInput); + + + await _transferNoteAppService.CreateAsync(transfer).ConfigureAwait(false); + } + } + else + { + errors.Add("Agv确认单据里无数据! \n"); + } + } + catch (Exception ex) + { + ret = new AgvResultObject + { + Code = "-1", + ReqCode = "", + Message = ex.Message + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + + } + + if (errors.Count > 0) + { + ret = new AgvResultObject + { + Code = "-1", + Message = string.Join(",", errors.ToArray()), + ReqCode = "" + }; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + } + return ret; + + + + + } + + /// /// 调用Agv接口实现