From cbefd354018302c2eea341d6eed982987e7349a5 Mon Sep 17 00:00:00 2001 From: tongfei <244188119@qq.com> Date: Mon, 15 Jan 2024 17:56:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/Startup.cs | 2 + src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 14 ++++ src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 5 ++ src/WMS.Web.Core/Help/DateTimeUtil.cs | 35 ++++++++++ src/WMS.Web.Domain/Options/ErpOptions.cs | 7 ++ .../Services/Public/ErpBaseDataSync.cs | 38 ++++++++++ .../Services/Public/ErpService.cs | 37 +++++----- .../TimedJob/ErpBaseDataSyncJob.cs | 70 +++++++++++++++++++ 8 files changed, 187 insertions(+), 21 deletions(-) create mode 100644 src/WMS.Web.Domain/TimedJob/ErpBaseDataSyncJob.cs diff --git a/src/WMS.Web.Api/Startup.cs b/src/WMS.Web.Api/Startup.cs index b24d7b03..c925da8d 100644 --- a/src/WMS.Web.Api/Startup.cs +++ b/src/WMS.Web.Api/Startup.cs @@ -52,11 +52,13 @@ namespace WMS.Web.Api services.AddControllers(); //移除:http请求的默认日志处理器(备注:也可以实现它,自定义自己想要的日志,文档地址https://docs.microsoft.com/zh-cn/dotnet/core/compatibility/aspnet-core/5.0/http-httpclient-instances-log-integer-status-codes) services.RemoveAll(); + services.AddTimedJob(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { + app.UseTimedJob(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 89abcd52..d77eb51b 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -5171,6 +5171,20 @@ DateTime + + + 涓や釜鏃堕棿鐨勫樊锛氬垎閽 + + + + + + + + 褰撳墠鏃堕棿鍜屼粖鏅0鐐逛箣闂寸殑鏃堕棿鐨勫樊锛氬垎閽 + + + 淇濆瓨鍗曚釜key value diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 545b4c7b..99fe97c5 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -5121,6 +5121,11 @@ + + + erp鍩虹鏁版嵁-鍚屾瀹氭椂浠诲姟 + + 鍑哄叆搴撳洖閫绫诲瀷 diff --git a/src/WMS.Web.Core/Help/DateTimeUtil.cs b/src/WMS.Web.Core/Help/DateTimeUtil.cs index bbd1bb99..3f856054 100644 --- a/src/WMS.Web.Core/Help/DateTimeUtil.cs +++ b/src/WMS.Web.Core/Help/DateTimeUtil.cs @@ -164,5 +164,40 @@ namespace WMS.Web.Core.Help return ""; } } + + /// + /// 涓や釜鏃堕棿鐨勫樊锛氬垎閽 + /// + /// + /// + /// + public static double GetTotalMinutesTimeSpan(DateTime beginTime, DateTime endTime) + { + string dateDiff = null;//鑾峰彇褰撳墠鏃堕棿 + TimeSpan ts1 = new TimeSpan(beginTime.Ticks); + TimeSpan ts2 = new TimeSpan(endTime.Ticks); + //鏃堕棿姣旇緝锛屽緱鍑哄樊鍊 + TimeSpan ts = ts1.Subtract(ts2).Duration();//缁撴灉 + dateDiff = ts.Days.ToString() + "澶" + ts.Hours.ToString() + "灏忔椂" + ts.Minutes.ToString() + "鍒嗛挓" + ts.Seconds.ToString() + "绉"; + return ts.TotalMinutes; + } + + /// + /// 褰撳墠鏃堕棿鍜屼粖鏅0鐐逛箣闂寸殑鏃堕棿鐨勫樊锛氬垎閽 + /// + /// + public static double GetTotalMinutesTimeSpan() + { + string dateDiff = null;//鑾峰彇褰撳墠鏃堕棿 + DateTime DateTime1 = DateTime.Now; + //绗簩澶╃殑0鐐00鍒00绉 + DateTime DateTime2 = DateTime.Now.AddDays(1).Date;//鎶2涓椂闂磋浆鎴怲imeSpan,鏂逛究璁$畻 + TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); + TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); + //鏃堕棿姣旇緝锛屽緱鍑哄樊鍊 + TimeSpan ts = ts1.Subtract(ts2).Duration();//缁撴灉 + dateDiff = ts.Days.ToString() + "澶" + ts.Hours.ToString() + "灏忔椂" + ts.Minutes.ToString() + "鍒嗛挓" + ts.Seconds.ToString() + "绉"; + return ts.TotalMinutes; + } } } diff --git a/src/WMS.Web.Domain/Options/ErpOptions.cs b/src/WMS.Web.Domain/Options/ErpOptions.cs index 7eff5cc5..3c4958d6 100644 --- a/src/WMS.Web.Domain/Options/ErpOptions.cs +++ b/src/WMS.Web.Domain/Options/ErpOptions.cs @@ -28,5 +28,12 @@ namespace WMS.Web.Domain.Options /// erp-Id /// public string ErpId { get; set; } + + public readonly string cache_materail_key = "erp_materials_list"; + public readonly string cache_org_key = "erp_org_list"; + public readonly string cache_supplier_key = "erp_supplier_list"; + public readonly string cache_customer_key = "erp_customer_list"; + public readonly string cache_stock_key = "erp_stock_list"; + public readonly string cache_substock_key = "erp_substock_list"; } } diff --git a/src/WMS.Web.Domain/Services/Public/ErpBaseDataSync.cs b/src/WMS.Web.Domain/Services/Public/ErpBaseDataSync.cs index 725be8ac..01640077 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpBaseDataSync.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpBaseDataSync.cs @@ -41,5 +41,43 @@ namespace WMS.Web.Domain.Services.Public }); return Task.CompletedTask; } + + public static Task SyncMaterial(IErpService sercice) + { + Task.Run(() => + { + //寮傛-鍚屾涓嬬墿鏂欐暟鎹 + sercice.BillQueryForMaterial().GetAwaiter().GetResult(); + }); + return Task.CompletedTask; + } + public static Task SyncOrg(IErpService sercice) + { + Task.Run(() => + { + //寮傛-鍚屾涓嬬粍缁囨暟鎹 + sercice.BillQueryForOrg().GetAwaiter().GetResult(); + }); + return Task.CompletedTask; + } + public static Task SyncCustomer(IErpService sercice) + { + Task.Run(() => + { + //寮傛-鍚屾涓嬪鎴锋暟鎹 + sercice.BillQueryForCustomer().GetAwaiter().GetResult(); + }); + return Task.CompletedTask; + } + public static Task SyncSupplier(IErpService sercice) + { + Task.Run(() => + { + //寮傛-鍚屾涓嬩緵搴斿晢鏁版嵁 + sercice.BillQueryForSupplier().GetAwaiter().GetResult(); + + }); + return Task.CompletedTask; + } } } diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index e925678e..d08373a8 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -18,6 +18,7 @@ using WMS.Web.Core.Dto.Erp.Org; using WMS.Web.Core.Dto.Erp.OutStock; using WMS.Web.Core.Dto.Erp.Supplier; using WMS.Web.Core.Dto.Erp.TakeStock; +using WMS.Web.Core.Help; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Infrastructure; @@ -41,12 +42,6 @@ namespace WMS.Web.Domain.Services.Public private ERPGWSoapClient _client; private readonly IMemoryCache _memoryCache; private readonly IBasicsRepositories _basicsRepositories; - public readonly string cache_materail_key = "erp_materials_list"; - public readonly string cache_org_key = "erp_org_list"; - public readonly string cache_supplier_key = "erp_supplier_list"; - public readonly string cache_customer_key = "erp_customer_list"; - public readonly string cache_stock_key = "erp_stock_list"; - public readonly string cache_substock_key = "erp_substock_list"; public ErpService( IMapper mapper, IOptions erpOptions, @@ -798,7 +793,7 @@ namespace WMS.Web.Domain.Services.Public try { //1.鑾峰彇缂撳瓨涓殑鐗╂枡鏁版嵁锛 - var materials = _memoryCache.Get>(cache_materail_key); + var materials = _memoryCache.Get>(_erpOptions.cache_materail_key); if (materials == null || materials.Count == 0) { return await this.BillQueryForMaterialPagedList(); @@ -825,7 +820,7 @@ namespace WMS.Web.Domain.Services.Public public async Task> BillQueryForMaterial(int id) { //1.鑾峰彇缂撳瓨涓殑鐗╂枡鏁版嵁 - var materials = _memoryCache.Get>(cache_materail_key); + var materials = _memoryCache.Get>(_erpOptions.cache_materail_key); if (materials == null || materials.Count == 0) return Result.ReSuccess(null); //2.閫氳繃ID鍙栧綋鍓嶇墿鏂欏垪琛ㄤ腑鐨 @@ -838,7 +833,7 @@ namespace WMS.Web.Domain.Services.Public { //鎶婂彇鍒扮殑鏁版嵁鏀鹃泦鍚堜腑骞堕噸鏂扮粰缂撳瓨 materials.Add(mater); - _memoryCache.Set(cache_materail_key, materials, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(3))); + _memoryCache.Set(_erpOptions.cache_materail_key, materials, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan()))); return Result.ReSuccess(mater); } else @@ -910,8 +905,8 @@ namespace WMS.Web.Domain.Services.Public } var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); _logger.LogInformation($"鐗╂枡鎷夊彇-缁撴潫鏃堕棿锛歿endTime}"); - //5.鐗╂枡闆嗗悎杩涜缂撳瓨 - _memoryCache.Set(cache_materail_key, erp_materials_list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(3))); + //5.鐗╂枡闆嗗悎杩涜缂撳瓨-褰撳墠缂撳瓨鏃堕棿鍒板綋澶╂櫄涓婄殑0鐐癸紝鍚庨潰瀹氭椂浠诲姟鎵ц閲嶆柊鏀惧叆缂撳瓨 + _memoryCache.Set(_erpOptions.cache_materail_key, erp_materials_list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan()))); _logger.LogInformation($"鐗╂枡鎷夊彇-鎬绘潯鏁帮細{erp_materials_list.Count}"); return ResultList.ReSuccess(erp_materials_list); } @@ -983,7 +978,7 @@ namespace WMS.Web.Domain.Services.Public try { //1.鑾峰彇缂撳瓨涓殑缁勭粐鏁版嵁锛 - var orgs = _memoryCache.Get>(cache_org_key); + var orgs = _memoryCache.Get>(_erpOptions.cache_org_key); if (orgs == null || orgs.Count == 0) { @@ -1025,7 +1020,7 @@ namespace WMS.Web.Domain.Services.Public } //5.缁勭粐闆嗗悎杩涜缂撳瓨 - _memoryCache.Set(cache_org_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(3))); + _memoryCache.Set(_erpOptions.cache_org_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan()))); _logger.LogInformation($"缁勭粐鎷夊彇-鎬绘潯鏁帮細{list.Count}"); return ResultList.ReSuccess(list); @@ -1051,7 +1046,7 @@ namespace WMS.Web.Domain.Services.Public try { //1.鑾峰彇缂撳瓨涓殑渚涘簲鍟嗘暟鎹紱 - var suppliers = _memoryCache.Get>(cache_supplier_key); + var suppliers = _memoryCache.Get>(_erpOptions.cache_supplier_key); if (suppliers == null || suppliers.Count == 0) { @@ -1093,7 +1088,7 @@ namespace WMS.Web.Domain.Services.Public } //5.渚涘簲鍟嗛泦鍚堣繘琛岀紦瀛 - _memoryCache.Set(cache_supplier_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(3))); + _memoryCache.Set(_erpOptions.cache_supplier_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan()))); _logger.LogInformation($"渚涘簲鍟嗘媺鍙-鎬绘潯鏁帮細{list.Count}"); return ResultList.ReSuccess(list); @@ -1118,7 +1113,7 @@ namespace WMS.Web.Domain.Services.Public try { //1.鑾峰彇缂撳瓨涓殑渚涘簲鍟嗘暟鎹紱 - var customers = _memoryCache.Get>(cache_customer_key); + var customers = _memoryCache.Get>(_erpOptions.cache_customer_key); if (customers == null || customers.Count == 0) { @@ -1171,7 +1166,7 @@ namespace WMS.Web.Domain.Services.Public var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); _logger.LogInformation($"瀹㈡埛鎷夊彇-缁撴潫鏃堕棿锛歿endTime}"); //5.渚涘簲鍟嗛泦鍚堣繘琛岀紦瀛 - _memoryCache.Set(cache_customer_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(3))); + _memoryCache.Set(_erpOptions.cache_customer_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan()))); _logger.LogInformation($"瀹㈡埛鎷夊彇-鎬绘潯鏁帮細{list.Count}"); return ResultList.ReSuccess(list); @@ -1196,7 +1191,7 @@ namespace WMS.Web.Domain.Services.Public try { //1.鑾峰彇缂撳瓨涓殑浠撳簱鏁版嵁锛 - var stocks = _memoryCache.Get>(cache_stock_key); + var stocks = _memoryCache.Get>(_erpOptions.cache_stock_key); if (stocks == null || stocks.Count == 0) { //2.鍏堢櫥褰曢噾铦-鎷垮埌token @@ -1233,7 +1228,7 @@ namespace WMS.Web.Domain.Services.Public } //5.渚涘簲鍟嗛泦鍚堣繘琛岀紦瀛 - _memoryCache.Set(cache_stock_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(3))); + _memoryCache.Set(_erpOptions.cache_stock_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(3))); _logger.LogInformation($"浠撳簱鎷夊彇-鎬绘潯鏁帮細{list.Count}"); return ResultList.ReSuccess(list); } @@ -1258,7 +1253,7 @@ namespace WMS.Web.Domain.Services.Public try { //1.鑾峰彇缂撳瓨涓殑浠撳簱鏁版嵁锛 - var stocks = _memoryCache.Get>(cache_substock_key); + var stocks = _memoryCache.Get>(_erpOptions.cache_substock_key); if (stocks == null || stocks.Count == 0) { var token_result = await this.Init(); @@ -1289,7 +1284,7 @@ namespace WMS.Web.Domain.Services.Public } //5.渚涘簲鍟嗛泦鍚堣繘琛岀紦瀛 鍙湁鏌ヨ鍏ㄩ儴鐨勬椂鍊欐墠缂撳瓨 - _memoryCache.Set(cache_substock_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(3))); + _memoryCache.Set(_erpOptions.cache_substock_key, list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(3))); _logger.LogInformation($"瀛愪粨搴撴媺鍙-鎬绘潯鏁帮細{list.Count}"); return ResultList.ReSuccess(list); } diff --git a/src/WMS.Web.Domain/TimedJob/ErpBaseDataSyncJob.cs b/src/WMS.Web.Domain/TimedJob/ErpBaseDataSyncJob.cs new file mode 100644 index 00000000..8e169c43 --- /dev/null +++ b/src/WMS.Web.Domain/TimedJob/ErpBaseDataSyncJob.cs @@ -0,0 +1,70 @@ +锘縰sing Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Pomelo.AspNetCore.TimedJob; +using System; +using System.Collections.Generic; +using System.Text; +using WMS.Web.Core.Dto.Erp; +using WMS.Web.Core.Dto.Erp.Customer; +using WMS.Web.Core.Dto.Erp.Org; +using WMS.Web.Core.Dto.Erp.Supplier; +using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Options; +using WMS.Web.Domain.Services.Public; + +namespace WMS.Web.Domain.TimedJob +{ + /// + /// erp鍩虹鏁版嵁-鍚屾瀹氭椂浠诲姟 + /// + public class ErpBaseDataSyncJob : Job + { + private readonly IMemoryCache _memoryCache; + private readonly ErpOptions _erpOptions; + private ILogger _logger; + private readonly IServiceProvider _serviceProvider; + public ErpBaseDataSyncJob(IServiceProvider serviceProvider,IMemoryCache memoryCache, IOptions erpOptions, ILogger logger) + { + _serviceProvider = serviceProvider; + _memoryCache = memoryCache; + this._erpOptions = erpOptions?.Value; + this._logger = logger; + } + + //[Invoke(Begin = "2022-03-02 01:01", Interval = 1000 * 60 * 60 * 24, SkipWhileExecuting = true)] + //30鍒嗛挓鎵ц涓娆 + [Invoke(Begin = "2024-01-15 17:43", Interval = 1000 * 60 * 30, SkipWhileExecuting = true)] + public void Run() + { + string tip = ""; + _logger.LogInformation($"----------寮傛锛氬畾鏃朵换鍔℃媺鍙---------"); + var sercice = _serviceProvider.GetRequiredService(); + var materials = _memoryCache.Get>(_erpOptions.cache_materail_key); + if (materials == null || materials.Count == 0) + ErpBaseDataSync.SyncMaterial(sercice); + else + tip=tip + "鐗╂枡缂撳瓨鏈け鏁堬紱"; + + var orgs = _memoryCache.Get>(_erpOptions.cache_org_key); + if (orgs == null || orgs.Count == 0) + ErpBaseDataSync.SyncOrg(sercice); + else + tip = tip + "缁勭粐缂撳瓨鏈け鏁堬紱"; + var suppliers = _memoryCache.Get>(_erpOptions.cache_supplier_key); + if (suppliers == null || suppliers.Count == 0) + ErpBaseDataSync.SyncSupplier(sercice); + else + tip = tip + "渚涘簲鍟嗙紦瀛樻湭澶辨晥锛"; + var customers = _memoryCache.Get>(_erpOptions.cache_customer_key); + if (customers == null || customers.Count == 0) + ErpBaseDataSync.SyncCustomer(sercice); + else + tip = tip + "瀹㈡埛缂撳瓨鏈け鏁堬紱"; + + if (!string.IsNullOrEmpty(tip)) + _logger.LogInformation($"寮傛锛氬畾鏃朵换鍔℃媺鍙-->" + tip); + } + } +}