fix 支持逗号多factory

This commit is contained in:
2024-06-27 13:53:43 +08:00
parent 4f48186193
commit 2f5c9cf4b1
2 changed files with 74 additions and 60 deletions

View File

@@ -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<BalanceRecordCheckBackgroundService> _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<IDbContext>();
var ds = scope.ServiceProvider.GetService<IDataDownloadService>();
foreach (var factory in _factory.Split(','))
{
var db = scope.ServiceProvider.GetService<IDbContext>();
var ds = scope.ServiceProvider.GetService<IDataDownloadService>();
var balanceRecords = await db.Queryable<LocalBalanceRecordEntity>().Where(x => !x.IsSync).ToListAsync(stoppingToken);
if (balanceRecords.Any())
try
{
foreach (var balanceRecord in balanceRecords)
var balanceRecords = await db.Queryable<LocalBalanceRecordEntity>().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<LocalGainfoMealEntity>()
.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<LocalGainfoMealEntity>()
.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<LocalBalanceRecordEntity>().Where(x => !x.IsSync).AnyAsync())
{
await ds.DownloadGainfosAsync(factory);
}
else if (now.Hour == 15 && now.Minute == 1
&& !_healthCheckService.GetIsOffline()
&& !await db.Queryable<LocalBalanceRecordEntity>().Where(x => !x.IsSync).AnyAsync())
{
await ds.DownloadGainfosAsync(factory);
}
else if (now.Hour == 20 && now.Minute == 1
&& !_healthCheckService.GetIsOffline()
&& !await db.Queryable<LocalBalanceRecordEntity>().Where(x => !x.IsSync).AnyAsync())
{
await ds.DownloadGainfosAsync(factory);
}
}
if (now.Hour == 4 && now.Minute == 1 && !_healthCheckService.GetIsOffline() && !await db.Queryable<LocalBalanceRecordEntity>().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<LocalBalanceRecordEntity>().Where(x => !x.IsSync).AnyAsync())
{
await ds.DownloadGainfosAsync(_factory);
}
else if (now.Hour == 20 && now.Minute == 1 && !_healthCheckService.GetIsOffline() && !await db.Queryable<LocalBalanceRecordEntity>().Where(x => !x.IsSync).AnyAsync())
{
await ds.DownloadGainfosAsync(_factory);
}
}
catch (Exception e)
{
_logger.LogError(e, "{factory}同步离线数据失败:{message}", _factory, e.Message);
}
}
}

View File

@@ -30,26 +30,31 @@ public class DataDownloadService : IDataDownloadService
public async Task InitAsync(string factory)
{
var factories = factory.Split(',');
await TruncateAsync();
await DownloadAsync<LocalDepartmentEntity>(factory);
await DownloadAsync<LocalDeviceEntity>(factory);
await DownloadAsync<LocalDeviceRegistryEntity>(factory);
await DownloadAsync<LocalBusinessPlaceEntity>(factory);
await DownloadAsync<LocalBusinessShiftEntity>(factory);
await DownloadAsync<LocalBusinessPlaceShiftRelationshipEntity>(factory);
await DownloadAsync<LocalBusinessShiftMealRelationshipEntity>(factory);
if (!await _dbContext.Queryable<LocalGainfoEntity>().AnyAsync())
foreach (var item in factories)
{
await DownloadAsync<LocalGainfoEntity>(factory);
}
await DownloadAsync<LocalDepartmentEntity>(item);
await DownloadAsync<LocalDeviceEntity>(item);
await DownloadAsync<LocalDeviceRegistryEntity>(item);
if (!await _dbContext.Queryable<LocalGainfoMealEntity>().AnyAsync())
{
await DownloadAsync<LocalGainfoMealEntity>(factory);
await DownloadAsync<LocalBusinessPlaceEntity>(item);
await DownloadAsync<LocalBusinessShiftEntity>(item);
await DownloadAsync<LocalBusinessPlaceShiftRelationshipEntity>(item);
await DownloadAsync<LocalBusinessShiftMealRelationshipEntity>(item);
if (!await _dbContext.Queryable<LocalGainfoEntity>().AnyAsync())
{
await DownloadAsync<LocalGainfoEntity>(item);
}
if (!await _dbContext.Queryable<LocalGainfoMealEntity>().AnyAsync())
{
await DownloadAsync<LocalGainfoMealEntity>(item);
}
}
}