using SqlSugar; using System.Data; using System.Linq.Expressions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Reflection; using WIDESEAWCS_Core.Helper; using Microsoft.Data.SqlClient; using System.Drawing.Printing; using WIDESEAWCS_Core.Tenants; using WIDESEAWCS_Core.Seed; using WIDESEAWCS_Core.DB; using WIDESEAWCS_Core.Const; using WIDESEAWCS_Core.AOP; using OfficeOpenXml.FormulaParsing.ExpressionGraph; namespace WIDESEAWCS_Core.BaseRepository { public class RepositoryBase : IRepository where TEntity : class, new() { private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly SqlSugarScope _dbBase; private ISqlSugarClient _db { get { ISqlSugarClient db = _dbBase; //多租户 var mta = typeof(TEntity).GetCustomAttribute(); if (mta is { TenantType: TenantTypeEnum.Db }) { //获取租户信息 租户信息可以提前缓存下来 if (App.User is { TenantId: > 0 }) { dynamic tenant = db.Queryable(MainDb.TenantTableName, "x").Where(MainDb.TenantId, "=", App.User.TenantId).First(); if (tenant != null) { var iTenant = db.AsTenant(); if (!iTenant.IsAnyConnection(tenant.TenantId)) { string conStr = tenant.ConnectionString; ConnectionConfig connectionConfig = new ConnectionConfig() { ConfigId = tenant.TenantId, ConnectionString = conStr.DecryptDES(AppSecret.DB), DbType = (SqlSugar.DbType)tenant.DbType, IsAutoCloseConnection = true, AopEvents = new AopEvents() { DataExecuting = SqlSugarAop.DataExecuting } }; iTenant.AddConnection(connectionConfig); } return iTenant.GetConnection(tenant.TenantId); } } } return db; } } /// /// 创建数据库连接对象 /// public ISqlSugarClient Db => _db; public RepositoryBase(IUnitOfWorkManage unitOfWorkManage) { _unitOfWorkManage = unitOfWorkManage; _dbBase = unitOfWorkManage.GetDbClient(); } /// /// 通过主键查询数据 /// /// 主键 /// 查询结果 public virtual TEntity QureyDataById(object id) { return _db.CopyNew().Queryable().In(id).Single(); } /// /// 通过主键数组查询数据 /// /// 主键数组 /// 查询结果集合 public virtual List QureyDataByIds(object[] lstIds) { return _db.CopyNew().Queryable().In(lstIds).ToList(); } /// /// 通过主键集合查询数据 /// /// 主键集合 /// 查询结果集合 public virtual List QureyDataByIds(List lstIds) { return _db.CopyNew().Queryable().In(lstIds).ToList(); } /// /// 添加单条数据 /// /// /// 影响行数 public virtual int AddData(TEntity entity) { IInsertable insert = _db.CopyNew().Insertable(entity); return insert.ExecuteReturnIdentity(); } /// /// 添加多条数据 /// /// /// 影响行数 public virtual int AddData(List listEntity) { IInsertable insert = _db.CopyNew().Insertable(listEntity); return insert.ExecuteCommand(); } /// /// 通过主键删除数据 /// /// 主键 /// 删除结果 public virtual bool DeleteDataById(object id) { return _db.CopyNew().Deleteable().In(id).ExecuteCommandHasChange(); } /// /// 通过主键数据删除多条数据 /// /// 主键数组 /// 删除结果 public virtual bool DeleteDataByIds(object[] ids) { return _db.CopyNew().Deleteable().In(ids).ExecuteCommandHasChange(); } /// /// 通过实体数据删除数据 /// /// 主键数组 /// 删除结果 public virtual bool DeleteData(TEntity entity) { return _db.CopyNew().Deleteable(entity).ExecuteCommandHasChange(); } /// /// 通过实体集合数据删除数据 /// /// 主键数组 /// 删除结果 public virtual bool DeleteData(List listEntity) { return _db.CopyNew().Deleteable(listEntity).ExecuteCommandHasChange(); } /// /// 更新单条数据 /// /// /// public virtual bool UpdateData(TEntity entity) { return _db.CopyNew().Updateable(entity).ExecuteCommandHasChange(); } /// /// 更新多条数据 /// /// /// public virtual bool UpdateData(List listEntity) { return _db.CopyNew().Updateable(listEntity).ExecuteCommandHasChange(); } /// /// 指定列更新数据 /// /// /// /// /// public virtual bool UpdateData(TEntity entity, List lstColumns, List? lstIgnoreColumns = null) { IUpdateable update = _db.CopyNew().Updateable(entity); if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0) { update = update.IgnoreColumns(lstIgnoreColumns.ToArray()); } if (lstColumns != null && lstColumns.Count > 0) { update = update.UpdateColumns(lstColumns.ToArray()); } return update.ExecuteCommandHasChange(); } /// /// 查询所有数据 /// /// public virtual List QueryData() { return _db.CopyNew().Queryable().ToList(); } /// /// 条件查询数据 /// /// /// public virtual List QueryData(string where) { return _db.CopyNew().Queryable().WhereIF(!string.IsNullOrEmpty(where), where).ToList(); } /// /// 条件查询数据 /// /// /// public virtual List QueryData(Expression> whereExpression) { return _db.CopyNew().Queryable().WhereIF(whereExpression != null, whereExpression).ToList(); } public virtual TEntity QueryFirst(Expression> whereExpression) { return _db.CopyNew().Queryable().WhereIF(whereExpression != null, whereExpression).First(); } public virtual TResult QueryFirst(Expression> whereExpression, Expression> expression) { return _db.CopyNew().Queryable().WhereIF(whereExpression != null, whereExpression).Select(expression).First(); } /// /// 条件查询数据并排序 /// /// /// /// public virtual List QueryData(Expression> whereExpression, Dictionary orderBy) { List orderByModels = new List(); foreach (var item in orderBy) { OrderByModel orderByModel = new OrderByModel() { FieldName = item.Key, OrderByType = item.Value }; orderByModels.Add(orderByModel); } return _db.CopyNew().Queryable().WhereIF(whereExpression != null, whereExpression).OrderBy(orderByModels).ToList(); } /// /// 条件查询数据并排序 /// /// /// /// public virtual List QueryData(string where, Dictionary orderBy) { List orderByModels = new List(); foreach (var item in orderBy) { OrderByModel orderByModel = new OrderByModel() { FieldName = item.Key, OrderByType = item.Value }; orderByModels.Add(orderByModel); } return _db.CopyNew().Queryable().WhereIF(!string.IsNullOrEmpty(where), where).OrderBy(orderByModels).ToList(); } /// /// 查询指定数据对象 /// /// /// /// public virtual List QueryData(Expression> expression) { return _db.CopyNew().Queryable().Select(expression).ToList(); } /// /// 条件查询指定数据对象 /// /// /// /// /// /// public virtual List QueryData(Expression> expression, Expression> whereExpression, string orderByFields = "") { return _db.CopyNew().Queryable().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(whereExpression != null, whereExpression).Select(expression).ToList(); } /// /// 条件查询数据并排序 /// /// /// /// /// public virtual List QueryData(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true) { return _db.CopyNew().Queryable().OrderByIF(orderByExpression != null, orderByExpression, isAsc ? OrderByType.Asc : OrderByType.Desc).WhereIF(whereExpression != null, whereExpression).ToList(); } /// /// 条件查询数据并排序 /// /// /// /// public virtual List QueryData(string where, string orderByFields) { return _db.CopyNew().Queryable().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(!string.IsNullOrEmpty(where), where).ToList(); } /// /// 原生Sql语句查询数据 /// /// /// /// public virtual List QueryDataBySql(string sql, SugarParameter[]? parameters = null) { return _db.Ado.SqlQuery(sql, parameters); } /// /// 原生Sql语句查询数据 /// /// /// /// public virtual List QueryDynamicDataBySql(string sql, SugarParameter[]? parameters = null) { return _db.Ado.SqlQuery(sql, parameters); } /// /// 原生Sql语句查询数据 /// /// /// /// public virtual List QueryObjectDataBySql(string sql, SugarParameter[]? parameters = null) { return _db.Ado.SqlQuery(sql, parameters); } /// /// 原生Sql语句执行操作 /// /// /// /// public virtual int ExecuteSqlCommand(string sql, params SqlParameter[] sqlParameters) { return _db.Ado.ExecuteCommand(sql, sqlParameters); } /// /// 原生Sql语句查询数据 /// /// /// /// public virtual DataTable QueryTable(string sql, SugarParameter[]? parameters = null) { return _db.Ado.GetDataTable(sql, parameters); } /// /// 条件查询数据指定数量的行 /// /// /// /// /// public virtual List QueryData(Expression> whereExpression, int top, string orderByFields) { return _db.CopyNew().Queryable().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(whereExpression != null, whereExpression).Take(top).ToList(); } /// /// 条件查询指定数量的行 /// /// /// /// /// public virtual List QueryData(string where, int top, string orderByFields) { return _db.CopyNew().Queryable().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(!string.IsNullOrEmpty(where), where).Take(top).ToList(); } /// /// 分页查询 /// /// /// /// /// /// public virtual List QueryData(Expression> whereExpression, int pageIndex, int pageSize, string orderByFields) { return _db.CopyNew().Queryable().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields) .WhereIF(whereExpression != null, whereExpression).ToPageList(pageIndex, pageSize); } /// /// 分页查询 /// /// /// /// /// /// public virtual List QueryData(string where, int pageIndex, int pageSize, string orderByFields) { return _db.CopyNew().Queryable().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields) .WhereIF(!string.IsNullOrEmpty(where), where).ToPageList(pageIndex, pageSize); } /// /// 分页查询 /// /// /// /// /// /// public virtual PageGridData QueryPage(Expression> whereExpression, int pageIndex, int pageSize, string? orderByFields = null) { int totalCount = 0; var list = _db.CopyNew().Queryable() .OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields) .WhereIF(whereExpression != null, whereExpression) .ToPageList(pageIndex, pageSize, ref totalCount); return new PageGridData { Rows = list, Total = totalCount }; } /// /// 分页查询 /// /// /// /// /// /// public virtual PageGridData QueryPage(Expression> whereExpression, int pageIndex, int pageSize, Dictionary orderBy) { List orderByModels = new List(); foreach (var item in orderBy) { OrderByModel orderByModel = new OrderByModel() { FieldName = item.Key, OrderByType = item.Value }; orderByModels.Add(orderByModel); } int totalCount = 0; List list = _db.CopyNew().Queryable() .OrderBy(orderByModels) .WhereIF(whereExpression != null, whereExpression) .ToPageList(pageIndex, pageSize, ref totalCount); return new PageGridData(totalCount, list); } /// /// 分页查询 /// /// /// /// /// /// public virtual PageGridData QueryPage(string where, int pageIndex, int pageSize, Dictionary orderBy) { List orderByModels = new List(); foreach (var item in orderBy) { OrderByModel orderByModel = new OrderByModel() { FieldName = item.Key, OrderByType = item.Value }; orderByModels.Add(orderByModel); } int totalCount = 0; List list = _db.CopyNew().Queryable() .WhereIF(!string.IsNullOrEmpty(where), where).OrderBy(orderByModels).ToPageList(pageIndex, pageSize, ref totalCount); return new PageGridData(totalCount, list); } /// /// 两表联查 /// /// /// /// /// /// /// /// public virtual List QueryTabs( Expression> joinExpression, Expression> selectExpression, Expression> whereExpressionT1, Expression> whereExpression) { List list = _db.CopyNew().Queryable(joinExpression).WhereIF(whereExpressionT1 != null, whereExpressionT1) .Select(selectExpression) .WhereIF(whereExpression != null, whereExpression).ToList(); return list; } /// /// 两表联查-分页 /// /// /// /// /// /// /// /// /// /// public virtual PageGridData QueryTabsPage(Expression> joinExpression, Expression> selectExpression, Expression> whereExpression, int pageIndex, int pageSize, string? orderByFields = null) { int totalCount = 0; List list = _db.CopyNew().Queryable(joinExpression) .Select(selectExpression) .OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields) .WhereIF(whereExpression != null, whereExpression) .ToPageList(pageIndex, pageSize, ref totalCount); return new PageGridData(totalCount, list); } /// /// 两表联合查询-分页-分组 /// /// /// /// /// /// /// /// /// /// /// /// public virtual PageGridData QueryTabsPage(Expression> joinExpression, Expression> selectExpression, Expression> whereExpression, Expression> groupExpression, int pageIndex, int pageSize, string? orderByFields = null) { int totalCount = 0; List list = _db.CopyNew().Queryable(joinExpression).GroupBy(groupExpression) .Select(selectExpression) .OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields) .WhereIF(whereExpression != null, whereExpression) .ToPageList(pageIndex, pageSize, ref totalCount); return new PageGridData(totalCount, list); } public Task QureyDataByIdAsync(object id) { return _db.CopyNew().Queryable().In(id).SingleAsync(); } public Task> QureyDataByIdsAsync(object[] lstIds) { return _db.CopyNew().Queryable().In(lstIds).ToListAsync(); } public Task> QureyDataByIdsAsync(List lstIds) { return _db.CopyNew().Queryable().In(lstIds).ToListAsync(); } public Task AddDataAsync(TEntity entity) { IInsertable insert = _db.CopyNew().Insertable(entity); return insert.ExecuteReturnIdentityAsync(); } public Task AddDataAsync(List listEntity) { IInsertable insert = _db.CopyNew().Insertable(listEntity); return insert.ExecuteReturnIdentityAsync(); } public Task DeleteDataByIdAsync(object id) { return _db.CopyNew().Deleteable().In(id).ExecuteCommandHasChangeAsync(); } public Task DeleteDataByIdsAsync(object[] ids) { return _db.CopyNew().Deleteable().In(ids).ExecuteCommandHasChangeAsync(); } public Task DeleteDataAsync(TEntity entity) { return _db.CopyNew().Deleteable(entity).ExecuteCommandHasChangeAsync(); } public Task DeleteDataAsync(List listEntity) { return _db.CopyNew().Deleteable(listEntity).ExecuteCommandHasChangeAsync(); } public Task UpdateDataAsync(TEntity entity) { return _db.CopyNew().Updateable(entity).ExecuteCommandHasChangeAsync(); } public Task UpdateDataAsync(List listEntity) { return _db.CopyNew().Updateable(listEntity).ExecuteCommandHasChangeAsync(); } public Task UpdateDataAsync(TEntity entity, List lstColumns, List? lstIgnoreColumns = null) { IUpdateable update = _db.CopyNew().Updateable(entity); if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0) { update = update.IgnoreColumns(lstIgnoreColumns.ToArray()); } if (lstColumns != null && lstColumns.Count > 0) { update = update.UpdateColumns(lstColumns.ToArray()); } return update.ExecuteCommandHasChangeAsync(); } public Task> QueryDataAsync() { return _db.CopyNew().Queryable().ToListAsync(); } public Task> QueryDataAsync(string where) { return _db.CopyNew().Queryable().WhereIF(!string.IsNullOrEmpty(where), where).ToListAsync(); } public Task> QueryDataAsync(Expression> whereExpression) { return _db.CopyNew().Queryable().WhereIF(whereExpression != null, whereExpression).ToListAsync(); } public Task QueryFirstAsync(Expression> whereExpression) { return _db.CopyNew().Queryable().WhereIF(whereExpression != null, whereExpression).FirstAsync(); } public Task QueryFirstAsync(Expression> whereExpression, Expression> expression) { return _db.CopyNew().Queryable().WhereIF(whereExpression != null, whereExpression).Select(expression).FirstAsync(); } public TResult QueryFirst(Expression> whereExpression, Expression> expression, Dictionary orderBy) { List orderByModels = new List(); foreach (var item in orderBy) { OrderByModel orderByModel = new OrderByModel() { FieldName = item.Key, OrderByType = item.Value }; orderByModels.Add(orderByModel); } return _db.CopyNew().Queryable().WhereIF(whereExpression != null, whereExpression).OrderBy(orderByModels).Select(expression).First(); } public Task QueryFirstAsync(Expression> whereExpression, Expression> expression, Dictionary orderBy) { List orderByModels = new List(); foreach (var item in orderBy) { OrderByModel orderByModel = new OrderByModel() { FieldName = item.Key, OrderByType = item.Value }; orderByModels.Add(orderByModel); } return _db.CopyNew().Queryable().WhereIF(whereExpression != null, whereExpression).OrderBy(orderByModels).Select(expression).FirstAsync(); } public TEntity QueryFirst(Expression> whereExpression, Dictionary orderBy) { List orderByModels = new List(); foreach (var item in orderBy) { OrderByModel orderByModel = new OrderByModel() { FieldName = item.Key, OrderByType = item.Value }; orderByModels.Add(orderByModel); } return _db.CopyNew().Queryable().WhereIF(whereExpression != null, whereExpression).OrderBy(orderByModels).First(); } public Task QueryFirstAsync(Expression> whereExpression, Dictionary orderBy) { List orderByModels = new List(); foreach (var item in orderBy) { OrderByModel orderByModel = new OrderByModel() { FieldName = item.Key, OrderByType = item.Value }; orderByModels.Add(orderByModel); } return _db.CopyNew().Queryable().WhereIF(whereExpression != null, whereExpression).OrderBy(orderByModels).FirstAsync(); } public Task> QueryDataAsync(Expression> whereExpression, string orderByFields) { return _db.CopyNew().Queryable().WhereIF(whereExpression != null, whereExpression).OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).ToListAsync(); } public Task> QueryDataAsync(string where, Dictionary orderBy) { List orderByModels = new List(); foreach (var item in orderBy) { OrderByModel orderByModel = new OrderByModel() { FieldName = item.Key, OrderByType = item.Value }; orderByModels.Add(orderByModel); } return _db.CopyNew().Queryable().WhereIF(!string.IsNullOrEmpty(where), where).OrderBy(orderByModels).ToListAsync(); } public Task> QueryDataAsync(Expression> expression) { return _db.CopyNew().Queryable().Select(expression).ToListAsync(); } public Task> QueryDataAsync(Expression> expression, Expression> whereExpression, string orderByFields) { return _db.CopyNew().Queryable().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(whereExpression != null, whereExpression).Select(expression).ToListAsync(); } public Task> QueryDataAsync(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true) { return _db.CopyNew().Queryable().OrderByIF(orderByExpression != null, orderByExpression, isAsc ? OrderByType.Asc : OrderByType.Desc).WhereIF(whereExpression != null, whereExpression).ToListAsync(); } public Task> QueryDataAsync(string where, string orderByFields) { return _db.CopyNew().Queryable().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(!string.IsNullOrEmpty(where), where).ToListAsync(); } public Task> QueryDataBySqlAsync(string sql, SugarParameter[]? parameters = null) { return _db.Ado.SqlQueryAsync(sql, parameters); } public Task> QueryDynamicDataBySqlAsync(string sql, SugarParameter[]? parameters = null) { return _db.Ado.SqlQueryAsync(sql, parameters); } public Task> QueryObjectDataBySqlAsync(string sql, SugarParameter[]? parameters = null) { return _db.Ado.SqlQueryAsync(sql, parameters); } public Task ExecuteSqlCommandAsync(string sql, params SqlParameter[] sqlParameters) { return _db.Ado.ExecuteCommandAsync(sql, sqlParameters); } public Task QueryTableAsync(string sql, SugarParameter[]? parameters = null) { return _db.Ado.GetDataTableAsync(sql, parameters); } public Task> QueryDataAsync(Expression> whereExpression, int top, string orderByFields) { return _db.CopyNew().Queryable().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(whereExpression != null, whereExpression).Take(top).ToListAsync(); } public Task> QueryDataAsync(string where, int top, string orderByFields) { return _db.CopyNew().Queryable().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields).WhereIF(!string.IsNullOrEmpty(where), where).Take(top).ToListAsync(); } public Task> QueryDataAsync(Expression> whereExpression, int pageIndex, int pageSize, string orderByFields) { return _db.CopyNew().Queryable().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields) .WhereIF(whereExpression != null, whereExpression).ToPageListAsync(pageIndex, pageSize); } public Task> QueryDataAsync(string where, int pageIndex, int pageSize, string orderByFields) { return _db.CopyNew().Queryable().OrderByIF(!string.IsNullOrEmpty(orderByFields), orderByFields) .WhereIF(!string.IsNullOrEmpty(where), where).ToPageListAsync(pageIndex, pageSize); } public Task> QueryTabsAsync(Expression> joinExpression, Expression> selectExpression, Expression> whereExpression) { return _db.CopyNew().Queryable(joinExpression) .Select(selectExpression) .WhereIF(whereExpression != null, whereExpression).ToListAsync(); } //List QueryMuch( // Expression> joinExpression, // Expression> selectExpression, // Expression> whereLambda = null) where T : class, new(){throw new NotImplementedException();} //Task> QueryPage(PaginationModel pagination){throw new NotImplementedException();} } }