修复bug
This commit is contained in:
@@ -1264,6 +1264,11 @@
|
||||
</summary>
|
||||
<param name="operateId"></param>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Entitys.OutStock.RepeatSync">
|
||||
<summary>
|
||||
重传
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Entitys.OutStock.GenerateNo">
|
||||
<summary>
|
||||
生成单据号
|
||||
@@ -1805,6 +1810,11 @@
|
||||
<param name="isSuccess"></param>
|
||||
<param name="remark"></param>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Entitys.TakeStock.RepeatSync">
|
||||
<summary>
|
||||
重传
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Entitys.TakeStock.GenerateNo">
|
||||
<summary>
|
||||
生成单据号
|
||||
@@ -2416,6 +2426,9 @@
|
||||
<member name="M:WMS.Web.Domain.Infrastructure.ITakeStockRepositories.GetEntityList(System.Collections.Generic.List{System.Int32})">
|
||||
查询实体集合
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Infrastructure.ITakeStockRepositories.EditEntityList(System.Collections.Generic.List{WMS.Web.Domain.Entitys.TakeStock},System.Boolean)">
|
||||
修改实体集合
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Infrastructure.ITransactionRepositories.GetTransaction">
|
||||
<summary>
|
||||
获取事务 用来处理即时库存
|
||||
@@ -4101,7 +4114,7 @@
|
||||
<param name="loginInfo"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Services.OutStockService.Sync(WMS.Web.Core.Dto.OperateRequest,WMS.Web.Core.Dto.Login.LoginInDto)">
|
||||
<member name="M:WMS.Web.Domain.Services.OutStockService.Sync(WMS.Web.Core.Dto.OperateRequest,WMS.Web.Core.Dto.Login.LoginInDto,System.Boolean)">
|
||||
<summary>
|
||||
同步金蝶
|
||||
</summary>
|
||||
@@ -4969,14 +4982,14 @@
|
||||
<param name="loginInfo"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Services.TakeStockService.Sync(WMS.Web.Core.Dto.OperateRequest)">
|
||||
<member name="M:WMS.Web.Domain.Services.TakeStockService.Sync(WMS.Web.Core.Dto.OperateRequest,System.Boolean)">
|
||||
<summary>
|
||||
同步金蝶
|
||||
</summary>
|
||||
<param name="dto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Services.TakeStockService.Loss_Profit(WMS.Web.Domain.Entitys.TakeStock,Microsoft.Extensions.DependencyInjection.IServiceScope)">
|
||||
<member name="M:WMS.Web.Domain.Services.TakeStockService.Loss_Profit(WMS.Web.Domain.Entitys.TakeStock)">
|
||||
<summary>
|
||||
盘盈盘亏同步金蝶
|
||||
</summary>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -127,7 +127,7 @@ namespace WMS.Web.Repositories
|
||||
|
||||
try
|
||||
{
|
||||
var res = await _context.TakeStock.Include(x=>x.Details)
|
||||
var res = await _context.TakeStock.Include(x => x.Details)
|
||||
.FirstOrDefaultAsync(f => f.Id == entity.Id);
|
||||
if (res == null) return null;
|
||||
|
||||
@@ -148,9 +148,37 @@ namespace WMS.Web.Repositories
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> EditEntityList(List<TakeStock> entitys, bool isTransaction = true)
|
||||
{
|
||||
IDbContextTransaction _transaction = null;
|
||||
if (isTransaction)
|
||||
_transaction = _context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
List<int> list = entitys.Select(s => s.Id).ToList();
|
||||
|
||||
var res = await _context.TakeStock
|
||||
.Include(s => s.Details)
|
||||
.Where(f => list.Contains(f.Id)).ToListAsync();
|
||||
|
||||
_mapper.ToMapList(entitys, res);
|
||||
_mapper.ToMapList(entitys.SelectMany(s => s.Details).ToList(), res.SelectMany(s => s.Details).ToList());
|
||||
await _context.SaveChangesAsync();
|
||||
if (_transaction != null)
|
||||
_transaction.Commit();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_transaction != null)
|
||||
_transaction.Rollback();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public async Task<List<TakeStock>> GetEntityList(List<int> ids)
|
||||
{
|
||||
var res = await _context.TakeStock.Include(x=>x.Details)
|
||||
var res = await _context.TakeStock.Include(x => x.Details)
|
||||
.Where(f => ids.Contains(f.Id))
|
||||
.ToListAsync();
|
||||
|
||||
@@ -213,7 +241,7 @@ namespace WMS.Web.Repositories
|
||||
Unit = _erpBasicDataExtendService.GetMaterialUnitName(materials, s.detail.MaterialId),
|
||||
Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, companyId, s.detail.StockCode + s.detail.OrgCode),
|
||||
SubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, companyId, s.detail.SubStockId),
|
||||
Erp_SubStock= _erpBasicDataExtendService.GetSubStockName(subStocks, s.detail.Erp_SubStockCode),
|
||||
Erp_SubStock = _erpBasicDataExtendService.GetSubStockName(subStocks, s.detail.Erp_SubStockCode),
|
||||
MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.detail.MaterialId),
|
||||
MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, s.detail.MaterialId),
|
||||
Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.detail.MaterialId),
|
||||
@@ -222,7 +250,7 @@ namespace WMS.Web.Repositories
|
||||
FinalQty = s.detail.FinalQty,
|
||||
ResultType = s.order.ResultType.GetRemark(),
|
||||
Remark = s.detail.Remark,
|
||||
FailRemark=s.order.FailRemark,
|
||||
FailRemark = s.order.FailRemark,
|
||||
Creator = _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.order.CreatorId),
|
||||
Date = s.order.Date.DateToStringSeconds(),
|
||||
SuccessSync = s.order.SuccessSync == SyncStatus.Success ? "成功" : (s.order.SuccessSync == SyncStatus.SyncIng ? "同步中" : "失败"),
|
||||
@@ -234,7 +262,7 @@ namespace WMS.Web.Repositories
|
||||
|
||||
public async Task<(object obj, int total)> GetListField(TakeStockQueryRequest dto, int companyId)
|
||||
{
|
||||
return await GetListAsync(dto,companyId);
|
||||
return await GetListAsync(dto, companyId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user