修复bug

This commit is contained in:
18942506660
2023-12-22 14:26:39 +08:00
parent 2184ff33f7
commit 25b301c7e6
9 changed files with 116 additions and 33 deletions

View File

@@ -133,11 +133,11 @@ namespace WMS.Web.Domain.Entitys
/// 同步金蝶(成功)
/// </summary>
/// <param name="operateId"></param>
public void SyncSuccess(int erpDetailId, int operateId,string erpBillNo)
public void SyncSuccess(int erpDetailId, int operateId, string erpBillNo)
{
//foreach (var e in erpDetailIds)
// this.SuccessSyncFail.Remove(e);
var erpd = this.Details.SelectMany(s => s.ErpDetails).FirstOrDefault(w => w.Erp_DetailId==erpDetailId);
var erpd = this.Details.SelectMany(s => s.ErpDetails).FirstOrDefault(w => w.Erp_DetailId == erpDetailId);
erpd.SuccessSync = SyncStatus.Success;
erpd.ErpSyncBillNo = erpBillNo;
//foreach (var e in erpd)
@@ -147,7 +147,7 @@ namespace WMS.Web.Domain.Entitys
//}
//所有erp明细同步成功才是整个单据成功
var erpDetails = this.Details.SelectMany(s => s.ErpDetails);
if (erpDetails.Where(w => w.SuccessSync == SyncStatus.Success).Count()== erpDetails.Count())
if (erpDetails.Where(w => w.SuccessSync == SyncStatus.Success).Count() == erpDetails.Count())
{
this.SuccessSync = SyncStatus.Success;
this.Remark = "";
@@ -168,7 +168,23 @@ namespace WMS.Web.Domain.Entitys
this.OperateId = operateId;
this.SyncTime = DateTime.Now;
}
/// <summary>
/// 重传
/// </summary>
public void RepeatSync()
{
//只有完全失败的情况下才能重传
if (this.SuccessSync != SyncStatus.Fail) return;
this.SuccessSync = SyncStatus.SyncIng;
var erpDetails = this.Details.SelectMany(s => s.ErpDetails)
.Where(w => w.SuccessSync == SyncStatus.Fail)
.ToList();
foreach (var e in erpDetails)
{
e.SuccessSync = SyncStatus.SyncIng;
}
this.Remark = "";
}
/// <summary>
/// 生成单据号
/// </summary>

View File

@@ -81,6 +81,17 @@ namespace WMS.Web.Domain.Entitys
this.FailRemark = remark;
this.ErpSyncBillNo = erpBillNo;
}
/// <summary>
/// 重传
/// </summary>
public void RepeatSync()
{
//只有完全失败的情况下才能重传
if (this.SuccessSync != SyncStatus.Fail) return;
this.SuccessSync = SyncStatus.SyncIng;
this.FailRemark = "";
}
/// <summary>
/// 生成单据号
/// </summary>

View File

@@ -18,7 +18,7 @@ namespace WMS.Web.Domain.IService
//出库单保存
Task<Result> Save(SaveOutStockRequest dto, LoginInDto loginInfo);
// 同步金蝶
Task<Result> Sync(OperateRequest dto, LoginInDto loginInfo);
Task<Result> Sync(OperateRequest dto, LoginInDto loginInfo, bool isRepeatSync = true);
}
}

View File

@@ -19,8 +19,8 @@ namespace WMS.Web.Domain.IService
//保存
Task<Result> Save(List<SaveTakeStockRequest> dto, LoginInDto loginInfo);
// 同步金蝶
Task<Result> Sync(OperateRequest dto);
Task<Result> Sync(OperateRequest dto,bool isRepeatSync=true);
//盘亏盘亏
Task<Result> Loss_Profit(TakeStock entity, IServiceScope scope);
Task<Result> Loss_Profit(TakeStock entity);
}
}

View File

@@ -24,5 +24,7 @@ namespace WMS.Web.Domain.Infrastructure
Task<(List<TakeStockQueryInfoResponse> list, int total)> GetListAsync(TakeStockQueryRequest dto, int companyId = 0);
/// 查询实体集合
Task<List<TakeStock>> GetEntityList(List<int> ids);
/// 修改实体集合
Task<bool> EditEntityList(List<TakeStock> entitys, bool isTransaction = true);
}
}

View File

