修复bug

This commit is contained in:
18942506660
2023-12-22 11:10:02 +08:00
parent c664a2dd38
commit 7e5b86e932
3 changed files with 37 additions and 32 deletions

View File

@@ -4976,14 +4976,14 @@
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Services.TakeStockService.Loss_Profit(WMS.Web.Domain.Entitys.TakeStock)">
<member name="M:WMS.Web.Domain.Services.TakeStockService.Loss_Profit(WMS.Web.Domain.Entitys.TakeStock,Microsoft.Extensions.DependencyInjection.IServiceScope)">
<summary>
盘盈盘亏同步金蝶
</summary>
<param name="entity"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Services.TakeStockService.ErpOperate(WMS.Web.Core.Dto.Erp.TakeStock.ErpTakeStockSaveDto,WMS.Web.Domain.Values.Erp.FormIdParam)">
<member name="M:WMS.Web.Domain.Services.TakeStockService.ErpOperate(WMS.Web.Core.Dto.Erp.TakeStock.ErpTakeStockSaveDto,WMS.Web.Domain.Values.Erp.FormIdParam,Microsoft.Extensions.DependencyInjection.IServiceScope)">
<summary>
同步金蝶操作
</summary>

View File

@@ -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<Result> Sync(OperateRequest dto);
//盘亏盘亏
Task<Result> Loss_Profit(TakeStock entity);
Task<Result> Loss_Profit(TakeStock entity, IServiceScope scope);
}
}

View File

@@ -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<TakeStockService> 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;
}
/// <summary>
/// 保存
@@ -151,15 +154,18 @@ namespace WMS.Web.Domain.Services
public Task<Result> Sync(OperateRequest dto)
{
_logger.LogInformation($"盘点同步1:{JsonConvert.SerializeObject(dto)}");
Task.Run(async () =>
{
var scope = _serviceScopeFactory.CreateScope();
var sc_takeStockRepositories = scope.ServiceProvider.GetRequiredService<ITakeStockRepositories>();
_logger.LogInformation($"盘点同步2");
var list = _takeStockRepositories.GetEntityList(dto.Ids).GetAwaiter().GetResult();
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($"盘点同步3");
var res = await Loss_Profit(entity);
var res = await Loss_Profit(entity, scope);
_logger.LogInformation($"盘点同步4:{JsonConvert.SerializeObject(res)}");
if (!res.IsSuccess)
_logger.LogError($"盘点同步失败:{res.Message}");
@@ -174,28 +180,25 @@ namespace WMS.Web.Domain.Services
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public async Task<Result> Loss_Profit(TakeStock entity)
public async Task<Result> Loss_Profit(TakeStock entity, IServiceScope scope)
{
_logger.LogInformation($"盘点同步金蝶: {JsonConvert.SerializeObject(entity)}");
try
{
var sc_erpService = scope.ServiceProvider.GetRequiredService<IErpService>();
var sc_erpBasicDataExtendService = scope.ServiceProvider.GetRequiredService<IErpBasicDataExtendService>();
var sc_takeStockRepositories = scope.ServiceProvider.GetRequiredService<ITakeStockRepositories>();
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_JD1000008 GD1000005 HD1000007 AD1000004
List<ErpTakeStockDetailsSaveDto> detils = new List<ErpTakeStockDetailsSaveDto>();
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
/// <param name="dto"></param>
/// <param name="type"></param>
/// <returns></returns>
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<IErpService>();
string formId = type.ToString();
_logger.LogInformation($"盘点单->开始同步金蝶 单号:{dto.BillNo} 数据: {JsonConvert.SerializeObject(dto)}");
var res_s = await _erpService.Save<ErpTakeStockSaveDto>(dto, formId);
var res_s = await sc_erpService.Save<ErpTakeStockSaveDto>(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)
{
//如果审核失败