diff --git a/Src/Dlhis.Middle/Services/Implements/BalanceRecordCheckBackgroundService.cs b/Src/Dlhis.Middle/Services/Implements/BalanceRecordCheckBackgroundService.cs index 7304311b..2762ffab 100644 --- a/Src/Dlhis.Middle/Services/Implements/BalanceRecordCheckBackgroundService.cs +++ b/Src/Dlhis.Middle/Services/Implements/BalanceRecordCheckBackgroundService.cs @@ -1,15 +1,12 @@ using System.Net.Http.Headers; -using System.Reflection; using System.Text; using Dlhis.Middle.Entities; using Dlhis.Middle.Response; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.UnifyResultAndValidation; using Kurisu.AspNetCore.Utils.Extensions; -using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.Caching.Memory; using Newtonsoft.Json; -using SqlSugar; namespace Dlhis.Middle.Services.Implements; @@ -19,7 +16,9 @@ public class BalanceRecordCheckBackgroundService : BackgroundService private readonly ILogger _logger; private readonly IMemoryCache _memoryCache; private readonly IHttpClientFactory _httpClientFactory; + private readonly IHealthCheckService _healthCheckService; + private readonly string _factory; private readonly string _hostName; @@ -49,59 +48,69 @@ public class BalanceRecordCheckBackgroundService : BackgroundService using (var scope = _serviceProvider.CreateScope()) { - try + var db = scope.ServiceProvider.GetService(); + var ds = scope.ServiceProvider.GetService(); + + foreach (var factory in _factory.Split(',')) { - var db = scope.ServiceProvider.GetService(); - var ds = scope.ServiceProvider.GetService(); - var balanceRecords = await db.Queryable().Where(x => !x.IsSync).ToListAsync(stoppingToken); - if (balanceRecords.Any()) + try { - foreach (var balanceRecord in balanceRecords) + var balanceRecords = await db.Queryable().Where(x => x.TenantId == factory).Where(x => !x.IsSync).ToListAsync(stoppingToken); + if (balanceRecords.Any()) { - await db.Client.Ado.BeginTranAsync(); - try + foreach (var balanceRecord in balanceRecords) { - balanceRecord.IsSync = true; - await db.UpdateAsync(balanceRecord); - - var r = await UploadAsync(balanceRecord); - if (r.Code == ApiStateCode.Success) + await db.Client.Ado.BeginTranAsync(); + try { - var d = r.Data; - var balance = decimal.Parse(d.Balance); - await db.Updateable() - .SetColumns(x => x.Balance == balance) - .Where(x => x.UserCode == d.UserCode) - .ExecuteCommandAsync(stoppingToken); + balanceRecord.IsSync = true; + await db.UpdateAsync(balanceRecord); - await db.Client.Ado.CommitTranAsync(); + var r = await UploadAsync(balanceRecord); + if (r.Code == ApiStateCode.Success) + { + var d = r.Data; + var balance = decimal.Parse(d.Balance); + await db.Updateable() + .SetColumns(x => x.Balance == balance) + .Where(x => x.UserCode == d.UserCode) + .ExecuteCommandAsync(stoppingToken); + + await db.Client.Ado.CommitTranAsync(); + } + } + catch (Exception e) + { + _logger.LogError(e, "{factory}上传离线消费失败:{message}", factory, e.Message); + await db.Client.Ado.RollbackTranAsync(); } } - catch (Exception e) - { - _logger.LogError(e, "{factory}上传离线消费失败:{message}", _factory, e.Message); - await db.Client.Ado.RollbackTranAsync(); - } + } + + + if (now.Hour == 4 && now.Minute == 1 + && !_healthCheckService.GetIsOffline() + && !await db.Queryable().Where(x => !x.IsSync).AnyAsync()) + { + await ds.DownloadGainfosAsync(factory); + } + else if (now.Hour == 15 && now.Minute == 1 + && !_healthCheckService.GetIsOffline() + && !await db.Queryable().Where(x => !x.IsSync).AnyAsync()) + { + await ds.DownloadGainfosAsync(factory); + } + else if (now.Hour == 20 && now.Minute == 1 + && !_healthCheckService.GetIsOffline() + && !await db.Queryable().Where(x => !x.IsSync).AnyAsync()) + { + await ds.DownloadGainfosAsync(factory); } } - - - if (now.Hour == 4 && now.Minute == 1 && !_healthCheckService.GetIsOffline() && !await db.Queryable().Where(x => !x.IsSync).AnyAsync()) + catch (Exception e) { - await ds.DownloadGainfosAsync(_factory); + _logger.LogError(e, "{factory}同步离线数据失败:{message}", factory, e.Message); } - else if (now.Hour == 15 && now.Minute == 1 && !_healthCheckService.GetIsOffline() && !await db.Queryable().Where(x => !x.IsSync).AnyAsync()) - { - await ds.DownloadGainfosAsync(_factory); - } - else if (now.Hour == 20 && now.Minute == 1 && !_healthCheckService.GetIsOffline() && !await db.Queryable().Where(x => !x.IsSync).AnyAsync()) - { - await ds.DownloadGainfosAsync(_factory); - } - } - catch (Exception e) - { - _logger.LogError(e, "{factory}同步离线数据失败:{message}", _factory, e.Message); } } } diff --git a/Src/Dlhis.Middle/Services/Implements/DataDownloadService.cs b/Src/Dlhis.Middle/Services/Implements/DataDownloadService.cs index 3d4dcab9..beb8ea05 100644 --- a/Src/Dlhis.Middle/Services/Implements/DataDownloadService.cs +++ b/Src/Dlhis.Middle/Services/Implements/DataDownloadService.cs @@ -30,26 +30,31 @@ public class DataDownloadService : IDataDownloadService public async Task InitAsync(string factory) { + var factories = factory.Split(','); + await TruncateAsync(); - await DownloadAsync(factory); - await DownloadAsync(factory); - await DownloadAsync(factory); - - await DownloadAsync(factory); - await DownloadAsync(factory); - await DownloadAsync(factory); - - await DownloadAsync(factory); - - if (!await _dbContext.Queryable().AnyAsync()) + foreach (var item in factories) { - await DownloadAsync(factory); - } + await DownloadAsync(item); + await DownloadAsync(item); + await DownloadAsync(item); - if (!await _dbContext.Queryable().AnyAsync()) - { - await DownloadAsync(factory); + await DownloadAsync(item); + await DownloadAsync(item); + await DownloadAsync(item); + + await DownloadAsync(item); + + if (!await _dbContext.Queryable().AnyAsync()) + { + await DownloadAsync(item); + } + + if (!await _dbContext.Queryable().AnyAsync()) + { + await DownloadAsync(item); + } } }