diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
index b1f04aaf..d7f4a7f1 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
@@ -1308,6 +1308,18 @@
+
+
+ 入库任务单-服务接口
+
+
+
+
+ 同步:采购入库类型单据
+
+
+
+
出库服务
@@ -1876,6 +1888,18 @@
+
+
+ 入库任务单-服务
+
+
+
+
+ 同步:采购入库类型单据
+
+
+
+
出库服务
diff --git a/src/WMS.Web.Domain/IService/IInStockTaskService.cs b/src/WMS.Web.Domain/IService/IInStockTaskService.cs
new file mode 100644
index 00000000..5cea3269
--- /dev/null
+++ b/src/WMS.Web.Domain/IService/IInStockTaskService.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using WMS.Web.Core.Internal.Results;
+
+namespace WMS.Web.Domain.IService
+{
+ ///
+ /// 入库任务单-服务接口
+ ///
+ public interface IInStockTaskService
+ {
+ ///
+ /// 同步:采购入库类型单据
+ ///
+ ///
+ ///
+ Task SsynPurchaseInStock(bool isTransaction);
+ }
+}
diff --git a/src/WMS.Web.Domain/QuartzJob/InStockOrderQuartzJob.cs b/src/WMS.Web.Domain/QuartzJob/InStockOrderQuartzJob.cs
index fb82291b..5b7ccfd6 100644
--- a/src/WMS.Web.Domain/QuartzJob/InStockOrderQuartzJob.cs
+++ b/src/WMS.Web.Domain/QuartzJob/InStockOrderQuartzJob.cs
@@ -1,4 +1,5 @@
-using Microsoft.Extensions.DependencyInjection;
+using Microsoft.EntityFrameworkCore.Storage;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Quartz;
@@ -7,6 +8,7 @@ using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using WMS.Web.Domain.Infrastructure;
+using WMS.Web.Domain.IService;
using WMS.Web.Domain.IService.Public;
using WMS.Web.Domain.Options;
@@ -20,20 +22,20 @@ namespace WMS.Web.Domain.QuartzJob
private readonly ILogger _logger;
private readonly IServiceScopeFactory _serviceScopeFactory;
private readonly AppOptions _options;
- private readonly IInStockTaskRepositories _inStockTaskRepositories;
- private readonly IErpService _erpService;
+ private readonly IInStockTaskService _inStockTaskService;
+ private readonly ITransactionRepositories _transactionRepositories;
public InStockOrderQuartzJob(ILogger logger,
IServiceScopeFactory serviceScopeFactory,
IOptions options,
- IInStockTaskRepositories inStockTaskRepositories,
- IErpService erpService)
+ IInStockTaskService inStockTaskService,
+ ITransactionRepositories transactionRepositories)
{
- this._erpService = erpService;
this._logger = logger;
_serviceScopeFactory = serviceScopeFactory;
this._options = options?.Value;
- _inStockTaskRepositories = inStockTaskRepositories;
+ _inStockTaskService = inStockTaskService;
+ _transactionRepositories = transactionRepositories;
}
///
@@ -45,27 +47,28 @@ namespace WMS.Web.Domain.QuartzJob
{
try
{
-
-
+ //1.事务
+ IDbContextTransaction _transaction = _transactionRepositories.GetTransaction();
+ bool isRollback = false;
+ bool isTransaction = false;
+ //2.记录:开始时间
var begindatetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
+ _logger.LogInformation($"同步金蝶入库单数据:执行开始时间->{begindatetime}");
+ //3.同步数据
+ var result = await _inStockTaskService.SsynPurchaseInStock(isTransaction);
+ if (!result.IsSuccess) isRollback = true;
-
- var purchaseInStockOrder = await _erpService.BillQueryForPurchaseInStock();
-
-
-
+ //4.提交事务
+ var isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction);
+
+ //5.记录:结束时间
var enddatetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
- //_logger.LogInformation($"《获取金蝶数据》->执行开始时间:{begindatetime},\r\n" +
- //$"执行条数:{result.Data?.ExecuteCount}条,\r\n" +
- //$"新增数:{result.Data?.ExecuteCreateCount}条,\r\n" +
- //$"更新数:{result.Data?.ExecuteUpdateCount}条,\r\n" +
- //$"执行结果:{result.Data?.Message},\r\n" +
- //$"执行结束时间:{enddatetime}");
+ _logger.LogInformation($"同步金蝶入库单数据:执行结束时间->{begindatetime}");
}
catch (Exception ex)
{
- _logger.LogInformation($"首页库存金额统计:定时任务执行失败->{ex.Message}");
+ _logger.LogInformation($"同步金蝶入库单数据:定时任务执行失败->{ex.Message}");
}
}
diff --git a/src/WMS.Web.Domain/Services/InStockTaskService.cs b/src/WMS.Web.Domain/Services/InStockTaskService.cs
new file mode 100644
index 00000000..be692a8a
--- /dev/null
+++ b/src/WMS.Web.Domain/Services/InStockTaskService.cs
@@ -0,0 +1,107 @@
+using AutoMapper;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WMS.Web.Core.Dto.Erp.Purchase;
+using WMS.Web.Core.Internal.Results;
+using WMS.Web.Domain.Entitys;
+using WMS.Web.Domain.Infrastructure;
+using WMS.Web.Domain.IService;
+using WMS.Web.Domain.IService.Public;
+using WMS.Web.Domain.Values;
+
+namespace WMS.Web.Domain.Services
+{
+ ///
+ /// 入库任务单-服务
+ ///
+ public class InStockTaskService: IInStockTaskService
+ {
+ private readonly IMapper _mapper;
+ private readonly IErpService _erpService;
+ private readonly ILoginService _loginService;
+ private readonly ITransactionRepositories _transactionRepositories;
+ private readonly IInStockRepositories _inStockRepositories;
+ private readonly IInStockTaskRepositories _inStockTaskRepositories;
+ public InStockTaskService(IMapper mapper, IErpService erpService, ILoginService loginService,
+ ITransactionRepositories transactionRepositories,
+ IInStockRepositories inStockRepositories, IInStockTaskRepositories inStockTaskRepositories)
+ {
+ _mapper = mapper;
+ _erpService = erpService;
+ _loginService = loginService;
+ _transactionRepositories = transactionRepositories;
+ _inStockRepositories = inStockRepositories;
+ _inStockTaskRepositories = inStockTaskRepositories;
+ }
+
+
+ ///
+ /// 同步:采购入库类型单据
+ ///
+ ///
+ ///
+ public async Task SsynPurchaseInStock(bool isTransaction)
+ {
+ //1.获取金蝶数据:采购订单数据
+ var erp_result= await _erpService.BillQueryForPurchaseInStock();
+ if (!erp_result.IsSuccess)
+ return Result.ReFailure(erp_result.Message,erp_result.Status);
+ var erp_list = erp_result.Data;
+
+ //2.通过单据编号找到wms系统现有的任务单;并修改
+ var erp_removeList = new List();
+ var SourceBillNo_list = erp_list.GroupBy(x => x.FBillNo).Select(x => x.Key).ToList();
+ var data_list = await _inStockTaskRepositories.GetListBy(SourceBillNo_list);
+ if (data_list.Count != 0)
+ {
+ //2.1提取出wms任务单明细信息
+ var data_list_details = data_list.SelectMany(x => x.Details).ToList();
+ foreach (var item in data_list_details)
+ {
+ //2.1.1对比erp的物料信息
+ var erp_data = erp_list.Where(x => x.FMaterialId == item.MaterialId).FirstOrDefault();
+ if (erp_data != null)
+ {
+ //2.1.2修改数量
+ item.AccruedQty = erp_data.FQty;
+ erp_removeList.Add(erp_data);
+ }
+ }
+
+ //2.2.提交修改
+ var isSuccess = await _inStockTaskRepositories.UpdateRange(data_list, isTransaction);
+ if (!isSuccess)
+ return ResultList.ReFailure(ResultCodes.DateWriteError);
+
+ //2.3剔除:已修改的单据
+ foreach (var item in erp_removeList)
+ {
+ erp_list.Remove(item);
+ }
+ }
+
+ //3.wms任务单的来源单据编号不存在于erp中,那么就新增
+ if (SourceBillNo_list.Count != 0)
+ {
+ var add_entitys = new List();
+ foreach (var sourceBillNo in SourceBillNo_list)
+ {
+ var dto = new InStockTask();
+ dto.SourceBillNo = sourceBillNo;
+ dto.Create(InstockType.Purchase);
+ dto.Details = _mapper.Map>(erp_list);
+ add_entitys.Add(dto);
+ }
+ //3.1提交新增
+ var isSuccess = await _inStockTaskRepositories.AddRange(add_entitys, isTransaction);
+ if (!isSuccess)
+ return ResultList.ReFailure(ResultCodes.DateWriteError);
+ }
+
+ return Result.ReSuccess();
+ }
+ }
+}
diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs
index c2958af7..aedc3979 100644
--- a/src/WMS.Web.Domain/Services/Public/ErpService.cs
+++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs
@@ -1,5 +1,6 @@
using AutoMapper;
using ERP;
+using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
@@ -34,18 +35,21 @@ namespace WMS.Web.Domain.Services.Public
private ERPGWSoapClient _client;
private readonly IMemoryCache _memoryCache;
private readonly IInStockTaskRepositories _inStockTaskRepositories;
+ public readonly ITransactionRepositories _transactionRepositories;
public ErpService(
IMapper mapper,
IOptions erpOptions,
ILogger logger,
IMemoryCache memoryCache,
- IInStockTaskRepositories inStockTaskRepositories)
+ IInStockTaskRepositories inStockTaskRepositories,
+ ITransactionRepositories transactionRepositories)
{
this._erpOptions = erpOptions?.Value;
this._mapper = mapper;
this._logger = logger;
this._memoryCache = memoryCache;
this._inStockTaskRepositories = inStockTaskRepositories;
+ this._transactionRepositories = transactionRepositories;
}
///
@@ -100,7 +104,7 @@ namespace WMS.Web.Domain.Services.Public
var result = JsonConvert.DeserializeObject>>(result_json);
//5.返回数据的组装
- var list = new List();
+ var erp_list = new List();
foreach (var item in result)
{
var lis = new ErpPurchaseInStockResultDto();
@@ -115,33 +119,13 @@ namespace WMS.Web.Domain.Services.Public
lis.FEntryNote = item[8];
lis.FCreateDate =Convert.ToDateTime(item[9]);
//list.FCHUCHANGPRICE=[10]FCHUCHANGPRICE;//这个是出厂价,但是金蝶测试没有这个字段,正式有的
- list.Add(lis);
+ erp_list.Add(lis);
}
-
- //6.
- var SourceBillNo_list = list.GroupBy(x=>x.FBillNo).Select(x => x.Key).ToList();
- var data_list= await _inStockTaskRepositories.GetListBy(SourceBillNo_list);
- if (data_list.Count != 0)
- {
- var data_details_list= data_list.SelectMany(x => x.Details).ToList();
- foreach (var item in data_details_list)
- {
-
- }
- }
-
- var dto = new InStockTask();
- dto.Create(InstockType.Purchase);
- dto.Details = _mapper.Map>(list);
-
-
-
- return ResultList.ReSuccess(list);
-
+ return ResultList.ReSuccess(erp_list);
}
catch (Exception ex)
{
- return ResultList.ReFailure("错误", 10001);
+ return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error);
}
}
diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs
index a3fcd4bf..6d8fa1e5 100644
--- a/src/WMS.Web.Domain/Values/ResultCodes.cs
+++ b/src/WMS.Web.Domain/Values/ResultCodes.cs
@@ -9,9 +9,9 @@ namespace WMS.Web.Domain.Values
///
public partial class ResultCodes
{
- public static ValueTuple Erp_Login_Error = (1001, "Erp登录返回错误");
+ public static ValueTuple Erp_Login_Error = (1001, "同步金蝶登录错误,请稍候再试");
- public static ValueTuple Erp_BillQuery_Error = (1002, "Erp单据查询返回错误");
+ public static ValueTuple Erp_BillQuery_Error = (1002, "同步金蝶数据出错,请稍等再试");
///
/// 无效
///
diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs
index 6b160fa8..6877e1a1 100644
--- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs
+++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs
@@ -240,6 +240,7 @@ namespace WMS.Web.Repositories.DependencyInjection
Services.AddTransient();
Services.AddTransient();
Services.AddTransient();
+ Services.AddTransient();
}
}