using JiepeiWMS.IRepository.Base; using JiepeiWMS.IServices.BASE; using JiepeiWMS.Model; using SqlSugar; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using JiepeiWMS.Common; namespace JiepeiWMS.Services.BASE { public class BaseServices : IBaseServices where TEntity : class, new() { //public IBaseRepository baseDal = new BaseRepository(); public IBaseRepository BaseDal;//通过在子类的构造函数中注入,这里是基类,不用构造函数 public async Task QueryById(object objId) { return await BaseDal.QueryById(objId); } /// /// 返回一个模型 /// /// /// public async Task GetModel(Expression> where) { return await BaseDal.GetModel(where); } /// /// 功能描述:根据ID查询一条数据 /// 作  者:AZLinli.JiepeiWMS /// /// id(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 /// 是否使用缓存 /// 数据实体 public async Task QueryById(object objId, bool blnUseCache = false) { return await BaseDal.QueryById(objId, blnUseCache); } /// /// 功能描述:根据ID查询数据 /// 作  者:AZLinli.JiepeiWMS /// /// id列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 /// 数据实体列表 public async Task> QueryByIDs(object[] lstIds) { return await BaseDal.QueryByIDs(lstIds); } /// /// 写入实体数据 /// /// 博文实体类 /// public async Task Add(TEntity entity) { return await BaseDal.Add(entity); } /// /// 批量插入实体(速度快) /// /// 实体集合 /// 影响行数 public async Task Add(List listEntity) { return await BaseDal.Add(listEntity); } /// /// 更新实体数据 /// /// 博文实体类 /// public async Task Update(params TEntity[] entitys) { return await BaseDal.Update(entitys); } public async Task Update(TEntity entity, string strWhere) { return await BaseDal.Update(entity, strWhere); } public async Task Update(object operateAnonymousObjects) { return await BaseDal.Update(operateAnonymousObjects); } public async Task Update( TEntity entity, List lstColumns = null, List lstIgnoreColumns = null, string strWhere = "" ) { return await BaseDal.Update(entity, lstColumns, lstIgnoreColumns, strWhere); } /// /// 根据实体删除一条数据 /// /// 博文实体类 /// public async Task Delete(TEntity entity) { return await BaseDal.Delete(entity); } /// /// 删除指定ID的数据 /// /// 主键ID /// public async Task DeleteById(object id) { return await BaseDal.DeleteById(id); } /// /// 删除指定ID集合的数据(批量删除) /// /// 主键ID集合 /// public async Task DeleteByIds(object[] ids) { return await BaseDal.DeleteByIds(ids); } /// /// 功能描述:查询所有数据 /// 作  者:AZLinli.JiepeiWMS /// /// 数据列表 public async Task> Query() { return await BaseDal.Query(); } /// /// 功能描述:查询数据列表 /// 作  者:AZLinli.JiepeiWMS /// /// 条件 /// 数据列表 public async Task> Query(string strWhere) { return await BaseDal.Query(strWhere); } /// /// 功能描述:查询数据列表 /// 作  者:AZLinli.JiepeiWMS /// /// whereExpression /// 数据列表 public async Task> Query(Expression> whereExpression) { return await BaseDal.Query(whereExpression); } /// /// 功能描述:查询一个列表 /// 作  者:AZLinli.JiepeiWMS /// /// 条件表达式 /// 排序字段,如name asc,age desc /// 数据列表 public async Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true) { return await BaseDal.Query(whereExpression, orderByExpression, isAsc); } public async Task> Query(Expression> whereExpression, string strOrderByFileds) { return await BaseDal.Query(whereExpression, strOrderByFileds); } /// /// 功能描述:查询一个列表 /// 作  者:AZLinli.JiepeiWMS /// /// 条件 /// 排序字段,如name asc,age desc /// 数据列表 public async Task> Query(string strWhere, string strOrderByFileds) { return await BaseDal.Query(strWhere, strOrderByFileds); } /// /// 根据sql语句查询 /// /// 完整的sql语句 /// 参数 /// 泛型集合 public async Task> QuerySql(string strSql, SugarParameter[] parameters = null) { return await BaseDal.QuerySql(strSql, parameters); } /// /// 根据sql语句查询 /// /// 完整的sql语句 /// 参数 /// DataTable public async Task QueryTable(string strSql, SugarParameter[] parameters = null) { return await BaseDal.QueryTable(strSql, parameters); } /// /// 根据sql语句查询DataSet集合 /// /// 完整的sql语句 /// 参数 /// DataTable public async Task QueryTableSet(string strSql, SugarParameter[] parameters = null) { return await BaseDal.QueryTableSet(strSql, parameters); } /// /// 功能描述:查询前N条数据 /// 作  者:AZLinli.JiepeiWMS /// /// 条件表达式 /// 前N条 /// 排序字段,如name asc,age desc /// 数据列表 public async Task> Query(Expression> whereExpression, int intTop, string strOrderByFileds) { return await BaseDal.Query(whereExpression, intTop, strOrderByFileds); } /// /// 功能描述:查询前N条数据 /// 作  者:AZLinli.JiepeiWMS /// /// 条件 /// 前N条 /// 排序字段,如name asc,age desc /// 数据列表 public async Task> Query( string strWhere, int intTop, string strOrderByFileds) { return await BaseDal.Query(strWhere, intTop, strOrderByFileds); } /// /// 功能描述:分页查询 /// 作  者:AZLinli.JiepeiWMS /// /// 条件表达式 /// 页码(下标0) /// 页大小 /// 数据总量 /// 排序字段,如name asc,age desc /// 数据列表 public async Task> Query( Expression> whereExpression, int intPageIndex, int intPageSize, string strOrderByFileds) { return await BaseDal.Query( whereExpression, intPageIndex, intPageSize, strOrderByFileds); } /// /// 功能描述:分页查询 /// 作  者:AZLinli.JiepeiWMS /// /// 条件 /// 页码(下标0) /// 页大小 /// 数据总量 /// 排序字段,如name asc,age desc /// 数据列表 public async Task> Query( string strWhere, int intPageIndex, int intPageSize, string strOrderByFileds) { return await BaseDal.Query( strWhere, intPageIndex, intPageSize, strOrderByFileds); } public async Task> QueryPage(Expression> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) { return await BaseDal.QueryPage(whereExpression, intPageIndex, intPageSize, strOrderByFileds); } #region 5表关联 /// /// 五表联合查询-分页 /// /// 实体1 /// 实体1 /// 实体1 /// 实体1 /// 实体1 /// 返回对象 /// 关联表达式 /// 返回表达式 /// 查询表达式 /// 页码 /// 页大小 /// 排序字段 /// public async Task> QueryPage( Expression> joinExpression, Expression> selectExpression, Expression> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) { return await BaseDal.QueryPage(joinExpression, selectExpression, whereExpression, intPageIndex, intPageSize, strOrderByFileds); } #endregion #region 6表关联 /// /// 六表联合查询-分页 /// /// 实体1 /// 实体1 /// 实体1 /// 实体1 /// 实体1 /// 实体1 /// 返回对象 /// 关联表达式 /// 返回表达式 /// 查询表达式 /// 页码 /// 页大小 /// 排序字段 /// public async Task> QueryPage( Expression> JoinExpression, Expression> SelectExpression, Expression> WhereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) { return await BaseDal.QueryPage(JoinExpression, SelectExpression, WhereExpression, intPageIndex, intPageSize, strOrderByFileds); } #endregion public async Task> QueryTabsPage( Expression> joinExpression, Expression> selectExpression, Expression> whereExpression, Expression> groupExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) { return await BaseDal.QueryTabsPage(joinExpression, selectExpression, whereExpression, intPageIndex, intPageSize, strOrderByFileds); } /// /// 两表联合查询-分页 /// /// 实体1 /// 实体1 /// 返回对象 /// 关联表达式 /// 返回表达式 /// 查询表达式 /// 页码 /// 页大小 /// 排序字段 /// public async Task> QueryTabsPage( Expression> joinExpression, Expression> selectExpression, Expression> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) { return await BaseDal.QueryTabsPage(joinExpression, selectExpression, whereExpression, intPageIndex, intPageSize, strOrderByFileds); } /// /// 三表联合查询-分页 /// /// 实体 /// 实体 /// 实体 /// 返回对象 /// 关联表达式 /// 返回表达式 /// 查询表达式 /// 页码 /// 页大小 /// 排序字段 /// public async Task> QueryTabsPage( Expression> joinExpression, Expression> selectExpression, Expression> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) { return await BaseDal.QueryTabsPage(joinExpression, selectExpression, whereExpression, intPageIndex, intPageSize, strOrderByFileds); } /// /// 四表联合查询-分页 /// /// 实体1 /// 实体1 /// 实体1 /// 实体1 /// 返回对象 /// 关联表达式 /// 返回表达式 /// 查询表达式 /// 页码 /// 页大小 /// 排序字段 /// public async Task> QueryTabsPage( Expression> joinExpression, Expression> selectExpression, Expression> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) { return await BaseDal.QueryTabsPage(joinExpression, selectExpression, whereExpression, intPageIndex, intPageSize, strOrderByFileds); } public async Task> QueryPage(Expression> joinExpression, Expression> selectExpression, Expression> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) where T : class, new() { return await BaseDal.QueryPage(joinExpression, selectExpression, whereExpression, intPageIndex, intPageSize, strOrderByFileds); } public async Task> QueryMuch(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null) where T : class, new() { return await BaseDal.QueryMuch(joinExpression, selectExpression, whereLambda); } /// /// 五表联合查询-分页 /// /// 实体1 /// 实体1 /// 实体1 /// 实体1 /// 实体1 /// 返回对象 /// 关联表达式 /// 返回表达式 /// 查询表达式 /// 页码 /// 页大小 /// 排序字段 /// public async Task> QueryTabsPage( Expression> joinExpression, Expression> selectExpression, Expression> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) { return await BaseDal.QueryTabsPage(joinExpression, selectExpression, whereExpression, intPageIndex, intPageSize, strOrderByFileds); } #region 戴雁冰sql扩展 /// /// 获取替代In的连接语句 /// /// 字段名 /// 值列表 /// 字段前缀(即表名) /// 替代In连接语句 public static string GetWhereInToJoin(string FieldName, IEnumerable Values, string Prefix = "pg.") { // inner join (select 'a' OrderNo union select 'b' union select 'c') OrderNo on pg.OrderNo=OrderNo.OrderNo var wh = new StringBuilder(); wh.Append("inner join ("); var isfirst = true; foreach (var val in Values) { if (isfirst) { isfirst = false; wh.Append("select " + val + " " + FieldName); } else { wh.Append(" union select " + val + ""); } } wh.Append(") " + FieldName + " on " + Prefix + FieldName + "=" + FieldName + "." + FieldName); return wh.ToString(); } /// /// 更新关联表信息(存在则保留,不存在则新增,符合删除条件则删除,且FieldNames中未指定的字段必须为存在默认值) /// /// 关联表表名 /// 字段名列表,例如:[UserId(用户Id),RoleId(角色Id)...] /// 值列表:[{UserId:1,RoleId:2,...},{UserId:1,RoleId:3,...},{UserId:1,RoleId:5,...}] /// 字段名列表,例如:[UserId(用户Id)...] /// 值列表:[{UserId:1,...},{UserId:2,...}] /// 错误信息,空则成功 public string UpdateJoinInfo(string TableName, IList FieldNames, IList Values, IList DelWhereFieldNames = null, IList DelWhereValues = null) { var dal = BaseDal; //删除原数据 if (DelWhereFieldNames != null && DelWhereValues != null) { foreach (var row in DelWhereValues) { var refobj = row._GetRefObj(); var prms = new List(); var sb = new StringBuilder(); foreach (var name in DelWhereFieldNames) { sb.Append(name + "=@" + name + " and "); var obj = refobj.GetAttr(name, true); if (obj == null) { sb.Clear(); break; } prms.Add(new SugarParameter(name, obj)); } if (sb.Length == 0) continue; dal.ExecuteSqlCommand("delete [" + TableName + "] where " + sb.ToString(0, sb.Length - 5), prms.ToArray()); } } //添加更新数据 if (FieldNames != null && Values != null) { foreach (var row in Values) { var refobj = row._GetRefObj(); var prms = new List(); var sb = new StringBuilder(); foreach (var name in FieldNames) { sb.Append(name + "=@" + name + " and "); var obj = refobj.GetAttr(name, true); if (obj == null) { sb.Clear(); break; } prms.Add(new SugarParameter(name, obj)); } if (sb.Length == 0) continue; var arrprms = prms.ToArray(); var count = dal.ExecuteSqlCommand("select 1 from [" + TableName + "] where " + sb.ToString(0, sb.Length - 5), arrprms); if (count <= 0) { dal.ExecuteSqlCommand("insert into [" + TableName + "] (" + string.Join(',', FieldNames) + ") values(@" + string.Join(",@", FieldNames) + ")", arrprms); } } } return string.Empty; } #endregion } }