From 7e5b86e932e2f85ada4bffef9865c3bd117eaeb4 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Fri, 22 Dec 2023 11:10:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 4 +- .../IService/ITakeStockService.cs | 5 +- .../Services/TakeStockService.cs | 60 ++++++++++--------- 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index af2e95bf..425b2c9b 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -4976,14 +4976,14 @@ - + 盘盈盘亏同步金蝶 - + 同步金蝶操作 diff --git a/src/WMS.Web.Domain/IService/ITakeStockService.cs b/src/WMS.Web.Domain/IService/ITakeStockService.cs index 19a4a292..9b9071f8 100644 --- a/src/WMS.Web.Domain/IService/ITakeStockService.cs +++ b/src/WMS.Web.Domain/IService/ITakeStockService.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.Extensions.DependencyInjection; +using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; @@ -20,6 +21,6 @@ namespace WMS.Web.Domain.IService // 同步金蝶 Task Sync(OperateRequest dto); //盘亏盘亏 - Task Loss_Profit(TakeStock entity); + Task Loss_Profit(TakeStock entity, IServiceScope scope); } } diff --git a/src/WMS.Web.Domain/Services/TakeStockService.cs b/src/WMS.Web.Domain/Services/TakeStockService.cs index bcde7dfc..cf2c7efa 100644 --- a/src/WMS.Web.Domain/Services/TakeStockService.cs +++ b/src/WMS.Web.Domain/Services/TakeStockService.cs @@ -1,5 +1,6 @@ using AutoMapper; using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System; @@ -40,12 +41,13 @@ namespace WMS.Web.Domain.Services private readonly IBoxInventoryService _boxInventoryService; private readonly IErpBasicDataExtendService _erpBasicDataExtendService; private readonly ISerialNumberService _serialNumberService; + private readonly IServiceScopeFactory _serviceScopeFactory; public TakeStockService(IMapper mapper, ILoginService loginService, IBasicsRepositories transactionRepositories, ITakeStockRepositories takeStockRepositories, ILoginRepositories loginRepositories, ISingleDataService singleDataService, IErpService erpService, ILogger logger, IBoxInventoryService boxInventoryService, IErpBasicDataExtendService erpBasicDataExtendService, - ISerialNumberService serialNumberService) + ISerialNumberService serialNumberService, IServiceScopeFactory serviceScopeFactory) { _mapper = mapper; _loginService = loginService; @@ -58,6 +60,7 @@ namespace WMS.Web.Domain.Services _boxInventoryService = boxInventoryService; _erpBasicDataExtendService = erpBasicDataExtendService; _serialNumberService = serialNumberService; + _serviceScopeFactory = serviceScopeFactory; } /// /// 保存 @@ -151,20 +154,23 @@ namespace WMS.Web.Domain.Services public Task Sync(OperateRequest dto) { _logger.LogInformation($"盘点同步1:{JsonConvert.SerializeObject(dto)}"); + Task.Run(async () => + { + var scope = _serviceScopeFactory.CreateScope(); + var sc_takeStockRepositories = scope.ServiceProvider.GetRequiredService(); + _logger.LogInformation($"盘点同步2"); + var list = await sc_takeStockRepositories.GetEntityList(dto.Ids); + list = list.Where(w => w.SuccessSync == SyncStatus.Fail || w.SuccessSync == SyncStatus.SyncIng).ToList(); + foreach (var entity in list) { - _logger.LogInformation($"盘点同步2"); - var list = _takeStockRepositories.GetEntityList(dto.Ids).GetAwaiter().GetResult(); - list = list.Where(w => w.SuccessSync == SyncStatus.Fail || w.SuccessSync == SyncStatus.SyncIng).ToList(); - foreach (var entity in list) - { - _logger.LogInformation($"盘点同步3"); - var res = await Loss_Profit(entity); - _logger.LogInformation($"盘点同步4:{JsonConvert.SerializeObject(res)}"); - if (!res.IsSuccess) - _logger.LogError($"盘点同步失败:{res.Message}"); - } - }); + _logger.LogInformation($"盘点同步3"); + var res = await Loss_Profit(entity, scope); + _logger.LogInformation($"盘点同步4:{JsonConvert.SerializeObject(res)}"); + if (!res.IsSuccess) + _logger.LogError($"盘点同步失败:{res.Message}"); + } + }); return Task.FromResult(Result.ReSuccess()); } @@ -174,28 +180,25 @@ namespace WMS.Web.Domain.Services /// /// /// - public async Task Loss_Profit(TakeStock entity) + public async Task Loss_Profit(TakeStock entity, IServiceScope scope) { _logger.LogInformation($"盘点同步金蝶: {JsonConvert.SerializeObject(entity)}"); try { + var sc_erpService = scope.ServiceProvider.GetRequiredService(); + var sc_erpBasicDataExtendService = scope.ServiceProvider.GetRequiredService(); + var sc_takeStockRepositories = scope.ServiceProvider.GetRequiredService(); + if (entity.Details.Count() == 0) return Result.ReSuccess(); - var materials_result = await _erpService.BillQueryForMaterial(); + var materials_result = await sc_erpService.BillQueryForMaterial(); if (!materials_result.IsSuccess) return Result.ReFailure(ResultCodes.ErpMaterialError); var materials = materials_result.Data.ToList(); - - //var res = await _erpService.BillQueryForStock(); - //if (!res.IsSuccess) return Result.ReFailure(ResultCodes.ErpStockError); - //var stock = res.Data.FirstOrDefault(f => f.Code == entity.Details[0].StockCode && f.OrgCode == entity.Details[0].OrgCode);//需要根据单点code搜索 - //if (stock == null) return Result.ReFailure(ResultCodes.ErpStockNoData); //组装dto #region 组装dto //子仓库 ORICO_JD:1000008 GD:1000005 HD:1000007 AD:1000004 List detils = new List(); foreach (var d in entity.Details) { - //var subStockCode = _singleDataService.GetSingleDataCode(SingleAction.Stocks, _loginRepositories.CompanyId, d.SubStockId); - var unitNumber = _erpBasicDataExtendService.GetMaterialUnitNumber(materials, d.MaterialId); detils.Add(new ErpTakeStockDetailsSaveDto() { @@ -224,9 +227,9 @@ namespace WMS.Web.Domain.Services //判断盘盈盘亏 FormIdParam type = entity.ResultType == TakeStockType.Loss ? FormIdParam.STK_StockCountLoss : FormIdParam.STK_StockCountGain; //操作金蝶 - var resSync = await ErpOperate(dto, type); + var resSync = await ErpOperate(dto, type, scope); entity.Sync(resSync.result.IsSuccess, resSync.result.Message, resSync.syncStatus, resSync.erpBillNo); - await _takeStockRepositories.Edit(entity, true); + await sc_takeStockRepositories.Edit(entity, true); return Result.ReSuccess(); } catch (Exception ex) @@ -241,11 +244,12 @@ namespace WMS.Web.Domain.Services /// /// /// - private async Task<(Result result, SyncStatus syncStatus, string erpBillNo)> ErpOperate(ErpTakeStockSaveDto dto, FormIdParam type) + private async Task<(Result result, SyncStatus syncStatus, string erpBillNo)> ErpOperate(ErpTakeStockSaveDto dto, FormIdParam type, IServiceScope scope) { + var sc_erpService = scope.ServiceProvider.GetRequiredService(); string formId = type.ToString(); _logger.LogInformation($"盘点单->开始同步金蝶 单号:{dto.BillNo} 数据: {JsonConvert.SerializeObject(dto)}"); - var res_s = await _erpService.Save(dto, formId); + var res_s = await sc_erpService.Save(dto, formId); if (!res_s.IsSuccess) { _logger.LogInformation($"盘点单->保存失败 单号:{dto.BillNo} 错误:{res_s.Message}"); @@ -254,7 +258,7 @@ namespace WMS.Web.Domain.Services //提交 _logger.LogInformation($"盘点单->保存成功 开始提交 单号:{dto.BillNo}"); ErpOperateDto o_dto = new ErpOperateDto(formId, res_s.Data);//res_s.Data - var res = await _erpService.Submit(o_dto, formId); + var res = await sc_erpService.Submit(o_dto, formId); if (!res.IsSuccess) { //如果提交失败 @@ -267,7 +271,7 @@ namespace WMS.Web.Domain.Services } //审核 _logger.LogInformation($"盘点单->提交成功 开始审核 单号:{dto.BillNo}"); - res = await _erpService.Audit(o_dto, formId); + res = await sc_erpService.Audit(o_dto, formId); if (!res.IsSuccess) { //如果审核失败