using System.Reflection; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Canteen.Entities; using Dlhis.Entity.Canteen.Enums; using Kurisu.AspNetCore; using Kurisu.AspNetCore.DataAccess.Entity; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using SqlSugar; namespace Dlhis.Basic.Common.SysData.Services.Implements; public class SysDataService : ISysDataService { private readonly IDbContext _dbContext; public SysDataService(IDbContext dbContext) { _dbContext = dbContext; } /// public async Task> DownloadAsync(string factory, string tableName) { var type = App.ActiveTypes .Where(x => x.IsDefined(typeof(SugarTable), false)) .Where(x => !x.IsDefined(typeof(SkipScanAttribute), false)) .FirstOrDefault(x => x.GetCustomAttribute()!.TableName == tableName); var table = type?.GetCustomAttribute()!.TableName; var sql = $"select * from {table}"; if (type == null) { table = tableName; } else { if (type.IsAssignableTo(typeof(ITenantId))) { sql += $" where tenantId = '{factory}'"; } } switch (table) { case "Gainfo": return await _dbContext.Queryable().Where(x => x.Type == GainfoUserTypeEnumType.Normal || x.Type == GainfoUserTypeEnumType.SecurityWhite).Where(x => x.Factory == factory).Select(x => (object)x).ToListAsync(); case "GainfoMeal": { var r = await _dbContext.Queryable() .Where(x => x.Factory == factory) .GroupBy(x => x.Code) .Select(x => new { UserCode = x.Code, Balance = SqlFunc.Subqueryable().Where(p => p.UserCode == x.Code) .Where(p => !BalanceRecordSourceConstants.IgnoreSources.Contains(p.Source) && p.Status == BalanceRecordStatusEnumType.Valid && p.IsDeleted == false) .Sum(p => p.Amount) }) .ToListAsync(); return r.Select(x => (object)x).ToList(); } default: return await _dbContext.Client.SqlQueryable(sql).ToListAsync(); } } public async Task> GetWalletFactoriesAsync(string factory) { var wallets = await _dbContext.Queryable().ToListAsync(); var code = wallets.First(x => x.Factory == factory).Code; return wallets.Where(x => x.Code == code).Select(x => x.Factory).ToList(); } }