using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Reflection; using System.Threading.Tasks; using Mesnac.HighWay.ATC.Common; using Mesnac.HighWay.ATC.SqlSugar; using SqlSugar; namespace Mesnac.HighWay.ATC.SqlSugar.serviceImpl { public class BaseServices : IBaseServices where TEntity : class, new() { private SqlSugarClient _dbBase; private SqlSugarClient _db { get { try { _dbBase = new SqlSugarClient(new ConnectionConfig { //ConnectionString = "server = 119.45.202.115; uid = sa; pwd = haiwei@123; database = ATJ_581_DB", ConnectionString = "server = 192.168.1.120; uid = sa; pwd = 123456; database = ATJ_581_DB", //ConnectionString = "server = 192.168.3.110; uid = sa; pwd = 123456; database = JYD_shengjie", // ConnectionString = "server = 192.168.0.254; uid = sa; pwd = 123456; database = ATJ_HS_DB", //ConnectionString = "server = 127.0.0.1; uid = sa; pwd = 123456; database = ATJ_HS_DB", DbType = DbType.SqlServer, InitKeyType = InitKeyType.Attribute, IsAutoCloseConnection = true }); _dbBase.Aop.OnLogExecuting = delegate (string sql, SugarParameter[] pars) { Parallel.For(0, 1, (Action)delegate { string text = ""; string[] array = new string[2] { GetParas(pars), "【SQL语句】:" + sql }; foreach (string text2 in array) { text += text2; } //Console.WriteLine("执行sql:" + text); }); }; } catch (Exception ex) { LogHelper.Error("异常:" + ex.ToString()); Console.WriteLine(ex.Message); return null; } return _dbBase; } } internal SqlSugarClient Db => _db; private string GetParas(SugarParameter[] pars) { string key = "【SQL参数】:"; foreach (SugarParameter param in pars) { key += $"{param.ParameterName}:{param.Value}\n"; } return key; } public async Task QuerySingle(Expression> whereExpression) { return await _db.Queryable().WhereIF(whereExpression != null, whereExpression).SingleAsync(); } public async Task QueryById(object objId) { return await _db.Queryable().In(objId).SingleAsync(); } public async Task QueryById(object objId, bool blnUseCache = false) { return await _db.Queryable().WithCacheIF(blnUseCache).In(objId) .SingleAsync(); } public async Task> QueryByIDs(object[] lstIds) { return await _db.Queryable().In(lstIds).ToListAsync(); } public async Task Add(TEntity entity) { try { return await _db.Insertable(entity).ExecuteCommandAsync(); } catch (Exception ex) { return 0; } } public int Add1(TEntity entity) { try { return _db.Insertable(entity).ExecuteCommand(); } catch (Exception) { return 0; } } public async Task AddLog(TEntity entity) { try { IInsertable insert = _db.Insertable(entity); return await insert.ExecuteReturnIdentityAsync(); } catch (Exception) { return 0; } } public async Task Add(List listEntity) { return await _db.Insertable(listEntity.ToArray()).ExecuteCommandAsync(); } public async Task Update(TEntity entity) { return await _db.Updateable(entity).ExecuteCommandHasChangeAsync(); } public bool Update1(TEntity entity) { return _db.Updateable(entity).ExecuteCommandHasChange(); } public async Task Update(TEntity entity, string strWhere) { return await _db.Updateable(entity).Where(strWhere).ExecuteCommandHasChangeAsync(); } public async Task Update(string strSql, SugarParameter[] parameters = null) { return await _db.Ado.ExecuteCommandAsync(strSql, parameters) > 0; } public async Task Update(object operateAnonymousObjects) { return await _db.Updateable(operateAnonymousObjects).ExecuteCommandAsync() > 0; } public bool Update1(object operateAnonymousObjects) { return _db.Updateable(operateAnonymousObjects).ExecuteCommand() > 0; } public async Task Update(TEntity entity, List lstColumns = null, List lstIgnoreColumns = null, string strWhere = "") { IUpdateable up = _db.Updateable(entity); if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0) { up = up.IgnoreColumns(lstIgnoreColumns.ToArray()); } if (lstColumns != null && lstColumns.Count > 0) { up = up.UpdateColumns(lstColumns.ToArray()); } if (!string.IsNullOrEmpty(strWhere)) { up = up.Where(strWhere); } return await up.ExecuteCommandHasChangeAsync(); } public async Task Delete(TEntity entity) { return await _db.Deleteable(entity).ExecuteCommandHasChangeAsync(); } public async Task Delete(Expression> whereExpression) { return await _db.Deleteable().Where(whereExpression).ExecuteCommandHasChangeAsync(); } public async Task DeleteById(object id) { return await _db.Deleteable(id).ExecuteCommandHasChangeAsync(); } public async Task DeleteByIds(object[] ids) { return await _db.Deleteable().In(ids).ExecuteCommandHasChangeAsync(); } public async Task> Query() { return await _db.Queryable().ToListAsync(); } public async Task> Query(string strWhere) { return await _db.Queryable().WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToListAsync(); } public List Query1(Expression> whereExpression) { try { return _db.Queryable().WhereIF(whereExpression != null, whereExpression).ToList(); } catch (Exception) { return null; } } public async Task> Query(Expression> whereExpression) { try { return await _db.Queryable().WhereIF(whereExpression != null, whereExpression).ToListAsync(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); return null; } } public async Task> Query(Expression> whereExpression, string strOrderByFileds) { return await _db.Queryable().WhereIF(whereExpression != null, whereExpression).OrderByIF(strOrderByFileds != null, strOrderByFileds) .ToListAsync(); } public async Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true) { try { return await _db.Queryable().OrderByIF(orderByExpression != null, orderByExpression, (!isAsc) ? OrderByType.Desc : OrderByType.Asc).WhereIF(whereExpression != null, whereExpression) .ToListAsync(); } catch (Exception) { return null; } } public async Task QueryFirst(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true) { try { return await _db.Queryable().OrderByIF(orderByExpression != null, orderByExpression, (!isAsc) ? OrderByType.Desc : OrderByType.Asc).WhereIF(whereExpression != null, whereExpression) .FirstAsync(); } catch (Exception) { return null; } } public async Task> Query(string strWhere, string strOrderByFileds) { return await _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere) .ToListAsync(); } public async Task> Query(Expression> whereExpression, int intTop, string strOrderByFileds) { return await _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression) .Take(intTop) .ToListAsync(); } public async Task> Query(string strWhere, int intTop, string strOrderByFileds) { return await _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere) .Take(intTop) .ToListAsync(); } public async Task> Query(Expression> whereExpression, int intPageIndex, int intPageSize, string strOrderByFileds) { return await _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression) .ToPageListAsync(intPageIndex, intPageSize); } public async Task> Query(string strWhere, int intPageIndex, int intPageSize, string strOrderByFileds) { return await _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere) .ToPageListAsync(intPageIndex, intPageSize); } public async Task> QueryPage(Expression> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) { RefAsync totalCount = 0; List list = await _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression) .ToPageListAsync(intPageIndex, intPageSize, totalCount); int pageCount = Math.Ceiling(totalCount.ObjToDecimal2() / intPageSize.ObjToDecimal2()).ObjToInt2(); return new PageModel { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list }; } public async Task> QueryMuch(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null) where T : class, new() { if (whereLambda == null) { return await _db.Queryable(joinExpression).Select(selectExpression).ToListAsync(); } return await _db.Queryable(joinExpression).Select(selectExpression).MergeTable() .Where(whereLambda) .ToListAsync(); } public async Task> QueryMuch(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null) where T : class, new() { if (whereLambda == null) { return await _db.Queryable(joinExpression).Select(selectExpression).ToListAsync(); } return await _db.Queryable(joinExpression).Select(selectExpression).MergeTable() .Where(whereLambda) .ToListAsync(); } public async Task> QueryMuch(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null) where T : class, new() { if (whereLambda == null) { return await _db.Queryable(joinExpression).Select(selectExpression).ToListAsync(); } return await _db.Queryable(joinExpression).Select(selectExpression).MergeTable() .Where(whereLambda) .ToListAsync(); } public async Task> QueryMuch(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null) where T : class, new() { if (whereLambda == null) { return await _db.Queryable(joinExpression).Select(selectExpression).ToListAsync(); } return await _db.Queryable(joinExpression).Select(selectExpression).MergeTable() .Where(whereLambda) .ToListAsync(); } public async Task> QueryMuchPage(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) where T : class, new() { RefAsync totalCount = 0; List list = await _db.Queryable(joinExpression).Select(selectExpression).MergeTable() .WhereIF(whereLambda != null, whereLambda) .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds) .ToPageListAsync(intPageIndex, intPageSize, totalCount); int pageCount = Math.Ceiling(totalCount.ObjToDecimal2() / intPageSize.ObjToDecimal2()).ObjToInt2(); return new PageModel { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list }; } public async Task> QueryMuchPage(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) where T : class, new() { RefAsync totalCount = 0; List list = await _db.Queryable(joinExpression).Select(selectExpression).MergeTable() .WhereIF(whereLambda != null, whereLambda) .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds) .ToPageListAsync(intPageIndex, intPageSize, totalCount); int pageCount = Math.Ceiling(totalCount.ObjToDecimal2() / intPageSize.ObjToDecimal2()).ObjToInt2(); return new PageModel { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list }; } public async Task> QueryMuchPage(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) where T : class, new() { RefAsync totalCount = 0; List list = await _db.Queryable(joinExpression).Select(selectExpression).MergeTable() .WhereIF(whereLambda != null, whereLambda) .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds) .ToPageListAsync(intPageIndex, intPageSize, totalCount); int pageCount = Math.Ceiling(totalCount.ObjToDecimal2() / intPageSize.ObjToDecimal2()).ObjToInt2(); return new PageModel { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list }; } public async Task> QueryMuchPage(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) where T : class, new() { RefAsync totalCount = 0; List list = await _db.Queryable(joinExpression).Select(selectExpression).MergeTable() .WhereIF(whereLambda != null, whereLambda) .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds) .ToPageListAsync(intPageIndex, intPageSize, totalCount); int pageCount = Math.Ceiling(totalCount.ObjToDecimal2() / intPageSize.ObjToDecimal2()).ObjToInt2(); return new PageModel { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list }; } public async Task> QueryMuchPage(Expression> joinExpression, Expression> selectExpression, Expression> sortExpression, Expression> whereLambda = null, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) where T : class, new() { RefAsync totalCount = 0; List list = await _db.Queryable(joinExpression).WhereIF(whereLambda != null, whereLambda).Select(selectExpression) .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds) .ToPageListAsync(intPageIndex, intPageSize, totalCount); int pageCount = Math.Ceiling(totalCount.ObjToDecimal2() / intPageSize.ObjToDecimal2()).ObjToInt2(); return new PageModel { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list }; } public async Task> QueryByProc(string proc, List parameters) where T : class, new() { return await _db.Ado.UseStoredProcedure().SqlQueryAsync(proc, parameters); } public async Task, List>> QueryByProc(string proc, List parameters) where T : class, new() { return await _db.Ado.UseStoredProcedure().SqlQueryAsync(proc, parameters); } public async Task> QueryBySql(string sql, List parameters) where T : class, new() { return await _db.Ado.SqlQueryAsync(sql, parameters); } public List QueryList(Expression> whereExpression) { return _db.Queryable().WhereIF(whereExpression != null, whereExpression).ToList(); } public async Task insertSQLAsync(string sql, List parameters) { try { return await _db.Ado.ExecuteCommandAsync(sql, parameters); } catch (Exception) { return 0; } } public System.Data.DataTable QueryDatatable(Expression> whereExpression) { return _db.Queryable().WhereIF(whereExpression != null, whereExpression).ToDataTable(); } public List QueryBySql1(string sql, List parameters) where T : class, new() { return _db.Ado.SqlQuery(sql, parameters); } public SugarParameter[] GetParameters(object obj, PropertyInfo[] propertyInfo = null) { return _db.Ado.GetParameters(obj, propertyInfo); } public System.Data.DataTable UseStoredProcedure(string sql, object parameters) { return _db.Ado.UseStoredProcedure().GetDataTable(sql, parameters); } } }