diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs
index 1d6b1d6bc..816d2795c 100644
--- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs
+++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs
@@ -243,15 +243,36 @@ public enum EnumTransSubType
///
- ///AGV冻结
+ ///AGV喷涂回库
///
- [Display(Name = "AGV冻结")]
- Agv_Freezed = 1513,
+ [Display(Name = "AGV喷涂回库")]
+ Agv_Return_Coating = 1513,
///
- ///AGV冻结
+ ///AGVKitting回库
///
- [Display(Name = "AGV解冻")]
- Agv_UnFreezed = 1514
+ [Display(Name = "AGVKitting回库")]
+ Agv_Return_Kitting = 1514,
+
+ ///
+ ///AGV装配回库
+ ///
+ [Display(Name = "AGV装配回库")]
+ Agv_Return_Assemble = 1515,
+
+ ///
+ ///AGV注塑回库
+ ///
+ [Display(Name = "AGV注塑回库")]
+ Agv_Return_Injection = 1516,
+
+ ///
+ ///AGV备品回库
+ ///
+ [Display(Name = "AGV备品回库")]
+ Agv_Return_SparePart = 1517,
+
+
+
}
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 397427a0c..b5e17451b 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
@@ -63,6 +63,7 @@ public class AssembleIssueJobAppService
private readonly IPostionLocationAppService _postionLocationAppService;
private readonly ILocationDeliveryAppService _locationDeliveryAppService;
private readonly IItemBasicAppService _itemBasicAppService;
+ private readonly ITransferNoteAppService _transferNoteAppService;
public AssembleIssueJobAppService(
ILogger logger,
@@ -74,7 +75,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
@@ -95,6 +99,7 @@ public class AssembleIssueJobAppService
_agvOptions = agvOptions;
_itemBasicAppService = itemBasicAppService;
+ _transferNoteAppService = transferNoteAppService;
}
[HttpPost("get-by-number-2")]
@@ -1080,6 +1085,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_Return_Assemble.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 = detail.PakingCode;
+ 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 = detail.PakingCode;
+
+ 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..8ef0aeed8 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,96 +1035,169 @@ 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",
- ReqCode = job.CoatingRequestNumber,
- Message = "OK"
+ Message = "OK",
+ ReqCode = "",
};
using var unitOfWork = _unitOfWorkManager.Begin();
try
{
-
- if (job.JobStatus == EnumJobStatus.Done)
+ if (request.Data.Count > 0)
{
- throw new UserFriendlyException($"任务{job.Number}为已完成状态,不能发起AGV任务!");
- }
+ var notes = request.Data;
- if (job.Details.Count == 0)
- {
- throw new UserFriendlyException($"任务{job.Number}没有推荐库存!");
- }
+ foreach (var detail in notes)
+ {
+ TransferNoteEditInput transfer = new TransferNoteEditInput();
+ transfer.CallJobNumber = detail.OrderNum;
+ transfer.Type = EnumTransSubType.Agv_Return_Coating.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;
- var first = job.Details.FirstOrDefault();
- var request = new AgvRequest();
- request.MatCode = first.ItemCode;
- request.MatQty = first.HandledToQty;
- request.OrderNum = job.Number;
- request.OrderType = EnumJobType.CoatingIssueJob.ToString();
-
- var httpclient = _httpClientFactory.CreateClient();
- _agvOptions.Value.Address = string.IsNullOrEmpty(_agvOptions.Value.Address)
- ? "http://7e42682n64.goho.co:21171/"
- : _agvOptions.Value.Address; //测试地址
- _agvOptions.Value.Token =
- string.IsNullOrEmpty(_agvOptions.Value.Token) ? string.Empty : _agvOptions.Value.Token; //测试token
- _agvOptions.Value.UserName =
- string.IsNullOrEmpty(_agvOptions.Value.UserName) ? "" : _agvOptions.Value.UserName; //测试用户名
- _agvOptions.Value.Password =
- string.IsNullOrEmpty(_agvOptions.Value.Password) ? "" : _agvOptions.Value.Password; //测试密码
- _agvOptions.Value.Path = string.IsNullOrEmpty(_agvOptions.Value.Path)
- ? "zozocnApi/custom/receiveProductionPlan"
- : _agvOptions.Value.Path; //测试密码
- var flag = DateTime.Now.ToString("yyyyMMddHHmmss");
+ detailInput.Qty = detail.MatQty;
+ detailInput.ToLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty;
+ detailInput.ToPackingCode = detail.PakingCode;
+ 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 = detail.PakingCode;
- if (!string.IsNullOrEmpty(_agvOptions.Value.Token))
- {
- var token = _agvOptions.Value.Token;
- httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
- }
+ transfer.Details.Add(detailInput);
- if (!string.IsNullOrEmpty(_agvOptions.Value.UserName) && !string.IsNullOrEmpty(_agvOptions.Value.Password))
+
+ await _transferNoteAppService.CreateAsync(transfer).ConfigureAwait(false);
+ }
+ }
+ else
{
- var username = _agvOptions.Value.UserName;
- var password = _agvOptions.Value.Password;
- httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
- Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")));
+ errors.Add("Agv确认单据里无数据! \n");
}
-
- var client = new AgvJobClient(_agvOptions.Value.Address, httpclient, _agvOptions.Value.Path);
- ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false);
+ }
+ catch (Exception ex)
+ {
+ ret = new AgvResultObject
+ {
+ Code = "-1",
+ ReqCode = "",
+ Message = ex.Message
+ };
+ await unitOfWork.RollbackAsync().ConfigureAwait(false);
}
- catch (Exception e)
+
+ if (errors.Count > 0)
{
- ret = new AgvResultObject();
- ret.Code = "1";
- ret.Message = e.Message;
- ret.ReqCode = job.CoatingRequestNumber;
+ ret = new AgvResultObject
+ {
+ Code = "-1",
+ Message = string.Join(",", errors.ToArray()),
+ ReqCode = ""
+ };
await unitOfWork.RollbackAsync().ConfigureAwait(false);
- throw new UserFriendlyException($"接口报错 错误信息{e.Message}");
}
return ret;
+
+
+
+
}
- ///
- /// 回库调用
- ///
- ///
- ///
- ///
- private async Task ReturnBackAsync(CoatingIssueJobDTO job)
+
+
+
+
+
+
+
+ ///
+ /// 调用Agv接口实现
+ ///
+ ///
+ ///
+ private async Task SendInterFaceAsync(CoatingIssueJobDTO job)
{
+#if DEBUG
+
+#endif
var ret = new AgvResultObject
{
Code = "0",
@@ -1133,12 +1207,25 @@ public class CoatingIssueJobAppService
using var unitOfWork = _unitOfWorkManager.Begin();
try
{
+
+ if (job.JobStatus == EnumJobStatus.Done)
+ {
+ throw new UserFriendlyException($"任务{job.Number}为已完成状态,不能发起AGV任务!");
+ }
+
+ if (job.Details.Count == 0)
+ {
+ throw new UserFriendlyException($"任务{job.Number}没有推荐库存!");
+ }
+
+
var first = job.Details.FirstOrDefault();
- var request = new AgvRequestBack();
+ var request = new AgvRequest();
request.MatCode = first.ItemCode;
- request.ReturnQty = first.HandledToQty;
- request.EndPosition = first.HandledToLocationCode;
-
+ request.MatQty = first.HandledToQty;
+ request.OrderNum = job.Number;
+ request.OrderType = EnumJobType.CoatingIssueJob.ToString();
+
var httpclient = _httpClientFactory.CreateClient();
_agvOptions.Value.Address = string.IsNullOrEmpty(_agvOptions.Value.Address)
@@ -1170,7 +1257,7 @@ public class CoatingIssueJobAppService
}
var client = new AgvJobClient(_agvOptions.Value.Address, httpclient, _agvOptions.Value.Path);
- ret = await client.NotifyOutTaskBack4FWAsync(request).ConfigureAwait(false);
+ ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false);
}
catch (Exception e)
@@ -1184,5 +1271,6 @@ public class CoatingIssueJobAppService
}
return ret;
}
+
#endregion
}
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..1060b8209 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_Return_Injection.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 = detail.PakingCode;
+ 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 = detail.PakingCode;
+
+ 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..261e9aed9 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();
@@ -980,95 +981,164 @@ public class KittingIssueJobAppService
}
///
- /// 调用Agv接口实现
+ /// Agv 回库 接口
///
- ///
+ ///
///
- private async Task SendInterFaceAsync(KittingIssueJobDTO 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",
- ReqCode = job.KittingRequestNumber,
- Message = "OK"
+ Message = "OK",
+ ReqCode = "",
};
using var unitOfWork = _unitOfWorkManager.Begin();
try
{
-
- if (job.JobStatus == EnumJobStatus.Done)
+ if (request.Data.Count > 0)
{
- throw new UserFriendlyException($"任务{job.Number}为已完成状态,不能发起AGV任务!");
- }
+ var notes = request.Data;
- if (job.Details.Count == 0)
- {
- throw new UserFriendlyException($"任务{job.Number}没有推荐库存!");
- }
- var first = job.Details.FirstOrDefault();
- var request = new AgvRequest();
- request.MatCode = first.ItemCode;
- request.MatQty = first.HandledToQty;
- request.OrderNum = job.Number;
- request.OrderType = EnumJobType.KittingIssueJob.ToString();
- request.BeginPosition = first.HandledFromLocationCode;
- request.EndPosition = first.HandledToLocationCode;
+ foreach (var detail in notes)
+ {
+ TransferNoteEditInput transfer = new TransferNoteEditInput();
+ transfer.CallJobNumber = detail.OrderNum;
+ transfer.Type = EnumTransSubType.Agv_Return_Kitting.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;
- var httpclient = _httpClientFactory.CreateClient();
- _agvOptions.Value.Address = string.IsNullOrEmpty(_agvOptions.Value.Address)
- ? "http://7e42682n64.goho.co:21171/"
- : _agvOptions.Value.Address; //测试地址
- _agvOptions.Value.Token =
- string.IsNullOrEmpty(_agvOptions.Value.Token) ? string.Empty : _agvOptions.Value.Token; //测试token
- _agvOptions.Value.UserName =
- string.IsNullOrEmpty(_agvOptions.Value.UserName) ? "" : _agvOptions.Value.UserName; //测试用户名
- _agvOptions.Value.Password =
- string.IsNullOrEmpty(_agvOptions.Value.Password) ? "" : _agvOptions.Value.Password; //测试密码
- _agvOptions.Value.Path = string.IsNullOrEmpty(_agvOptions.Value.Path)
- ? "zozocnApi/custom/receiveProductionPlan"
- : _agvOptions.Value.Path; //测试密码
- var flag = DateTime.Now.ToString("yyyyMMddHHmmss");
- if (!string.IsNullOrEmpty(_agvOptions.Value.Token))
- {
- var token = _agvOptions.Value.Token;
- httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
- }
- if (!string.IsNullOrEmpty(_agvOptions.Value.UserName) && !string.IsNullOrEmpty(_agvOptions.Value.Password))
+ detailInput.Qty = detail.MatQty;
+ detailInput.ToLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty;
+ detailInput.ToPackingCode = detail.PakingCode;
+ 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 = detail.PakingCode;
+
+ transfer.Details.Add(detailInput);
+
+
+ await _transferNoteAppService.CreateAsync(transfer).ConfigureAwait(false);
+ }
+ }
+ else
{
- var username = _agvOptions.Value.UserName;
- var password = _agvOptions.Value.Password;
- httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
- Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")));
+ errors.Add("Agv确认单据里无数据! \n");
}
-
- var client = new AgvJobClient(_agvOptions.Value.Address, httpclient, _agvOptions.Value.Path);
- ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false);
+ }
+ catch (Exception ex)
+ {
+ ret = new AgvResultObject
+ {
+ Code = "-1",
+ ReqCode = "",
+ Message = ex.Message
+ };
+ await unitOfWork.RollbackAsync().ConfigureAwait(false);
}
- catch (Exception e)
+
+ if (errors.Count > 0)
{
- ret = new AgvResultObject();
- ret.Code = "1";
- ret.Message = e.Message;
- ret.ReqCode = job.KittingRequestNumber;
+ ret = new AgvResultObject
+ {
+ Code = "-1",
+ Message = string.Join(",", errors.ToArray()),
+ ReqCode = ""
+ };
await unitOfWork.RollbackAsync().ConfigureAwait(false);
- throw new UserFriendlyException($"接口报错 错误信息{e.Message}");
}
return ret;
+
+
+
+
}
+
+
///
- /// 回库调用
+ /// 调用Agv接口实现
///
///
///
- ///
- private async Task ReturnBackAsync(KittingIssueJobDTO job)
+ private async Task SendInterFaceAsync(KittingIssueJobDTO job)
{
+#if DEBUG
+
+#endif
var ret = new AgvResultObject
{
Code = "0",
@@ -1078,13 +1148,25 @@ public class KittingIssueJobAppService
using var unitOfWork = _unitOfWorkManager.Begin();
try
{
+
+ if (job.JobStatus == EnumJobStatus.Done)
+ {
+ throw new UserFriendlyException($"任务{job.Number}为已完成状态,不能发起AGV任务!");
+ }
+
+ if (job.Details.Count == 0)
+ {
+ throw new UserFriendlyException($"任务{job.Number}没有推荐库存!");
+ }
var first = job.Details.FirstOrDefault();
- var request = new AgvRequestBack();
+ var request = new AgvRequest();
request.MatCode = first.ItemCode;
- request.ReturnQty = first.HandledToQty;
+ request.MatQty = first.HandledToQty;
+ request.OrderNum = job.Number;
+ request.OrderType = EnumJobType.KittingIssueJob.ToString();
+ request.BeginPosition = first.HandledFromLocationCode;
request.EndPosition = first.HandledToLocationCode;
-
var httpclient = _httpClientFactory.CreateClient();
_agvOptions.Value.Address = string.IsNullOrEmpty(_agvOptions.Value.Address)
? "http://7e42682n64.goho.co:21171/"
@@ -1115,7 +1197,7 @@ public class KittingIssueJobAppService
}
var client = new AgvJobClient(_agvOptions.Value.Address, httpclient, _agvOptions.Value.Path);
- ret = await client.NotifyOutTaskBack4FWAsync(request).ConfigureAwait(false);
+ ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false);
}
catch (Exception e)
@@ -1129,6 +1211,7 @@ public class KittingIssueJobAppService
}
return ret;
}
+
#endregion
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..590b08475 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_Return_SparePart.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 = detail.PakingCode;
+ 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 =detail.PakingCode;
+
+ 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接口实现
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs
index 3dd36c252..3cc60622d 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs
@@ -670,282 +670,8 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase
}
- [HttpPost("call-back-unfreezed-agv")]
- public async Task CallUnFreezedAgvAsync(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.ToStatus = 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.FromStatus = EnumInventoryStatus.FROZEN;
- 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);
- }
- }
- 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;
- }
-
-
- [HttpPost("call-back-freezed-agv")]
- public async Task CallFreezedAgvAsync(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_Freezed.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.ToStatus = EnumInventoryStatus.FROZEN;
-
- 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.FromStatus = EnumInventoryStatus.OK;
- 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);
- }
- }
- 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;
- }
+