//------------------------------------------------------------------------------ // 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 // 此代码版权(除特别声明外的代码)归作者本人Diego所有 // 源代码使用协议遵循本仓库的开源协议及附加协议 // Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway // Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway // 使用文档:https://thingsgateway.cn/ // QQ群:605534569 //------------------------------------------------------------------------------ using BootstrapBlazor.Components; using Microsoft.Extensions.Localization; using ThingsGateway.SqlSugar; namespace ThingsGateway.Admin.Application; /// /// 通用服务 /// /// public class BaseService : IDataService, IDisposable where T : class, new() { /// /// 通用服务 /// public BaseService() { Localizer = App.CreateLocalizerByType(typeof(T))!; } /// /// 是否已释放资源 /// public bool IsDisposed { get; private set; } /// /// 语言本地化资源 /// protected IStringLocalizer Localizer { get; } /// public Task AddAsync(T model) { return SaveAsync(model, ItemChangedType.Add); } /// public async Task DeleteAsync(IEnumerable models) { using var db = GetDB(); return await db.Deleteable().In(models.ToList()).ExecuteCommandHasChangeAsync().ConfigureAwait(false); } /// public virtual async Task DeleteAsync(IEnumerable models) { using var db = GetDB(); return await db.Deleteable().In(models.ToList()).ExecuteCommandHasChangeAsync().ConfigureAwait(false); } /// /// 释放资源 /// public void Dispose() { Dispose(true); IsDisposed = true; GC.SuppressFinalize(this); } /// public Task> QueryAsync(QueryPageOptions option) { return QueryAsync(option, null, null); } /// public virtual async Task> QueryAsync(QueryPageOptions option, Func, ISugarQueryable>? queryFunc = null, FilterKeyValueAction where = null) { var ret = new QueryData() { IsSorted = option.SortOrder != SortOrder.Unset, IsFiltered = option.Filters.Count > 0, IsAdvanceSearch = option.AdvanceSearches.Count > 0 || option.CustomerSearches.Count > 0, IsSearch = option.Searches.Count > 0 }; using var db = GetDB(); var query = db.Queryable(); if (queryFunc != null) query = queryFunc(query); query = db.GetQuery(option, query, where); if (option.IsPage) { RefAsync totalCount = 0; var items = await query.ToPageListAsync(option.PageIndex, option.PageItems, totalCount).ConfigureAwait(false); ret.TotalCount = totalCount; ret.Items = items; } else if (option.IsVirtualScroll) { RefAsync totalCount = 0; var items = await query.ToPageListAsync(option.StartIndex, option.PageItems, totalCount).ConfigureAwait(false); ret.TotalCount = totalCount; ret.Items = items; } else { var items = await query.ToListAsync().ConfigureAwait(false); ret.TotalCount = items.Count; ret.Items = items; } return ret; } /// public virtual async Task SaveAsync(T model, ItemChangedType changedType) { using var db = GetDB(); if (changedType == ItemChangedType.Add) { return (await db.Insertable(model).ExecuteCommandAsync().ConfigureAwait(false)) > 0; } else { return (await db.Updateable(model).ExecuteCommandAsync().ConfigureAwait(false)) > 0; } } /// public virtual async Task SaveAsync(List model, ItemChangedType changedType) { using var db = GetDB(); if (changedType == ItemChangedType.Add) { return (await db.Insertable(model).ExecuteCommandAsync().ConfigureAwait(false)) > 0; } else { return (await db.Updateable(model).ExecuteCommandAsync().ConfigureAwait(false)) > 0; } } /// /// 释放资源 /// /// protected virtual void Dispose(bool disposing) { } /// /// 获取数据库连接 /// /// protected SqlSugarClient GetDB() { return DbContext.GetDB(); } }