108 lines
4.9 KiB
C#
108 lines
4.9 KiB
C#
using System.Reflection;
|
|
using Dlhis.Middle.Apis;
|
|
using Dlhis.Middle.Entities;
|
|
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
|
using SqlSugar;
|
|
|
|
namespace Dlhis.Middle.Services.Implements;
|
|
|
|
public class DataDownloadService : IDataDownloadService
|
|
{
|
|
private readonly IDbContext _dbContext;
|
|
private readonly ICommonApi _commonApi;
|
|
private readonly ILogger<DataDownloadService> _logger;
|
|
|
|
public DataDownloadService(
|
|
IDbContext dbContext,
|
|
ICommonApi commonApi,
|
|
ILogger<DataDownloadService> logger)
|
|
{
|
|
_dbContext = dbContext;
|
|
_commonApi = commonApi;
|
|
_logger = logger;
|
|
}
|
|
|
|
public async Task InitAsync(string[] factories)
|
|
{
|
|
//需要上传完记录才可下载
|
|
if (await _dbContext.Queryable<LocalBalanceRecordEntity>().Where(x => x.IsSync == false).AnyAsync())
|
|
return;
|
|
|
|
await _dbContext.Client.Ado.BeginTranAsync();
|
|
try
|
|
{
|
|
await TruncateAsync();
|
|
|
|
foreach (var item in factories)
|
|
{
|
|
_logger.LogInformation("正在下载{factory}", item);
|
|
if (!await _dbContext.Queryable<LocalDepartmentEntity>().AnyAsync())
|
|
{
|
|
await DownloadAsync<LocalDepartmentEntity>(item);
|
|
}
|
|
|
|
await DownloadAsync<LocalDeviceEntity>(item);
|
|
if (!await _dbContext.Queryable<LocalDeviceRegistryEntity>().AnyAsync())
|
|
{
|
|
await DownloadAsync<LocalDeviceRegistryEntity>(item);
|
|
}
|
|
|
|
await DownloadAsync<LocalBusinessPlaceEntity>(item);
|
|
await DownloadAsync<LocalBusinessShiftEntity>(item);
|
|
await DownloadAsync<LocalBusinessPlaceShiftRelationshipEntity>(item);
|
|
await DownloadAsync<LocalBusinessShiftMealRelationshipEntity>(item);
|
|
|
|
if (!await _dbContext.Queryable<LocalGainfoEntity>().Where(x => x.Factory == item).AnyAsync())
|
|
{
|
|
await DownloadAsync<LocalGainfoEntity>(item);
|
|
}
|
|
|
|
if (!await _dbContext.Queryable<LocalGainfoMealEntity>().AnyAsync())
|
|
{
|
|
foreach (var currentItem in factories)
|
|
{
|
|
await DownloadAsync<LocalGainfoMealEntity>(currentItem);
|
|
}
|
|
}
|
|
}
|
|
|
|
_logger.LogInformation("部门{count}", await _dbContext.Queryable<LocalDepartmentEntity>().CountAsync());
|
|
_logger.LogInformation("设备{count}", await _dbContext.Queryable<LocalDeviceEntity>().CountAsync());
|
|
_logger.LogInformation("设备注册信息{count}", await _dbContext.Queryable<LocalDeviceRegistryEntity>().CountAsync());
|
|
_logger.LogInformation("营业点{count}", await _dbContext.Queryable<LocalBusinessPlaceEntity>().CountAsync());
|
|
_logger.LogInformation("营业点餐别{count}", await _dbContext.Queryable<LocalBusinessShiftEntity>().CountAsync());
|
|
_logger.LogInformation("营业点餐别对照{count}", await _dbContext.Queryable<LocalBusinessPlaceShiftRelationshipEntity>().CountAsync());
|
|
_logger.LogInformation("营业点餐别餐次对照{count}", await _dbContext.Queryable<LocalBusinessShiftMealRelationshipEntity>().CountAsync());
|
|
_logger.LogInformation("档案{count}", await _dbContext.Queryable<LocalGainfoEntity>().CountAsync());
|
|
_logger.LogInformation("余额{count}", await _dbContext.Queryable<LocalGainfoMealEntity>().CountAsync());
|
|
_logger.LogInformation("下载完成");
|
|
|
|
await _dbContext.Client.Ado.CommitTranAsync();
|
|
}
|
|
catch (Exception)
|
|
{
|
|
await _dbContext.Client.Ado.RollbackTranAsync();
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public async Task DownloadAsync<T>(string factory) where T : class, new()
|
|
{
|
|
var pack = await _commonApi.DownloadAsync<T>(factory, typeof(T).GetCustomAttribute<SugarTable>()!.TableName);
|
|
await _dbContext.InsertAsync(pack.Data);
|
|
}
|
|
|
|
private async Task TruncateAsync()
|
|
{
|
|
await _dbContext.Client.Deleteable<LocalDepartmentEntity>().ExecuteCommandAsync();
|
|
await _dbContext.Client.Deleteable<LocalDeviceEntity>().ExecuteCommandAsync();
|
|
await _dbContext.Client.Deleteable<LocalDeviceRegistryEntity>().ExecuteCommandAsync();
|
|
await _dbContext.Client.Deleteable<LocalBusinessPlaceEntity>().ExecuteCommandAsync();
|
|
await _dbContext.Client.Deleteable<LocalBusinessShiftEntity>().ExecuteCommandAsync();
|
|
await _dbContext.Client.Deleteable<LocalBusinessPlaceShiftRelationshipEntity>().ExecuteCommandAsync();
|
|
await _dbContext.Client.Deleteable<LocalBusinessShiftMealRelationshipEntity>().ExecuteCommandAsync();
|
|
|
|
await _dbContext.Client.Deleteable<LocalGainfoEntity>().ExecuteCommandAsync();
|
|
await _dbContext.Client.Deleteable<LocalGainfoMealEntity>().ExecuteCommandAsync();
|
|
}
|
|
} |