DepartmentService.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using AutoMapper;
  4. using GxPress.Repository.Interface;
  5. using GxPress.Request.Department;
  6. using GxPress.Result.Department;
  7. using GxPress.Service.Interface;
  8. using GxPress.Service.Interface.Department;
  9. using GxPress.Repository.Interface.DepartmentUser;
  10. using System.Linq;
  11. using Datory;
  12. using GxPress.EnumConst;
  13. namespace GxPress.Service.Implement.Department
  14. {
  15. /// <summary>
  16. /// 部门
  17. /// </summary>
  18. public partial class DepartmentService : IDepartmentService
  19. {
  20. private readonly IMapper _mapper;
  21. private readonly IDepartmentRepository _departmentRepository;
  22. private readonly IUserRepository _userRepository;
  23. private readonly IUserService _userService;
  24. private readonly IDepartmentUserRepository departmentUserRepository;
  25. public DepartmentService(IMapper mapper, IDepartmentRepository departmentRepository,
  26. IUserRepository userRepository, IUserService userService, IDepartmentUserRepository departmentUserRepository)
  27. {
  28. _departmentRepository = departmentRepository;
  29. _userRepository = userRepository;
  30. _userService = userService;
  31. _mapper = mapper;
  32. this.departmentUserRepository = departmentUserRepository;
  33. }
  34. /// <summary>
  35. /// 根据部门ID获取成员以及下级部门
  36. /// </summary>
  37. /// <param name="request"></param>
  38. /// <returns></returns>
  39. public async Task<DepartmentUserResult> GetDepartmentUserResultAsync(DepartmentUserRequest request)
  40. {
  41. //获取所在的部门
  42. request.DepartmentIds = await departmentUserRepository.GetDepartmentIdsAsync(request.UserId);
  43. var result = await _departmentRepository.GetDepartmentUserResultAsync(request);
  44. if (result.Departments != null)
  45. {
  46. foreach (var item in result.Departments)
  47. {
  48. item.TypeId = UserlinkConst.Work.GetHashCode();
  49. //获取部门
  50. var departments = new List<DepartmentResult>();
  51. await _departmentRepository.GetDepartmentById(item.Id, departments);
  52. var userIds = await departmentUserRepository.GetUserIdsByDepartmentIdsAsync(departments.Select(n => n.Id));
  53. item.UserCount = await _userRepository.CountAsync(Q.WhereIn(nameof(Entity.User.Id), userIds));
  54. }
  55. }
  56. return result;
  57. }
  58. public async Task<IEnumerable<Entity.Department>> GetUserInDepartmentAsync(int userId)
  59. {
  60. //获取用户所在部门
  61. var departmentIds = await departmentUserRepository.GetDepartmentIdsAsync(userId);
  62. departmentIds = departmentIds.Distinct();
  63. //
  64. var departmentIdsList = new List<int>();
  65. var result = new DepartmentUserInsResult();
  66. result.Result = new List<DepartmentUserInResult>();
  67. var allDepartment = await _departmentRepository.GetAllAsync(Q.Where(nameof(Entity.Department.Id), ">", 0));
  68. foreach (var departmentId in departmentIds)
  69. {
  70. result.Result.Add(new DepartmentUserInResult
  71. {
  72. DepartmentId = departmentId,
  73. Item = await _departmentRepository.GetDepartmentByPid(departmentId, new List<Entity.Department>(), allDepartment.ToList())
  74. });
  75. }
  76. if (departmentIds.Count() == 1)
  77. departmentIdsList.AddRange(departmentIds);
  78. for (int i = 0; i < result.Result.Count; i++)
  79. {
  80. for (int k = i + 1; k < result.Result.Count; k++)
  81. {
  82. if (result.Result[i].Item.Any(n => n.Id == result.Result[k].DepartmentId))
  83. {
  84. departmentIdsList.Add(result.Result[i].DepartmentId);
  85. }
  86. else if (result.Result[k].Item.Any(n => n.Id == result.Result[i].DepartmentId))
  87. {
  88. departmentIdsList.Add(result.Result[k].DepartmentId);
  89. result.Result[i].DepartmentId = result.Result[k].DepartmentId;
  90. result.Result[i].Item = result.Result[k].Item;
  91. }
  92. else
  93. {
  94. //departmentIdsList.Add(result.Result[i].DepartmentId);
  95. departmentIdsList.Add(result.Result[k].DepartmentId);
  96. }
  97. }
  98. }
  99. departmentIdsList = await GetDepartmentDistinct(allDepartment.ToList(), departmentIdsList.Distinct().ToList());
  100. return await _departmentRepository.GetAllAsync(Q.WhereIn(nameof(Entity.Department.Id), departmentIdsList));
  101. //
  102. }
  103. public async Task<List<int>> GetDepartmentDistinct(List<Entity.Department> allDepartment, List<int> departmentIds)
  104. {
  105. //
  106. var departmentIdsList = new List<int>();
  107. var result = new DepartmentUserInsResult();
  108. result.Result = new List<DepartmentUserInResult>();
  109. foreach (var departmentId in departmentIds)
  110. {
  111. result.Result.Add(new DepartmentUserInResult
  112. {
  113. DepartmentId = departmentId,
  114. Item = await _departmentRepository.GetDepartmentByPid(departmentId, new List<Entity.Department>(), allDepartment.ToList())
  115. });
  116. }
  117. if (departmentIds.Count() <= 2)
  118. departmentIdsList.AddRange(departmentIds);
  119. for (int i = 0; i < result.Result.Count; i++)
  120. {
  121. for (int k = i + 1; k < result.Result.Count; k++)
  122. {
  123. if (result.Result[i].Item.Any(n => n.Id == result.Result[k].DepartmentId))
  124. {
  125. departmentIdsList.Add(result.Result[i].DepartmentId);
  126. }
  127. else if (result.Result[k].Item.Any(n => n.Id == result.Result[i].DepartmentId))
  128. {
  129. departmentIdsList.Add(result.Result[k].DepartmentId);
  130. // result.Result[i].DepartmentId = result.Result[k].DepartmentId;
  131. // result.Result[i].Item = result.Result[k].Item;
  132. }
  133. else
  134. {
  135. // departmentIdsList.Add(result.Result[k].DepartmentId);
  136. departmentIdsList.Add(result.Result[i].DepartmentId);
  137. }
  138. }
  139. }
  140. return departmentIdsList;
  141. }
  142. }
  143. }