//------------------------------------------------------------------------------
// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充
// 此代码版权(除特别声明外的代码)归作者本人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();
}
}