UserMiddleService.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. using System.Collections.Generic;
  2. using GxPress.Repository.Interface.UserMiddle;
  3. using GxPress.Request.UserMiddle;
  4. using GxPress.Service.Interface.UserMiddle;
  5. using GxPress.Common.Exceptions;
  6. using System.Threading.Tasks;
  7. using GxPress.Repository.Interface;
  8. using Datory;
  9. using System.Linq;
  10. namespace GxPress.Service.Implement.UserMiddle
  11. {
  12. public class UserMiddleService : IUserMiddleService
  13. {
  14. private readonly IUserMiddleRepository _userMiddleRepoitory;
  15. private readonly IUserRepository _userRepoitory;
  16. private readonly IAddressBookGroupUserRepository _addressBookGroupUserRepository;
  17. private readonly IAddressBookGroupRepository _addressBookGroupRepository;
  18. private readonly IDepartmentRepository _departmentRepository;
  19. public UserMiddleService(IUserMiddleRepository userMiddleRepository, IUserRepository userRepository, IAddressBookGroupUserRepository addressBookGroupUserRepository, IDepartmentRepository departmentRepository, IAddressBookGroupRepository addressBookGroupRepository)
  20. {
  21. _userMiddleRepoitory = userMiddleRepository;
  22. _userRepoitory = userRepository;
  23. _addressBookGroupUserRepository = addressBookGroupUserRepository;
  24. _departmentRepository = departmentRepository;
  25. _addressBookGroupRepository = addressBookGroupRepository;
  26. }
  27. /// <summary>
  28. /// 添加用户中间表
  29. /// </summary>
  30. /// <param name="userMiddles"></param>
  31. /// <returns></returns>
  32. public async Task<bool> AddUserMiddleAsync(List<UserMiddleInRequest> request)
  33. {
  34. try
  35. {
  36. foreach (var userMiddle in request)
  37. {
  38. //添加用户中间件
  39. var userMiddleDto = new Entity.UserMiddle.UserMiddle();
  40. userMiddleDto.SourceId = userMiddle.SourceId;
  41. userMiddleDto.SourceType = userMiddle.SourceType;
  42. userMiddleDto.MiddleType = userMiddle.MiddleType;
  43. userMiddleDto.SourceName = userMiddle.SourceName;
  44. userMiddleDto.DataSourceId = userMiddle.DataSourceId;
  45. await _userMiddleRepoitory.InsertAsync(userMiddleDto);
  46. }
  47. }
  48. catch (System.Exception ex)
  49. {
  50. throw new BusinessException(ex.Message);
  51. }
  52. return true;
  53. }
  54. /// <summary>
  55. /// 删除
  56. /// </summary>
  57. /// <param name="query"></param>
  58. /// <returns></returns>
  59. public async Task<bool> DeleteAsync(SqlKata.Query query)
  60. {
  61. return await _userMiddleRepoitory.DeleteAsync(query);
  62. }
  63. /// <summary>
  64. /// 删除收件人
  65. /// </summary>
  66. /// <param name="dataSourceId"></param>
  67. /// <param name="middleType">类型类型 1 通知 2话题 3 收藏 4笔记 5 普通站内信 6匿名站内信 7小组 10:通知收件人 20:通知抄送人 30:站内信收集人 40:站内信抄送人 400 会议纪要</param>
  68. /// <returns></returns>
  69. public async Task<bool> DeleteAsync(int dataSourceId, int middleType)
  70. {
  71. return await _userMiddleRepoitory.DeleteAsync(Q.Where(nameof(Entity.UserMiddle.UserMiddle.DataSourceId), dataSourceId).Where(nameof(Entity.UserMiddle.UserMiddle.MiddleType), middleType));
  72. }
  73. /// <summary>
  74. /// 是否存在
  75. /// </summary>
  76. /// <param name="query"></param>
  77. /// <returns></returns>
  78. public async Task<bool> ExistsAsync(SqlKata.Query query)
  79. {
  80. return await _userMiddleRepoitory.ExistsAsync(query);
  81. }
  82. /// <summary>
  83. /// 获取用户列表
  84. /// </summary>
  85. /// <param name="middleType">来源类型 1:通知收件人 2:通知抄送人 3:站内信收集人 4:站内信抄送人 5:话题 6:笔记共享文件夹 7:收藏共享文件夹 </param>
  86. /// <param name="sourceId"></param>
  87. /// <returns></returns>
  88. public async Task<List<Entity.User>> FindUsersAsync(List<Request.UserMiddle.UserMiddleInRequest> userMiddles, int userId)
  89. {
  90. List<Entity.User> users = new List<Entity.User>();
  91. var userIds = new List<int>();
  92. userIds = userMiddles.Where(n => n.SourceType == 0).Select(n => n.SourceId).ToList();
  93. if (userIds.Count() > 0)
  94. //获取用户
  95. users.AddRange(await _userRepoitory.GetAllAsync(Q.WhereIn(nameof(Entity.User.Id), userIds)));
  96. foreach (var userMiddle in userMiddles)
  97. {
  98. if (userMiddle.SourceType != 0)
  99. {
  100. if (userMiddle.SourceType == 1)
  101. {
  102. if (userMiddle.SourceId == 0)
  103. //获取所有用户
  104. users.AddRange(await _userRepoitory.GetAllAsync(Q.Where(nameof(Entity.User.Id), ">", 0)));
  105. else
  106. {
  107. //递归获取部门
  108. var departments = new List<Entity.Department>();
  109. departments = await _departmentRepository.GetDepartmentById(userMiddle.SourceId, departments);
  110. users.AddRange(await _userRepoitory.GetAllAsync(Q.WhereIn(nameof(Entity.User.DepartmentId), departments.Select(n => n.Id))));
  111. }
  112. }
  113. if (userMiddle.SourceType == 3)
  114. {
  115. if (userMiddle.SourceId == 0)
  116. {
  117. var addressBookGroups = await _addressBookGroupRepository.GetAllAsync(Q.Where(nameof(Entity.AddressBookGroup.UserId), userId));
  118. var addressBookGroupUsers = await _addressBookGroupUserRepository.GetAllAsync(Q.WhereIn(nameof(Entity.AddressBookGroupUser.AddressBookGroupId), addressBookGroups.Select(n => n.Id)));
  119. userIds = addressBookGroupUsers.Select(n => n.UserId).ToList();
  120. //获取用户
  121. users.AddRange(await _userRepoitory.GetAllAsync(Q.WhereIn(nameof(Entity.User.Id), userIds)));
  122. }
  123. else
  124. {
  125. //获取自建分组
  126. var addressBookGroupUsers = await _addressBookGroupUserRepository.GetAllAsync(Q.Where(nameof(Entity.AddressBookGroupUser.AddressBookGroupId), userMiddle.SourceId));
  127. userIds = addressBookGroupUsers.Select(n => n.UserId).ToList();
  128. //获取用户
  129. users.AddRange(await _userRepoitory.GetAllAsync(Q.WhereIn(nameof(Entity.User.Id), userIds)));
  130. }
  131. }
  132. }
  133. }
  134. users = users.Distinct().ToList();
  135. return users;
  136. }
  137. /// <summary>
  138. /// 查询列表
  139. /// </summary>
  140. /// <param name="middleType">类型类型 1 通知 2话题 3 收藏 4笔记 5 普通站内信 6匿名站内信 7小组 10:通知收件人 20:通知抄送人 30:站内信收集人 40:站内信抄送人 400 会议纪要 </param>
  141. /// <param name="sourceId"></param>
  142. /// <returns></returns>
  143. public async Task<IEnumerable<Entity.UserMiddle.UserMiddle>> FindUserMiddlesAsync(int middleType, int dataSourceId)
  144. {
  145. var userMiddles = await _userMiddleRepoitory.GetAllAsync(Q.Where(nameof(Entity.UserMiddle.UserMiddle.MiddleType), middleType).Where(nameof(Entity.UserMiddle.UserMiddle.DataSourceId), dataSourceId));
  146. return userMiddles;
  147. }
  148. }
  149. }