From 847f1141b0436ff2b4df1a82249140e6378d675d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Fri, 6 Dec 2024 13:41:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=89=80=E6=9C=89=E5=8F=91?= =?UTF-8?q?=E6=96=99=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CoatingIssueJobAppService.cs | 193 ++++++++++------- .../InjectionIssueJobAppService.cs | 197 ++++++++++++------ .../KittingIssueJobAppService.cs | 194 ++++++++++------- .../SparePartIssueJobAppService.cs | 193 ++++++++++------- 4 files changed, 490 insertions(+), 287 deletions(-) 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 11a5db061..d0a9c2157 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 @@ -53,6 +53,7 @@ public class CoatingIssueJobAppService private readonly UnitOfWorkManager _unitOfWorkManager; private readonly IOptions _agvOptions; private readonly IPostionLocationAppService _postionLocationAppService; + private readonly IItemBasicAppService _itemBasicAppService; protected ICoatingIssueRequestAppService CoatingIssueRequestAppService => @@ -67,7 +68,7 @@ public class CoatingIssueJobAppService , IHttpClientFactory httpClientFactory , IOptions options, ITransferLibRequestAppService transferLibRequestAppService, ICurrentUser currentUser, IOptions agvOptions , UnitOfWorkManager unitOfWorkManager - , IPostionLocationAppService postionLocationAppService + , IPostionLocationAppService postionLocationAppService, IItemBasicAppService _itemBasicAppService ) : base( repository, coatingIssueJobManager) { @@ -736,71 +737,47 @@ public class CoatingIssueJobAppService coatingIssueJobDetailDto.Status, coatingIssueJobDetailDto.HandledToLot, handledToQty).ConfigureAwait(false); } - - [HttpPost("PushOutTask")] - public async Task PushOutTaskAsync(CoatingIssueJobDTO job) + + /// + /// 调用 Agv 接口 + /// + /// + /// + /// + /// + [HttpPost("call-agv")] + public async Task CallAgvAsync(CoatingIssueJobDTO input) { - var ret = new AgvResultObject + var res = new ReusltObject(); + List errors = new List(); + List successList = new List(); + + var jobres = await SendInterFaceAsync(input).ConfigureAwait(false); + if (jobres.Code != "0") { - Code = "0", - ReqCode = job.CoatingRequestNumber, - Message = "OK" - }; - using var unitOfWork = _unitOfWorkManager.Begin(); - try + _logger.LogInformation(jobres.Message); + errors.Add(jobres.Message); + } + else { - 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"); - // _logger.LogInformation($"标志{flag}开始调用高通WMS:传递值{JsonSerializer.Serialize(main)}"); - 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)) - { - var username = _agvOptions.Value.UserName; - var password = _agvOptions.Value.Password; - httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", - Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); - } - - var client = new AgvJobClient(_agvOptions.Value.Address, httpclient, _agvOptions.Value.Path); - ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false); - + successList.Add(jobres.Message); } - catch (Exception e) + if (errors.Count > 0) { - ret = new AgvResultObject(); - ret.Code = "1"; - ret.Message = e.Message; - ret.ReqCode = job.CoatingRequestNumber; - await unitOfWork.RollbackAsync().ConfigureAwait(false); - + res.Code = -1; + res.Message = string.Join(",", errors); + res.Data = ""; + return res; } - return ret; + return res; } - [HttpPost("accountOutOrder")] + + /// + /// Agv 回调 接口 + /// + /// + /// + [HttpPost("call-back-agv")] public async Task CallBackAgvAsync(AgvRequestDto request) { var json = JsonSerializer.Serialize(request); @@ -811,13 +788,11 @@ public class CoatingIssueJobAppService var errors = new List(); var first = request.Data.FirstOrDefault(); var job = await _repository.GetAsync(p => p.Number == first.OrderNum).ConfigureAwait(false); - var ret = new AgvResultObject { Code = "0", Message = "OK", ReqCode = job.CoatingRequestNumber, - }; using var unitOfWork = _unitOfWorkManager.Begin(); try @@ -833,8 +808,8 @@ public class CoatingIssueJobAppService { errors.Add($"任务号{string.Join(",", numbers)}不存在!"); } - var dtos = ObjectMapper.Map, List>(entities); + foreach (var itm in dtos) { var arys = jobs.Where(p => p.OrderNum == itm.Number); @@ -842,7 +817,6 @@ public class CoatingIssueJobAppService var details = new List(); foreach (var detail in arys) { - var fromloc = await _postionLocationAppService.GetByCodeAsync(detail.BeginPosition).ConfigureAwait(false); if (fromloc == null) { @@ -878,15 +852,20 @@ public class CoatingIssueJobAppService errors.Add($"结束点{detail.EndPosition}库位没查到"); } + var item = await _itemBasicAppService.GetByCodeAsync(detail.MatCode).ConfigureAwait(false); + if (item == null) + { + errors.Add($"零件号{detail.MatCode}不存在!"); + } var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.MatCode); if (entity == null) { - errors.Add($"物料号{detail.MatCode}不在任务明细内!"); + errors.Add($"零件号{detail.MatCode}不在任务明细内!"); } - if (errors.Count > 0) { + await unitOfWork.RollbackAsync().ConfigureAwait(false); return ret = new AgvResultObject() { Code = "-1", @@ -894,10 +873,9 @@ public class CoatingIssueJobAppService Message = string.Join(",", errors.ToArray()) }; } - var dto = new CoatingIssueJobDetailDTO(); dto.InjectFrom(entity); - dto.HandledToLocationCode = toloc.Code; + dto.HandledToLocationCode = tolocation.Code; dto.HandledToLocationGroup = tolocation.LocationGroupCode; dto.HandledToLocationArea = tolocation.AreaCode; dto.HandledToLocationErpCode = tolocation.ErpLocationCode; @@ -913,19 +891,17 @@ public class CoatingIssueJobAppService dto.HandledFromLocationArea = fromlocation.AreaCode; dto.HandledFromLocationErpCode = fromlocation.ErpLocationCode; dto.HandledFromQty = detail.MatQty; - dto.HandledFromLot = string.Empty; + dto.HandledFromLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; dto.HandledFromPackingCode = string.Empty; details.Add(dto); - - - //await ExecuteDetailExtAsync(itm.Id, entity.Id, dto).ConfigureAwait(false); } if (errors.Count > 0) { + await unitOfWork.RollbackAsync().ConfigureAwait(false); ret = new AgvResultObject() { Code = "-1", @@ -950,9 +926,9 @@ public class CoatingIssueJobAppService { Code = "-1", ReqCode = job.CoatingRequestNumber, - Message = ex.Message, + Message = ex.Message }; - await unitOfWork.RollbackAsync(); + await unitOfWork.RollbackAsync().ConfigureAwait(false); return ret; } @@ -968,6 +944,77 @@ public class CoatingIssueJobAppService return ret; } + /// + /// 调用Agv接口实现 + /// + /// + /// + private async Task SendInterFaceAsync(CoatingIssueJobDTO job) + { +#if DEBUG + +#endif + var ret = new AgvResultObject + { + Code = "0", + ReqCode = job.CoatingRequestNumber, + Message = "OK" + }; + using var unitOfWork = _unitOfWorkManager.Begin(); + try + { + 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"); + + 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)) + { + var username = _agvOptions.Value.UserName; + var password = _agvOptions.Value.Password; + httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", + Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); + } + + var client = new AgvJobClient(_agvOptions.Value.Address, httpclient, _agvOptions.Value.Path); + ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false); + + } + catch (Exception e) + { + ret = new AgvResultObject(); + ret.Code = "1"; + ret.Message = e.Message; + ret.ReqCode = job.CoatingRequestNumber; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + throw new UserFriendlyException($"接口报错 错误信息{e.Message}"); + } + return ret; + } + 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 aa4fe150c..e1c11e1eb 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 @@ -17,6 +17,7 @@ using Volo.Abp; using Volo.Abp.ObjectMapping; using Volo.Abp.Uow; using Volo.Abp.Users; +using Win_in.Sfs.Basedata.Application; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; @@ -50,6 +51,7 @@ public class InjectionIssueJobAppService private readonly IOptions _agvOptions; private readonly IPostionLocationAppService _postionLocationAppService; private readonly ILogger _logger; + private readonly IItemBasicAppService _itemBasicAppService; protected IInjectionIssueRequestAppService InjectionIssueRequestAppService => @@ -64,6 +66,7 @@ public class InjectionIssueJobAppService , IOptions options, ITransferLibRequestAppService transferLibRequestAppService, ICurrentUser currentUser , IOptions agvOptions , UnitOfWorkManager unitOfWorkManager + , IItemBasicAppService itemBasicAppService ) : base( repository, injectionIssueJobManager) { @@ -79,6 +82,7 @@ public class InjectionIssueJobAppService _unitOfWorkManager = unitOfWorkManager; _agvOptions = agvOptions; _logger = logger; + _itemBasicAppService = itemBasicAppService; } [HttpPost("get-by-number-2")] public async Task GetByNumber2Async(string number) @@ -686,70 +690,48 @@ public class InjectionIssueJobAppService injectionIssueJobDetailDto.Status, injectionIssueJobDetailDto.HandledToLot, handledToQty).ConfigureAwait(false); } - [HttpPost("PushOutTask")] - public async Task PushOutTaskAsync(InjectionIssueJobDTO job) + + + /// + /// 调用 Agv 接口 + /// + /// + /// + /// + /// + [HttpPost("call-agv")] + public async Task CallAgvAsync(InjectionIssueJobDTO input) { - var ret = new AgvResultObject + var res = new ReusltObject(); + List errors = new List(); + List successList = new List(); + + var jobres = await SendInterFaceAsync(input).ConfigureAwait(false); + if (jobres.Code != "0") { - Code = "0", - ReqCode = job.InjectionRequestNumber, - Message = "OK" - }; - using var unitOfWork = _unitOfWorkManager.Begin(); - try + _logger.LogInformation(jobres.Message); + errors.Add(jobres.Message); + } + else { - var first = job.Details.FirstOrDefault(); - var request = new AgvRequest(); - request.MatCode = first.ItemCode; - request.MatQty = first.HandledToQty; - request.OrderNum = job.Number; - request.OrderType =EnumJobType.InjectionIssueJob.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"); - // _logger.LogInformation($"标志{flag}开始调用高通WMS:传递值{JsonSerializer.Serialize(main)}"); - 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)) - { - var username = _agvOptions.Value.UserName; - var password = _agvOptions.Value.Password; - httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", - Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); - } - - var client = new AgvJobClient(_agvOptions.Value.Address, httpclient, _agvOptions.Value.Path); - ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false); - + successList.Add(jobres.Message); } - catch (Exception e) + if (errors.Count > 0) { - ret = new AgvResultObject(); - ret.Code = "1"; - ret.Message = e.Message; - ret.ReqCode = job.InjectionRequestNumber; - await unitOfWork.RollbackAsync().ConfigureAwait(false); - + res.Code = -1; + res.Message = string.Join(",", errors); + res.Data = ""; + return res; } - return ret; + return res; } - [HttpPost("accountOutOrder")] + + /// + /// Agv 回调 接口 + /// + /// + /// + [HttpPost("call-back-agv")] public async Task CallBackAgvAsync(AgvRequestDto request) { var json = JsonSerializer.Serialize(request); @@ -760,13 +742,11 @@ public class InjectionIssueJobAppService var errors = new List(); var first = request.Data.FirstOrDefault(); var job = await _repository.GetAsync(p => p.Number == first.OrderNum).ConfigureAwait(false); - var ret = new AgvResultObject { Code = "0", Message = "OK", ReqCode = job.InjectionRequestNumber, - }; using var unitOfWork = _unitOfWorkManager.Begin(); try @@ -782,8 +762,8 @@ public class InjectionIssueJobAppService { errors.Add($"任务号{string.Join(",", numbers)}不存在!"); } - var dtos = ObjectMapper.Map, List>(entities); + foreach (var itm in dtos) { var arys = jobs.Where(p => p.OrderNum == itm.Number); @@ -791,7 +771,6 @@ public class InjectionIssueJobAppService var details = new List(); foreach (var detail in arys) { - var fromloc = await _postionLocationAppService.GetByCodeAsync(detail.BeginPosition).ConfigureAwait(false); if (fromloc == null) { @@ -827,14 +806,20 @@ public class InjectionIssueJobAppService errors.Add($"结束点{detail.EndPosition}库位没查到"); } + var item = await _itemBasicAppService.GetByCodeAsync(detail.MatCode).ConfigureAwait(false); + if (item == null) + { + errors.Add($"零件号{detail.MatCode}不存在!"); + } var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.MatCode); if (entity == null) { - errors.Add($"物料号{detail.MatCode}不在任务明细内!"); + errors.Add($"零件号{detail.MatCode}不在任务明细内!"); } if (errors.Count > 0) { + await unitOfWork.RollbackAsync().ConfigureAwait(false); return ret = new AgvResultObject() { Code = "-1", @@ -844,7 +829,7 @@ public class InjectionIssueJobAppService } var dto = new InjectionIssueJobDetailDTO(); dto.InjectFrom(entity); - dto.HandledToLocationCode = toloc.Code; + dto.HandledToLocationCode = tolocation.Code; dto.HandledToLocationGroup = tolocation.LocationGroupCode; dto.HandledToLocationArea = tolocation.AreaCode; dto.HandledToLocationErpCode = tolocation.ErpLocationCode; @@ -860,19 +845,17 @@ public class InjectionIssueJobAppService dto.HandledFromLocationArea = fromlocation.AreaCode; dto.HandledFromLocationErpCode = fromlocation.ErpLocationCode; dto.HandledFromQty = detail.MatQty; - dto.HandledFromLot = string.Empty; + dto.HandledFromLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; dto.HandledFromPackingCode = string.Empty; details.Add(dto); - - - //await ExecuteDetailExtAsync(itm.Id, entity.Id, dto).ConfigureAwait(false); } if (errors.Count > 0) { + await unitOfWork.RollbackAsync().ConfigureAwait(false); ret = new AgvResultObject() { Code = "-1", @@ -897,9 +880,9 @@ public class InjectionIssueJobAppService { Code = "-1", ReqCode = job.InjectionRequestNumber, - Message = ex.Message, + Message = ex.Message }; - await unitOfWork.RollbackAsync(); + await unitOfWork.RollbackAsync().ConfigureAwait(false); return ret; } @@ -915,6 +898,82 @@ public class InjectionIssueJobAppService return ret; } + /// + /// 调用Agv接口实现 + /// + /// + /// + private async Task SendInterFaceAsync(InjectionIssueJobDTO job) + { +#if DEBUG + +#endif + var ret = new AgvResultObject + { + Code = "0", + ReqCode = job.InjectionRequestNumber, + Message = "OK" + }; + using var unitOfWork = _unitOfWorkManager.Begin(); + try + { + var first = job.Details.FirstOrDefault(); + var request = new AgvRequest(); + request.MatCode = first.ItemCode; + request.MatQty = first.HandledToQty; + request.OrderNum = job.Number; + request.OrderType = EnumJobType.InjectionIssueJob.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"); + + 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)) + { + var username = _agvOptions.Value.UserName; + var password = _agvOptions.Value.Password; + httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", + Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); + } + + var client = new AgvJobClient(_agvOptions.Value.Address, httpclient, _agvOptions.Value.Path); + ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false); + + } + catch (Exception e) + { + ret = new AgvResultObject(); + ret.Code = "1"; + ret.Message = e.Message; + ret.ReqCode = job.InjectionRequestNumber; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + throw new UserFriendlyException($"接口报错 错误信息{e.Message}"); + } + return ret; + } + + + + + + #endregion } 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 8aaaf29dc..96a5e45b4 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 @@ -17,6 +17,7 @@ using Volo.Abp; using Volo.Abp.ObjectMapping; using Volo.Abp.Uow; using Volo.Abp.Users; +using Win_in.Sfs.Basedata.Application; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; @@ -51,6 +52,7 @@ public class KittingIssueJobAppService private readonly IOptions _agvOptions; private readonly IPostionLocationAppService _postionLocationAppService; private readonly ILogger _logger; + private readonly IItemBasicAppService _itemBasicAppService; protected IKittingIssueRequestAppService KittingIssueRequestAppService => LazyServiceProvider.LazyGetRequiredService(); @@ -61,7 +63,7 @@ public class KittingIssueJobAppService ILocationAppService locationAppService, IKittingIssueNoteAppService kittingIssueNoteAppService, IExpectOutAppService expectOutAppService, ILogger logger , IHttpClientFactory httpClientFactory - , IOptions options, ITransferLibRequestAppService transferLibRequestAppService, ICurrentUser currentUser + , IOptions options, ITransferLibRequestAppService transferLibRequestAppService, ICurrentUser currentUser, IItemBasicAppService itemBasicAppService ,IOptions agvOptions, @@ -81,6 +83,7 @@ public class KittingIssueJobAppService _agvOutJob = agvOutJob; _unitOfWorkManager = unitOfWorkManager; _agvOptions = agvOptions; + _itemBasicAppService = itemBasicAppService; } [HttpPost("get-by-number-2")] @@ -698,70 +701,46 @@ public class KittingIssueJobAppService kittingIssueJobDetailDto.Status, kittingIssueJobDetailDto.HandledToLot, handledToQty).ConfigureAwait(false); } - [HttpPost("PushOutTask")] - public async Task PushOutTaskAsync(KittingIssueJobDTO job) + /// + /// 调用 Agv 接口 + /// + /// + /// + /// + /// + [HttpPost("call-agv")] + public async Task CallAgvAsync(KittingIssueJobDTO input) { - var ret = new AgvResultObject + var res = new ReusltObject(); + List errors = new List(); + List successList = new List(); + + var jobres = await SendInterFaceAsync(input).ConfigureAwait(false); + if (jobres.Code != "0") { - Code = "0", - ReqCode = job.KittingRequestNumber, - Message = "OK" - }; - using var unitOfWork = _unitOfWorkManager.Begin(); - try + _logger.LogInformation(jobres.Message); + errors.Add(jobres.Message); + } + else { - 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(); - - 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"); - // _logger.LogInformation($"标志{flag}开始调用高通WMS:传递值{JsonSerializer.Serialize(main)}"); - 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)) - { - var username = _agvOptions.Value.UserName; - var password = _agvOptions.Value.Password; - httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", - Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); - } - - var client = new AgvJobClient(_agvOptions.Value.Address, httpclient, _agvOptions.Value.Path); - ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false); - + successList.Add(jobres.Message); } - catch (Exception e) + if (errors.Count > 0) { - ret = new AgvResultObject(); - ret.Code = "1"; - ret.Message = e.Message; - ret.ReqCode = job.KittingRequestNumber; - await unitOfWork.RollbackAsync().ConfigureAwait(false); - + res.Code = -1; + res.Message = string.Join(",", errors); + res.Data = ""; + return res; } - return ret; + return res; } - [HttpPost("accountOutOrder")] + + /// + /// Agv 回调 接口 + /// + /// + /// + [HttpPost("call-back-agv")] public async Task CallBackAgvAsync(AgvRequestDto request) { var json = JsonSerializer.Serialize(request); @@ -772,13 +751,11 @@ public class KittingIssueJobAppService var errors = new List(); var first = request.Data.FirstOrDefault(); var job = await _repository.GetAsync(p => p.Number == first.OrderNum).ConfigureAwait(false); - var ret = new AgvResultObject { Code = "0", Message = "OK", ReqCode = job.KittingRequestNumber, - }; using var unitOfWork = _unitOfWorkManager.Begin(); try @@ -794,8 +771,8 @@ public class KittingIssueJobAppService { errors.Add($"任务号{string.Join(",", numbers)}不存在!"); } - var dtos = ObjectMapper.Map, List>(entities); + foreach (var itm in dtos) { var arys = jobs.Where(p => p.OrderNum == itm.Number); @@ -803,7 +780,6 @@ public class KittingIssueJobAppService var details = new List(); foreach (var detail in arys) { - var fromloc = await _postionLocationAppService.GetByCodeAsync(detail.BeginPosition).ConfigureAwait(false); if (fromloc == null) { @@ -839,15 +815,20 @@ public class KittingIssueJobAppService errors.Add($"结束点{detail.EndPosition}库位没查到"); } + var item = await _itemBasicAppService.GetByCodeAsync(detail.MatCode).ConfigureAwait(false); + if (item == null) + { + errors.Add($"零件号{detail.MatCode}不存在!"); + } var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.MatCode); if (entity == null) { - errors.Add($"物料号{detail.MatCode}不在任务明细内!"); + errors.Add($"零件号{detail.MatCode}不在任务明细内!"); } - if (errors.Count > 0) { + await unitOfWork.RollbackAsync().ConfigureAwait(false); return ret = new AgvResultObject() { Code = "-1", @@ -855,11 +836,9 @@ public class KittingIssueJobAppService Message = string.Join(",", errors.ToArray()) }; } - - var dto = new KittingIssueJobDetailDTO(); dto.InjectFrom(entity); - dto.HandledToLocationCode = toloc.Code; + dto.HandledToLocationCode = tolocation.Code; dto.HandledToLocationGroup = tolocation.LocationGroupCode; dto.HandledToLocationArea = tolocation.AreaCode; dto.HandledToLocationErpCode = tolocation.ErpLocationCode; @@ -875,19 +854,17 @@ public class KittingIssueJobAppService dto.HandledFromLocationArea = fromlocation.AreaCode; dto.HandledFromLocationErpCode = fromlocation.ErpLocationCode; dto.HandledFromQty = detail.MatQty; - dto.HandledFromLot = string.Empty; + dto.HandledFromLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; dto.HandledFromPackingCode = string.Empty; details.Add(dto); - - - //await ExecuteDetailExtAsync(itm.Id, entity.Id, dto).ConfigureAwait(false); } if (errors.Count > 0) { + await unitOfWork.RollbackAsync().ConfigureAwait(false); ret = new AgvResultObject() { Code = "-1", @@ -912,9 +889,9 @@ public class KittingIssueJobAppService { Code = "-1", ReqCode = job.KittingRequestNumber, - Message = ex.Message, + Message = ex.Message }; - await unitOfWork.RollbackAsync(); + await unitOfWork.RollbackAsync().ConfigureAwait(false); return ret; } @@ -930,6 +907,77 @@ public class KittingIssueJobAppService return ret; } + /// + /// 调用Agv接口实现 + /// + /// + /// + private async Task SendInterFaceAsync(KittingIssueJobDTO job) + { +#if DEBUG + +#endif + var ret = new AgvResultObject + { + Code = "0", + ReqCode = job.KittingRequestNumber, + Message = "OK" + }; + using var unitOfWork = _unitOfWorkManager.Begin(); + try + { + 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(); + + 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)) + { + var username = _agvOptions.Value.UserName; + var password = _agvOptions.Value.Password; + httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", + Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); + } + + var client = new AgvJobClient(_agvOptions.Value.Address, httpclient, _agvOptions.Value.Path); + ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false); + + } + catch (Exception e) + { + ret = new AgvResultObject(); + ret.Code = "1"; + ret.Message = e.Message; + ret.ReqCode = job.KittingRequestNumber; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + throw new UserFriendlyException($"接口报错 错误信息{e.Message}"); + } + 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 5a0949109..ebda34d65 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 @@ -17,6 +17,7 @@ using Volo.Abp; using Volo.Abp.ObjectMapping; using Volo.Abp.Uow; using Volo.Abp.Users; +using Win_in.Sfs.Basedata.Application; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; @@ -50,6 +51,7 @@ public class SparePartIssueJobAppService private readonly IOptions _agvOptions; private readonly IPostionLocationAppService _postionLocationAppService; private readonly ILogger _logger; + private readonly IItemBasicAppService _itemBasicAppService; protected ISparePartIssueRequestAppService SparePartIssueRequestAppService => LazyServiceProvider.LazyGetRequiredService(); @@ -61,7 +63,7 @@ public class SparePartIssueJobAppService ISparePartIssueNoteAppService sparePartIssueNoteAppService, IExpectOutAppService expectOutAppService , IHttpClientFactory httpClientFactory , IOptions options, ITransferLibRequestAppService transferLibRequestAppService, ICurrentUser currentUser, ILogger logger - , UnitOfWorkManager unitOfWorkManager, IOptions agvOptions + , UnitOfWorkManager unitOfWorkManager, IOptions agvOptions, IItemBasicAppService itemBasicAppService ) : base( repository, sparePartIssueJobManager) { @@ -77,6 +79,7 @@ public class SparePartIssueJobAppService _unitOfWorkManager = unitOfWorkManager; _agvOptions = agvOptions; _logger = logger; + _itemBasicAppService = itemBasicAppService; } [HttpPost("get-by-number-2")] @@ -676,69 +679,46 @@ public class SparePartIssueJobAppService handledToQty).ConfigureAwait(false); } - [HttpPost("PushOutTask")] - public async Task PushOutTaskAsync(SparePartIssueJobDTO job) + /// + /// 调用 Agv 接口 + /// + /// + /// + /// + /// + [HttpPost("call-agv")] + public async Task CallAgvAsync(SparePartIssueJobDTO input) { - var ret = new AgvResultObject + var res = new ReusltObject(); + List errors = new List(); + List successList = new List(); + + var jobres = await SendInterFaceAsync(input).ConfigureAwait(false); + if (jobres.Code != "0") { - Code = "0", - ReqCode = job.SparePartRequestNumber, - Message = "OK" - }; - using var unitOfWork = _unitOfWorkManager.Begin(); - try + _logger.LogInformation(jobres.Message); + errors.Add(jobres.Message); + } + else { - var first = job.Details.FirstOrDefault(); - var request = new AgvRequest(); - request.MatCode = first.ItemCode; - request.MatQty = first.HandledToQty; - request.OrderNum = job.Number; - request.OrderType = EnumJobType.SparePartIssueJob.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"); - // _logger.LogInformation($"标志{flag}开始调用高通WMS:传递值{JsonSerializer.Serialize(main)}"); - 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)) - { - var username = _agvOptions.Value.UserName; - var password = _agvOptions.Value.Password; - httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", - Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); - } - - var client = new AgvJobClient(_agvOptions.Value.Address, httpclient, _agvOptions.Value.Path); - ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false); + successList.Add(jobres.Message); } - catch (Exception e) + if (errors.Count > 0) { - ret = new AgvResultObject(); - ret.Code = "1"; - ret.Message = e.Message; - ret.ReqCode = job.SparePartRequestNumber; - await unitOfWork.RollbackAsync().ConfigureAwait(false); - + res.Code = -1; + res.Message = string.Join(",", errors); + res.Data = ""; + return res; } - return ret; + return res; } - [HttpPost("accountOutOrder")] + + /// + /// Agv 回调 接口 + /// + /// + /// + [HttpPost("call-back-agv")] public async Task CallBackAgvAsync(AgvRequestDto request) { var json = JsonSerializer.Serialize(request); @@ -749,13 +729,11 @@ public class SparePartIssueJobAppService var errors = new List(); var first = request.Data.FirstOrDefault(); var job = await _repository.GetAsync(p => p.Number == first.OrderNum).ConfigureAwait(false); - var ret = new AgvResultObject { Code = "0", Message = "OK", ReqCode = job.SparePartRequestNumber, - }; using var unitOfWork = _unitOfWorkManager.Begin(); try @@ -771,8 +749,8 @@ public class SparePartIssueJobAppService { errors.Add($"任务号{string.Join(",", numbers)}不存在!"); } - var dtos = ObjectMapper.Map, List>(entities); + foreach (var itm in dtos) { var arys = jobs.Where(p => p.OrderNum == itm.Number); @@ -780,7 +758,6 @@ public class SparePartIssueJobAppService var details = new List(); foreach (var detail in arys) { - var fromloc = await _postionLocationAppService.GetByCodeAsync(detail.BeginPosition).ConfigureAwait(false); if (fromloc == null) { @@ -816,14 +793,20 @@ public class SparePartIssueJobAppService errors.Add($"结束点{detail.EndPosition}库位没查到"); } + var item = await _itemBasicAppService.GetByCodeAsync(detail.MatCode).ConfigureAwait(false); + if (item == null) + { + errors.Add($"零件号{detail.MatCode}不存在!"); + } var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.MatCode); if (entity == null) { - errors.Add($"物料号{detail.MatCode}不在任务明细内!"); + errors.Add($"零件号{detail.MatCode}不在任务明细内!"); } if (errors.Count > 0) { + await unitOfWork.RollbackAsync().ConfigureAwait(false); return ret = new AgvResultObject() { Code = "-1", @@ -831,12 +814,9 @@ public class SparePartIssueJobAppService Message = string.Join(",", errors.ToArray()) }; } - - - var dto = new SparePartIssueJobDetailDTO(); dto.InjectFrom(entity); - dto.HandledToLocationCode = toloc.Code; + dto.HandledToLocationCode = tolocation.Code; dto.HandledToLocationGroup = tolocation.LocationGroupCode; dto.HandledToLocationArea = tolocation.AreaCode; dto.HandledToLocationErpCode = tolocation.ErpLocationCode; @@ -852,19 +832,17 @@ public class SparePartIssueJobAppService dto.HandledFromLocationArea = fromlocation.AreaCode; dto.HandledFromLocationErpCode = fromlocation.ErpLocationCode; dto.HandledFromQty = detail.MatQty; - dto.HandledFromLot = string.Empty; + dto.HandledFromLot = !string.IsNullOrEmpty(detail.BatchAttr07) ? detail.BatchAttr07 : string.Empty; dto.HandledFromPackingCode = string.Empty; details.Add(dto); - - - //await ExecuteDetailExtAsync(itm.Id, entity.Id, dto).ConfigureAwait(false); } if (errors.Count > 0) { + await unitOfWork.RollbackAsync().ConfigureAwait(false); ret = new AgvResultObject() { Code = "-1", @@ -889,9 +867,9 @@ public class SparePartIssueJobAppService { Code = "-1", ReqCode = job.SparePartRequestNumber, - Message = ex.Message, + Message = ex.Message }; - await unitOfWork.RollbackAsync(); + await unitOfWork.RollbackAsync().ConfigureAwait(false); return ret; } @@ -907,6 +885,77 @@ public class SparePartIssueJobAppService return ret; } + /// + /// 调用Agv接口实现 + /// + /// + /// + private async Task SendInterFaceAsync(SparePartIssueJobDTO job) + { +#if DEBUG + +#endif + var ret = new AgvResultObject + { + Code = "0", + ReqCode = job.SparePartRequestNumber, + Message = "OK" + }; + using var unitOfWork = _unitOfWorkManager.Begin(); + try + { + var first = job.Details.FirstOrDefault(); + var request = new AgvRequest(); + request.MatCode = first.ItemCode; + request.MatQty = first.HandledToQty; + request.OrderNum = job.Number; + request.OrderType = EnumJobType.SparePartIssueJob.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"); + + 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)) + { + var username = _agvOptions.Value.UserName; + var password = _agvOptions.Value.Password; + httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", + Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))); + } + + var client = new AgvJobClient(_agvOptions.Value.Address, httpclient, _agvOptions.Value.Path); + ret = await client.PushOutTask4FWAsync(request).ConfigureAwait(false); + + } + catch (Exception e) + { + ret = new AgvResultObject(); + ret.Code = "1"; + ret.Message = e.Message; + ret.ReqCode = job.SparePartRequestNumber; + await unitOfWork.RollbackAsync().ConfigureAwait(false); + throw new UserFriendlyException($"接口报错 错误信息{e.Message}"); + } + return ret; + } + #endregion }