From 25b301c7e63ea77cb006eecc010d88eee921b119 Mon Sep 17 00:00:00 2001
From: 18942506660 <18942506660@A18942506660>
Date: Fri, 22 Dec 2023 14:26:39 +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 | 19 ++++++++--
src/WMS.Web.Domain/Entitys/OutStock.cs | 24 ++++++++++--
src/WMS.Web.Domain/Entitys/TakeStock.cs | 11 ++++++
.../IService/IOutStockService.cs | 2 +-
.../IService/ITakeStockService.cs | 4 +-
.../Infrastructure/ITakeStockRepositories.cs | 2 +
.../Services/OutStockService.cs | 22 +++++++----
.../Services/TakeStockService.cs | 27 ++++++++-----
.../TakeStockRepositories.cs | 38 ++++++++++++++++---
9 files changed, 116 insertions(+), 33 deletions(-)
diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
index 1a32a39b..8b453182 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
@@ -1264,6 +1264,11 @@
+
+
+ 重传
+
+
生成单据号
@@ -1805,6 +1810,11 @@
+
+
+ 重传
+
+
生成单据号
@@ -2416,6 +2426,9 @@
查询实体集合
+
+ 修改实体集合
+
获取事务 用来处理即时库存
@@ -4101,7 +4114,7 @@
-
+
同步金蝶
@@ -4969,14 +4982,14 @@
-
+
同步金蝶
-
+
盘盈盘亏同步金蝶
diff --git a/src/WMS.Web.Domain/Entitys/OutStock.cs b/src/WMS.Web.Domain/Entitys/OutStock.cs
index b57263b1..ae3ea180 100644
--- a/src/WMS.Web.Domain/Entitys/OutStock.cs
+++ b/src/WMS.Web.Domain/Entitys/OutStock.cs
@@ -133,11 +133,11 @@ namespace WMS.Web.Domain.Entitys
/// 同步金蝶(成功)
///
///
- 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;
}
-
+ ///
+ /// 重传
+ ///
+ 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 = "";
+ }
///
/// 生成单据号
///
diff --git a/src/WMS.Web.Domain/Entitys/TakeStock.cs b/src/WMS.Web.Domain/Entitys/TakeStock.cs
index 2a5e0ab6..828aea38 100644
--- a/src/WMS.Web.Domain/Entitys/TakeStock.cs
+++ b/src/WMS.Web.Domain/Entitys/TakeStock.cs
@@ -81,6 +81,17 @@ namespace WMS.Web.Domain.Entitys
this.FailRemark = remark;
this.ErpSyncBillNo = erpBillNo;
}
+ ///
+ /// 重传
+ ///
+ public void RepeatSync()
+ {
+ //只有完全失败的情况下才能重传
+ if (this.SuccessSync != SyncStatus.Fail) return;
+ this.SuccessSync = SyncStatus.SyncIng;
+ this.FailRemark = "";
+ }
+
///
/// 生成单据号
///
diff --git a/src/WMS.Web.Domain/IService/IOutStockService.cs b/src/WMS.Web.Domain/IService/IOutStockService.cs
index 872409c8..73389d95 100644
--- a/src/WMS.Web.Domain/IService/IOutStockService.cs
+++ b/src/WMS.Web.Domain/IService/IOutStockService.cs
@@ -18,7 +18,7 @@ namespace WMS.Web.Domain.IService
//出库单保存
Task Save(SaveOutStockRequest dto, LoginInDto loginInfo);
// 同步金蝶
- Task Sync(OperateRequest dto, LoginInDto loginInfo);
+ Task Sync(OperateRequest dto, LoginInDto loginInfo, bool isRepeatSync = true);
}
}
diff --git a/src/WMS.Web.Domain/IService/ITakeStockService.cs b/src/WMS.Web.Domain/IService/ITakeStockService.cs
index 9b9071f8..3ae84aa8 100644
--- a/src/WMS.Web.Domain/IService/ITakeStockService.cs
+++ b/src/WMS.Web.Domain/IService/ITakeStockService.cs
@@ -19,8 +19,8 @@ namespace WMS.Web.Domain.IService
//保存
Task Save(List dto, LoginInDto loginInfo);
// 同步金蝶
- Task Sync(OperateRequest dto);
+ Task Sync(OperateRequest dto,bool isRepeatSync=true);
//盘亏盘亏
- Task Loss_Profit(TakeStock entity, IServiceScope scope);
+ Task Loss_Profit(TakeStock entity);
}
}
diff --git a/src/WMS.Web.Domain/Infrastructure/ITakeStockRepositories.cs b/src/WMS.Web.Domain/Infrastructure/ITakeStockRepositories.cs
index 2e23ac83..7311c221 100644
--- a/src/WMS.Web.Domain/Infrastructure/ITakeStockRepositories.cs
+++ b/src/WMS.Web.Domain/Infrastructure/ITakeStockRepositories.cs
@@ -24,5 +24,7 @@ namespace WMS.Web.Domain.Infrastructure
Task<(List list, int total)> GetListAsync(TakeStockQueryRequest dto, int companyId = 0);
/// 查询实体集合
Task> GetEntityList(List ids);
+ /// 修改实体集合
+ Task EditEntityList(List entitys, bool isTransaction = true);
}
}
diff --git a/src/WMS.Web.Domain/Services/OutStockService.cs b/src/WMS.Web.Domain/Services/OutStockService.cs
index 9c7bef16..f8d73efd 100644
--- a/src/WMS.Web.Domain/Services/OutStockService.cs
+++ b/src/WMS.Web.Domain/Services/OutStockService.cs
@@ -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
///
///
///
- public Task Sync(OperateRequest dto, LoginInDto loginInfo)
+ public Task 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();
- 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
/// 同步金蝶销售出库
///
///
- private async Task SalOutStock(OutStock entity, LoginInDto loginInfo, IServiceScope scope)
+ private async Task SalOutStock(OutStock entity, LoginInDto loginInfo)
{
+ var scope = _serviceScopeFactory.CreateScope();
var sc_outStockRepositories = scope.ServiceProvider.GetRequiredService();
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
diff --git a/src/WMS.Web.Domain/Services/TakeStockService.cs b/src/WMS.Web.Domain/Services/TakeStockService.cs
index 3747ba96..b0dac7aa 100644
--- a/src/WMS.Web.Domain/Services/TakeStockService.cs
+++ b/src/WMS.Web.Domain/Services/TakeStockService.cs
@@ -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
///
///
///
- public Task Sync(OperateRequest dto)
+ public Task 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();
- 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));
}
///
@@ -175,11 +181,12 @@ namespace WMS.Web.Domain.Services
///
///
///
- public async Task Loss_Profit(TakeStock entity, IServiceScope scope)
+ public async Task Loss_Profit(TakeStock entity)
{
_logger.LogInformation($"盘点同步金蝶: {JsonConvert.SerializeObject(entity)}");
try
{
+ var scope = _serviceScopeFactory.CreateScope();
var sc_erpService = scope.ServiceProvider.GetRequiredService();
var sc_erpBasicDataExtendService = scope.ServiceProvider.GetRequiredService();
var sc_takeStockRepositories = scope.ServiceProvider.GetRequiredService();
diff --git a/src/WMS.Web.Repositories/TakeStockRepositories.cs b/src/WMS.Web.Repositories/TakeStockRepositories.cs
index 78aae65c..97ba483a 100644
--- a/src/WMS.Web.Repositories/TakeStockRepositories.cs
+++ b/src/WMS.Web.Repositories/TakeStockRepositories.cs
@@ -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 EditEntityList(List entitys, bool isTransaction = true)
+ {
+ IDbContextTransaction _transaction = null;
+ if (isTransaction)
+ _transaction = _context.Database.BeginTransaction();
+ try
+ {
+ List 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> GetEntityList(List 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);
}
}
}