LogicDeleteProvider.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace SqlSugar
  7. {
  8. public class LogicDeleteProvider<T> where T : class, new()
  9. {
  10. public DeleteableProvider<T> Deleteable { get; set; }
  11. public DeleteBuilder DeleteBuilder { get; set; }
  12. public int ExecuteCommand(string LogicFieldName = null,object deleteValue=null,string deleteTimeFieldName = null)
  13. {
  14. ISqlSugarClient db;
  15. List<SugarParameter> pars;
  16. string where;
  17. var isAutoDelFilter =
  18. DeleteBuilder.Context?.CurrentConnectionConfig?.MoreSettings?.IsAutoDeleteQueryFilter==true&&
  19. DeleteBuilder.Context?.CurrentConnectionConfig?.MoreSettings?.IsAutoUpdateQueryFilter == true;
  20. if (isAutoDelFilter)
  21. {
  22. DeleteBuilder.Context.CurrentConnectionConfig.MoreSettings.IsAutoUpdateQueryFilter = false;
  23. }
  24. LogicFieldName = _ExecuteCommand(LogicFieldName, out db, out where, out pars);
  25. if (deleteValue == null)
  26. {
  27. deleteValue = true;
  28. }
  29. var updateable = db.Updateable<T>().SetColumns(LogicFieldName, deleteValue);
  30. if (deleteTimeFieldName != null)
  31. {
  32. updateable.SetColumns(deleteTimeFieldName, DateTime.Now);
  33. }
  34. if (pars != null)
  35. updateable.UpdateBuilder.Parameters.AddRange(pars);
  36. Convert(updateable as UpdateableProvider<T>);
  37. var result = updateable.Where(where).ExecuteCommand();
  38. if (isAutoDelFilter)
  39. {
  40. DeleteBuilder.Context.CurrentConnectionConfig.MoreSettings.IsAutoUpdateQueryFilter = true;
  41. }
  42. return result;
  43. }
  44. public int ExecuteCommand(string LogicFieldName, object deleteValue, string deleteTimeFieldName,string userNameFieldName,object userNameValue)
  45. {
  46. ISqlSugarClient db;
  47. List<SugarParameter> pars;
  48. string where;
  49. var isAutoDelFilter =
  50. DeleteBuilder.Context?.CurrentConnectionConfig?.MoreSettings?.IsAutoDeleteQueryFilter == true &&
  51. DeleteBuilder.Context?.CurrentConnectionConfig?.MoreSettings?.IsAutoUpdateQueryFilter == true;
  52. if (isAutoDelFilter)
  53. {
  54. DeleteBuilder.Context.CurrentConnectionConfig.MoreSettings.IsAutoUpdateQueryFilter = false;
  55. }
  56. LogicFieldName = _ExecuteCommand(LogicFieldName, out db, out where, out pars);
  57. var updateable = db.Updateable<T>();
  58. updateable.UpdateBuilder.LambdaExpressions.ParameterIndex = 1000;
  59. updateable .SetColumns(LogicFieldName, deleteValue);
  60. updateable.SetColumns(deleteTimeFieldName, DateTime.Now);
  61. updateable.SetColumns(userNameFieldName,userNameValue);
  62. if (pars != null)
  63. updateable.UpdateBuilder.Parameters.AddRange(pars);
  64. Convert(updateable as UpdateableProvider<T>);
  65. var result = updateable.Where(where).ExecuteCommand();
  66. return result;
  67. }
  68. public async Task<int> ExecuteCommandAsync(string LogicFieldName, object deleteValue, string deleteTimeFieldName, string userNameFieldName, object userNameValue)
  69. {
  70. ISqlSugarClient db;
  71. List<SugarParameter> pars;
  72. string where;
  73. var isAutoDelFilter =
  74. DeleteBuilder.Context?.CurrentConnectionConfig?.MoreSettings?.IsAutoDeleteQueryFilter == true &&
  75. DeleteBuilder.Context?.CurrentConnectionConfig?.MoreSettings?.IsAutoUpdateQueryFilter == true;
  76. if (isAutoDelFilter)
  77. {
  78. DeleteBuilder.Context.CurrentConnectionConfig.MoreSettings.IsAutoUpdateQueryFilter = false;
  79. }
  80. LogicFieldName = _ExecuteCommand(LogicFieldName, out db, out where, out pars);
  81. var updateable = db.Updateable<T>();
  82. updateable.UpdateBuilder.LambdaExpressions.ParameterIndex = 1000;
  83. updateable.SetColumns(LogicFieldName, deleteValue);
  84. updateable.SetColumns(deleteTimeFieldName, DateTime.Now);
  85. updateable.SetColumns(userNameFieldName, userNameValue);
  86. if (pars != null)
  87. updateable.UpdateBuilder.Parameters.AddRange(pars);
  88. Convert(updateable as UpdateableProvider<T>);
  89. var result =await updateable.Where(where).ExecuteCommandAsync();
  90. return result;
  91. }
  92. public async Task<int> ExecuteCommandAsync(string LogicFieldName = null, object deleteValue = null, string deleteTimeFieldName = null)
  93. {
  94. ISqlSugarClient db;
  95. List<SugarParameter> pars;
  96. string where;
  97. LogicFieldName = _ExecuteCommand(LogicFieldName, out db, out where, out pars);
  98. if (deleteValue == null)
  99. {
  100. deleteValue = true;
  101. }
  102. var updateable = db.Updateable<T>().SetColumns(LogicFieldName, deleteValue);
  103. if (deleteTimeFieldName != null)
  104. {
  105. updateable.SetColumns(deleteTimeFieldName, DateTime.Now);
  106. }
  107. if (pars != null)
  108. updateable.UpdateBuilder.Parameters.AddRange(pars);
  109. Convert(updateable as UpdateableProvider<T>);
  110. var result =await updateable.Where(where).ExecuteCommandAsync();
  111. return result;
  112. }
  113. private void Convert(UpdateableProvider<T> updateable)
  114. {
  115. updateable.IsEnableDiffLogEvent = Deleteable.IsEnableDiffLogEvent;
  116. updateable.diffModel = Deleteable.diffModel;
  117. updateable.UpdateBuilder.TableWithString = DeleteBuilder.TableWithString;
  118. updateable.RemoveCacheFunc = Deleteable.RemoveCacheFunc;
  119. }
  120. private string _ExecuteCommand(string LogicFieldName, out ISqlSugarClient db, out string where, out List<SugarParameter> pars)
  121. {
  122. var entityInfo = Deleteable.EntityInfo;
  123. db = Deleteable.Context;
  124. where = DeleteBuilder.GetWhereString.Substring(5);
  125. pars = DeleteBuilder.Parameters;
  126. if (LogicFieldName.IsNullOrEmpty())
  127. {
  128. var column = entityInfo.Columns.FirstOrDefault(it =>
  129. it.PropertyName.EqualCase("isdelete") ||
  130. it.PropertyName.EqualCase("isdeleted") ||
  131. it.DbColumnName.EqualCase("isdelete") ||
  132. it.DbColumnName.EqualCase("isdeleted"));
  133. if (column != null)
  134. {
  135. LogicFieldName = column.DbColumnName;
  136. }
  137. }
  138. Check.Exception(LogicFieldName == null, ErrorMessage.GetThrowMessage(
  139. $"{entityInfo.EntityName} is not isdelete or isdeleted"
  140. , $"{entityInfo.EntityName} 没有IsDelete或者IsDeleted 的属性, 你也可以用 IsLogic().ExecuteCommand(\"列名\")"));
  141. return LogicFieldName;
  142. }
  143. }
  144. }