@@ -202,7 +202,7 @@ namespace WMS.Web.Domain.Services
{
OperateRequest oRequest = new OperateRequest();
oRequest.Ids.Add(entity.Id);
await Sync(oRequest, loginInfo);
await Sync(oRequest, loginInfo,false);
}
return Result.ReSuccess();
@@ -212,16 +212,21 @@ namespace WMS.Web.Domain.Services
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
public Task<Result> Sync(OperateRequest dto, LoginInDto loginInfo)
public Task<Result> Sync(OperateRequest dto, LoginInDto loginInfo, bool isRepeatSync = true)
{
var list = _outStockRepositories.GetEntityList(dto.Ids).GetAwaiter().GetResult();
list = list.Where(w => w.SuccessSync == SyncStatus.Fail).ToList();
var isSuccess = true;
if (isRepeatSync)
{
list.ForEach(f => f.RepeatSync());
isSuccess = _outStockRepositories.EditEntityList(list, true).GetAwaiter().GetResult();
}
Task.Run(async () =>
{
var scope = _serviceScopeFactory.CreateScope();
var sc_outStockRepositories = scope.ServiceProvider.GetRequiredService<IOutStockRepositories>();
var list =await sc_outStockRepositories.GetEntityList(dto.Ids);
foreach (var entity in list)
{
var res = await SalOutStock(entity, loginInfo, scope);
var res = await SalOutStock(entity, loginInfo);
if (!res.IsSuccess)
_logger.LogError($"出库单同步失败:{res.Message}");
}
@@ -233,8 +238,9 @@ namespace WMS.Web.Domain.Services
/// 同步金蝶销售出库
/// </summary>
/// <returns></returns>
private async Task<Result> SalOutStock(OutStock entity, LoginInDto loginInfo, IServiceScope scope)
private async Task<Result> SalOutStock(OutStock entity, LoginInDto loginInfo)
{
var scope = _serviceScopeFactory.CreateScope();
var sc_outStockRepositories = scope.ServiceProvider.GetRequiredService<IOutStockRepositories>();
if (entity.Type != OutStockType.Sal) return Result.ReSuccess();
@@ -244,7 +250,7 @@ namespace WMS.Web.Domain.Services
// .Select(s => s.Key).ToList();//同步失败的来源单号
// //找到单据里需要同步的单据
//var sourcNos = entity.Details.SelectMany(s => s.ErpDetails).GroupBy(s => s.SourceBillNo).Select(s => s.Key);
var erpDetails = entity.Details.SelectMany(s => s.ErpDetails).Where(w => w.SuccessSync == SyncStatus.Fail).ToList();
var erpDetails = entity.Details.SelectMany(s => s.ErpDetails).Where(w => w.SuccessSync == SyncStatus.SyncIng).ToList();
foreach (var s in erpDetails)
{
var erp_details = entity.Details

View File

@@ -141,7 +141,7 @@ namespace WMS.Web.Domain.Services
//同步金蝶
OperateRequest oRequest = new OperateRequest();
oRequest.Ids = list.Select(s => s.Id).ToList();
await Sync(oRequest);
await Sync(oRequest,false);
return Result.ReSuccess();
}
@@ -151,23 +151,29 @@ namespace WMS.Web.Domain.Services
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
public Task<Result> Sync(OperateRequest dto)
public Task<Result> Sync(OperateRequest dto, bool isRepeatSync = true)
{
var list = _takeStockRepositories.GetEntityList(dto.Ids).GetAwaiter().GetResult();
list = list.Where(w => w.SuccessSync == SyncStatus.Fail).ToList();
var isSuccess = true;
if (isRepeatSync)
{
list.ForEach(f => f.RepeatSync());
isSuccess = _takeStockRepositories.EditEntityList(list, true).GetAwaiter().GetResult();
}
Task.Run(async () =>
{
var scope = _serviceScopeFactory.CreateScope();
var sc_takeStockRepositories = scope.ServiceProvider.GetRequiredService<ITakeStockRepositories>();
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)
{
var res = await Loss_Profit(entity, scope);
var res = await Loss_Profit(entity);
if (!res.IsSuccess)
_logger.LogError($"盘点同步失败:{res.Message}");
}
});
return Task.FromResult(Result.ReSuccess());
if (isSuccess)
return Task.FromResult(Result.ReSuccess());
else
return Task.FromResult(Result.ReFailure(ResultCodes.DateWriteError));
}
/// <summary>
@@ -175,11 +181,12 @@ namespace WMS.Web.Domain.Services
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public async Task<Result> Loss_Profit(TakeStock entity, IServiceScope scope)
public async Task<Result> Loss_Profit(TakeStock entity)
{
_logger.LogInformation($"盘点同步金蝶: {JsonConvert.SerializeObject(entity)}");
try
{
var scope = _serviceScopeFactory.CreateScope();
var sc_erpService = scope.ServiceProvider.GetRequiredService<IErpService>();
var sc_erpBasicDataExtendService = scope.ServiceProvider.GetRequiredService<IErpBasicDataExtendService>();
var sc_takeStockRepositories = scope.ServiceProvider.GetRequiredService<ITakeStockRepositories>();