RoleService.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using System.Threading.Tasks;
  6. using YiSha.Data.Repository;
  7. using YiSha.Entity.SystemManage;
  8. using YiSha.Enum.SystemManage;
  9. using YiSha.Model.Param.SystemManage;
  10. using YiSha.Util.Extension;
  11. using YiSha.Util.Model;
  12. using YiSha.Util;
  13. using YiSha.Enum;
  14. using YiSha.IService.SystemManage;
  15. namespace YiSha.Service.SystemManage
  16. {
  17. public partial class RoleService
  18. {
  19. private IRepositoryFactory _baseRepository;
  20. private IMenuAuthorizeService _menuAuthorizeService;
  21. public RoleService(IRepositoryFactory baseRepository, IMenuAuthorizeService menuAuthorizeService)
  22. {
  23. _baseRepository = baseRepository;
  24. _menuAuthorizeService = menuAuthorizeService;
  25. }
  26. #region 获取数据
  27. public async Task<List<RoleEntity>> GetListPartial(RoleListParam param)
  28. {
  29. var expression = ListFilterPartial(param);
  30. var list = await _baseRepository.BaseRepository(dbConnectType).FindList(expression);
  31. return list.ToList();
  32. }
  33. public async Task<List<RoleEntity>> GetPageListPartial(RoleListParam param, Pagination pagination)
  34. {
  35. var expression = ListFilterPartial(param);
  36. var list = await _baseRepository.BaseRepository(dbConnectType).FindList(expression, pagination);
  37. return list.ToList();
  38. }
  39. public async Task<RoleEntity> GetEntityPartial(int id)
  40. {
  41. return await _baseRepository.BaseRepository(dbConnectType).FindEntity<RoleEntity>(id);
  42. }
  43. public async Task<int> GetMaxSortPartial()
  44. {
  45. object result = await _baseRepository.BaseRepository(dbConnectType).FindObject("SELECT MAX(RoleSort) FROM SysRole");
  46. int sort = result.ParseToInt();
  47. sort++;
  48. return sort;
  49. }
  50. public bool ExistRoleNamePartial(RoleEntity entity)
  51. {
  52. var expression = LinqExtensions.True<RoleEntity>();
  53. expression = expression.And(t => t.BaseIsDelete == (int)IsDeleteEnum.No);
  54. if (entity.Id.IsNullOrZero())
  55. {
  56. expression = expression.And(t => t.RoleName == entity.RoleName);
  57. }
  58. else
  59. {
  60. expression = expression.And(t => t.RoleName == entity.RoleName && t.Id != entity.Id);
  61. }
  62. return _baseRepository.BaseRepository(dbConnectType).IQueryable(expression).Count() > 0 ? true : false;
  63. }
  64. #endregion
  65. #region 提交数据
  66. public async Task SaveFormPartial(RoleEntity entity)
  67. {
  68. var isAdd = false;
  69. try
  70. {
  71. //如果id为0,先在数据库中新增用户信息,获取用户的userid便于职位、角色信息的关联(事务中无法获取到用户的userid)
  72. if (entity.Id.IsNullOrZero())
  73. {
  74. isAdd = true;
  75. //新增角色
  76. await entity.Create();
  77. await _baseRepository.BaseRepository(dbConnectType).Insert(entity);
  78. }
  79. // 角色对应的菜单、页面和按钮权限
  80. var menuAuthorizeList = new List<MenuAuthorizeEntity>();
  81. if (!string.IsNullOrEmpty(entity.MenuIds))
  82. {
  83. foreach (int menuId in TextHelper.SplitToArray<int>(entity.MenuIds, ','))
  84. {
  85. MenuAuthorizeEntity menuAuthorizeEntity = new MenuAuthorizeEntity();
  86. menuAuthorizeEntity.AuthorizeId = entity.Id;
  87. menuAuthorizeEntity.MenuId = menuId;
  88. menuAuthorizeEntity.AuthorizeType = AuthorizeTypeEnum.Role.ParseToInt();
  89. await menuAuthorizeEntity.Create();
  90. menuAuthorizeList.Add(menuAuthorizeEntity);
  91. }
  92. }
  93. //开启事务
  94. var db = await _baseRepository.BaseRepository(dbConnectType).BeginTrans();
  95. try
  96. {
  97. if (!isAdd)
  98. {
  99. //修改角色
  100. await db.Delete<MenuAuthorizeEntity>(t => t.AuthorizeId == entity.Id);
  101. await entity.Modify();
  102. await db.Update(entity);
  103. }
  104. if (menuAuthorizeList.Any())
  105. await _menuAuthorizeService.InsertMany(menuAuthorizeList);
  106. await db.CommitTrans();
  107. }
  108. catch
  109. {
  110. await db.RollbackTrans();
  111. throw;
  112. }
  113. }
  114. catch
  115. {
  116. //如果id为0且用户的userid不为零,则需要删除新增的用户信息
  117. if (isAdd)
  118. {
  119. await _baseRepository.BaseRepository(dbConnectType).Delete(entity);
  120. }
  121. }
  122. }
  123. public async Task DeleteFormPartial(string ids)
  124. {
  125. string[] idArr = TextHelper.SplitToArray<string>(ids, ',');
  126. await _baseRepository.BaseRepository(dbConnectType).Delete<RoleEntity>(idArr);
  127. }
  128. #endregion
  129. #region 私有方法
  130. private Expression<Func<RoleEntity, bool>> ListFilterPartial(RoleListParam param)
  131. {
  132. var expression = LinqExtensions.True<RoleEntity>();
  133. expression = expression.And(t => t.BaseIsDelete == (int)IsDeleteEnum.No);
  134. if (param != null)
  135. {
  136. if (!string.IsNullOrEmpty(param.RoleName))
  137. {
  138. expression = expression.And(t => t.RoleName.Contains(param.RoleName));
  139. }
  140. if (!string.IsNullOrEmpty(param.RoleIds))
  141. {
  142. int[] roleIdArr = TextHelper.SplitToArray<int>(param.RoleIds, ',');
  143. expression = expression.And(t => roleIdArr.Contains(t.Id));
  144. }
  145. if (!string.IsNullOrEmpty(param.RoleName))
  146. {
  147. expression = expression.And(t => t.RoleName.Contains(param.RoleName));
  148. }
  149. if (param.RoleStatus > -1)
  150. {
  151. expression = expression.And(t => t.RoleStatus == param.RoleStatus);
  152. }
  153. if (!string.IsNullOrEmpty(param.StartTime.ParseToString()))
  154. {
  155. expression = expression.And(t => t.BaseModifyTime >= param.StartTime);
  156. }
  157. if (!string.IsNullOrEmpty(param.EndTime.ParseToString()))
  158. {
  159. param.EndTime = param.EndTime.Value.Date.Add(new TimeSpan(23, 59, 59));
  160. expression = expression.And(t => t.BaseModifyTime <= param.EndTime);
  161. }
  162. }
  163. return expression;
  164. }
  165. #endregion
  166. }
  167. }