QuestDBRepository.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. using Mapster;
  2. using SqlSugar;
  3. using SqlSugar.IOC;
  4. using System.Collections;
  5. using System.Linq.Expressions;
  6. using System.Reflection;
  7. using WMS.BZModels;
  8. using WMS.BZServices;
  9. using WMS.Info;
  10. namespace WMS.BZSqlSugar
  11. {
  12. public class QuestDBRepository<T> : SimpleClient<T> where T : BaseEntityModel, new()
  13. {
  14. public QuestDBRepository(ISqlSugarClient context = null)
  15. {
  16. //通过特性拿到ConfigId
  17. var configId = typeof(T).GetCustomAttribute<TenantAttribute>()?.configId;
  18. if (configId != null)
  19. {
  20. Context = DbScoped.SugarScope.GetConnectionScope(configId);//根据类传入的ConfigId自动选择
  21. }
  22. else
  23. {
  24. Context = context ?? DbScoped.SugarScope.GetConnectionScope("hj");//没有默认db0
  25. }
  26. }
  27. //public Repository()
  28. //{
  29. // //固定数据库用法
  30. // Context = SqlSugarHelper.Db.GetConnectionScopeWithAttr<T>();
  31. //}
  32. public T InsertReturnEntity(T t)
  33. {
  34. //t = CheckId.InitId<T>(t);
  35. return Context.Insertable(t).ExecuteReturnEntity();
  36. }
  37. /// <summary>
  38. /// 该方法默认不更新AddWho,AddTime
  39. /// </summary>
  40. /// <param name="entity"></param>
  41. /// <returns></returns>
  42. public bool UpdateEntity(T entity)
  43. {
  44. return Context.Updateable(entity).IgnoreColumns(new string[] { "AddWho", "AddTime" }).ExecuteCommand() > 0;
  45. }
  46. public bool UpdateModelColumns(Expression<Func<T, T>> Columns, Expression<Func<T, bool>> WhereExpression)
  47. {
  48. return Update(Columns, WhereExpression);
  49. }
  50. public T GetModelByExpression(Expression<Func<T, bool>> WhereExpression)
  51. {
  52. return GetSingle(WhereExpression);
  53. }
  54. //public ISugarQueryable<T> Queryable()
  55. //{
  56. // return Context.Queryable<T>();
  57. //}
  58. #region query
  59. public bool Any(Expression<Func<T, bool>> expression)
  60. {
  61. return Context.Queryable<T>().Where(expression).Any();
  62. }
  63. public ISugarQueryable<T> Queryable()
  64. {
  65. return Context.Queryable<T>();
  66. }
  67. public List<T> SqlQueryToList(string sql, object obj = null)
  68. {
  69. return Context.Ado.SqlQuery<T>(sql, obj);
  70. }
  71. /// <summary>
  72. /// 根据主值查询单条数据
  73. /// </summary>
  74. /// <param name="pkValue">主键值</param>
  75. /// <returns>泛型实体</returns>
  76. public T GetId(object pkValue)
  77. {
  78. return Context.Queryable<T>().InSingle(pkValue);
  79. }
  80. /// <summary>
  81. /// 根据条件查询分页数据
  82. /// </summary>
  83. /// <param name="where"></param>
  84. /// <param name="parm"></param>
  85. /// <returns></returns>
  86. public PagedInfo<T> GetPages(Expression<Func<T, bool>> where, PagerInfo parm)
  87. {
  88. var source = Context.Queryable<T>().Where(where);
  89. return source.ToPage(parm);
  90. }
  91. /// <summary>
  92. /// 分页获取数据
  93. /// </summary>
  94. /// <param name="where">条件表达式</param>
  95. /// <param name="parm"></param>
  96. /// <param name="order"></param>
  97. /// <param name="orderEnum"></param>
  98. /// <returns></returns>
  99. public PagedInfo<T> GetPages(Expression<Func<T, bool>> where, PagerInfo parm, Expression<Func<T, object>> order, OrderByType orderEnum = OrderByType.Asc)
  100. {
  101. var source = Context
  102. .Queryable<T>()
  103. .Where(where)
  104. .OrderByIF(orderEnum == OrderByType.Asc, order, OrderByType.Asc)
  105. .OrderByIF(orderEnum == OrderByType.Desc, order, OrderByType.Desc);
  106. return source.ToPage(parm);
  107. }
  108. public PagedInfo<T> GetPages(Expression<Func<T, bool>> where, PagerInfo parm, Expression<Func<T, object>> order, string orderByType)
  109. {
  110. return GetPages(where, parm, order, orderByType == "desc" ? OrderByType.Desc : OrderByType.Asc);
  111. }
  112. /// <summary>
  113. /// 查询所有数据(无分页,请慎用)
  114. /// </summary>
  115. /// <returns></returns>
  116. public List<T> GetAll(bool useCache = false, int cacheSecond = 3600)
  117. {
  118. return Context.Queryable<T>().WithCacheIF(useCache, cacheSecond).ToList();
  119. }
  120. #endregion query
  121. #region add
  122. /// <summary>
  123. /// 插入实体
  124. /// </summary>
  125. /// <param name="t"></param>
  126. /// <returns></returns>
  127. public int Add(T t, bool ignoreNull = true)
  128. {
  129. return Context.Insertable(t).IgnoreColumns(ignoreNullColumn: ignoreNull).ExecuteCommand();
  130. }
  131. public int Insert(List<T> t)
  132. {
  133. return Context.Insertable(t).ExecuteCommand();
  134. }
  135. public int Insert(T parm, Expression<Func<T, object>> iClumns = null, bool ignoreNull = true)
  136. {
  137. return Context.Insertable(parm).InsertColumns(iClumns).IgnoreColumns(ignoreNullColumn: ignoreNull).ExecuteCommand();
  138. }
  139. public IInsertable<T> Insertable(T t)
  140. {
  141. return Context.Insertable<T>(t);
  142. }
  143. #endregion add
  144. #region delete
  145. public IDeleteable<T> Deleteable()
  146. {
  147. return Context.Deleteable<T>();
  148. }
  149. /// <summary>
  150. /// 批量删除
  151. /// </summary>
  152. /// <param name="obj"></param>
  153. /// <returns></returns>
  154. public int Delete(object[] obj)
  155. {
  156. return Context.Deleteable<T>().In(obj).ExecuteCommand();
  157. }
  158. public int Delete(object id)
  159. {
  160. return Context.Deleteable<T>(id).ExecuteCommand();
  161. }
  162. public int DeleteTable()
  163. {
  164. return Context.Deleteable<T>().ExecuteCommand();
  165. }
  166. public bool Truncate()
  167. {
  168. return Context.DbMaintenance.TruncateTable<T>();
  169. }
  170. #endregion delete
  171. public DbResult<bool> LoginUseTran(Action action)
  172. {
  173. try
  174. {
  175. var result = Context.Ado.UseTran(() => action(), error =>
  176. {
  177. var err = error as BZSysExCore;
  178. Context.Ado.RollbackTran();
  179. throw new BZSysExCore(err != null ? err.SysExType : 0, error.Message);
  180. });
  181. return result;
  182. }
  183. catch (Exception ex)
  184. {
  185. Context.Ado.RollbackTran();
  186. Console.WriteLine(ex.Message);
  187. throw;
  188. }
  189. }
  190. public DbResult<bool> UseTranAction(Action action)
  191. {
  192. var result = Context.Ado.UseTran(() => action(), error =>
  193. {
  194. var err = error as BZSysExCore;
  195. Context.Ado.RollbackTran();
  196. throw new BZSysExCore(err != null ? err.SysExType : 0, error.Message);
  197. });
  198. return result;
  199. }
  200. public DbResult<bool> UseTran(Action action)
  201. {
  202. try
  203. {
  204. var result = Context.Ado.UseTran(() => action());
  205. return result;
  206. }
  207. catch (Exception ex)
  208. {
  209. Context.Ado.RollbackTran();
  210. Console.WriteLine(ex.Message);
  211. throw;
  212. }
  213. }
  214. public IStorageable<T> Storageable(T t)
  215. {
  216. return Context.Storageable<T>(t);
  217. }
  218. public IStorageable<T> Storageable(List<T> t)
  219. {
  220. return Context.Storageable(t);
  221. }
  222. /// <summary>
  223. ///
  224. /// </summary>
  225. /// <param name="client"></param>
  226. /// <param name="action">增删改查方法</param>
  227. /// <returns></returns>
  228. public DbResult<bool> UseTran(SqlSugarClient client, Action action)
  229. {
  230. try
  231. {
  232. var result = client.AsTenant().UseTran(() => action());
  233. return result;
  234. }
  235. catch (Exception ex)
  236. {
  237. client.AsTenant().RollbackTran();
  238. Console.WriteLine(ex.Message);
  239. throw;
  240. }
  241. }
  242. /// <summary>
  243. /// 使用事务
  244. /// </summary>
  245. /// <param name="action"></param>
  246. /// <returns></returns>
  247. public bool UseTran2(Action action)
  248. {
  249. var result = Context.Ado.UseTran(() => action());
  250. return result.IsSuccess;
  251. }
  252. }
  253. }