123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- using System.Collections.Generic;
- using System.Threading.Tasks;
- using AutoMapper;
- using GxPress.Repository.Interface;
- using GxPress.Request.Department;
- using GxPress.Result.Department;
- using GxPress.Service.Interface;
- using GxPress.Service.Interface.Department;
- using GxPress.Repository.Interface.DepartmentUser;
- using System.Linq;
- using Datory;
- using GxPress.EnumConst;
- namespace GxPress.Service.Implement.Department
- {
- /// <summary>
- /// 部门
- /// </summary>
- public partial class DepartmentService : IDepartmentService
- {
- private readonly IMapper _mapper;
- private readonly IDepartmentRepository _departmentRepository;
- private readonly IUserRepository _userRepository;
- private readonly IUserService _userService;
- private readonly IDepartmentUserRepository departmentUserRepository;
- public DepartmentService(IMapper mapper, IDepartmentRepository departmentRepository,
- IUserRepository userRepository, IUserService userService, IDepartmentUserRepository departmentUserRepository)
- {
- _departmentRepository = departmentRepository;
- _userRepository = userRepository;
- _userService = userService;
- _mapper = mapper;
- this.departmentUserRepository = departmentUserRepository;
- }
- /// <summary>
- /// 根据部门ID获取成员以及下级部门
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- public async Task<DepartmentUserResult> GetDepartmentUserResultAsync(DepartmentUserRequest request)
- {
- //获取所在的部门
- request.DepartmentIds = await departmentUserRepository.GetDepartmentIdsAsync(request.UserId);
- var result = await _departmentRepository.GetDepartmentUserResultAsync(request);
- if (result.Departments != null)
- {
- foreach (var item in result.Departments)
- {
- item.TypeId = UserlinkConst.Work.GetHashCode();
- //获取部门
- var departments = new List<DepartmentResult>();
- await _departmentRepository.GetDepartmentById(item.Id, departments);
- var userIds = await departmentUserRepository.GetUserIdsByDepartmentIdsAsync(departments.Select(n => n.Id));
- item.UserCount = await _userRepository.CountAsync(Q.WhereIn(nameof(Entity.User.Id), userIds));
- }
- }
- return result;
- }
- public async Task<IEnumerable<Entity.Department>> GetUserInDepartmentAsync(int userId)
- {
- //获取用户所在部门
- var departmentIds = await departmentUserRepository.GetDepartmentIdsAsync(userId);
- departmentIds = departmentIds.Distinct();
- //
- var departmentIdsList = new List<int>();
- var result = new DepartmentUserInsResult();
- result.Result = new List<DepartmentUserInResult>();
- var allDepartment = await _departmentRepository.GetAllAsync(Q.Where(nameof(Entity.Department.Id), ">", 0));
- foreach (var departmentId in departmentIds)
- {
- result.Result.Add(new DepartmentUserInResult
- {
- DepartmentId = departmentId,
- Item = await _departmentRepository.GetDepartmentByPid(departmentId, new List<Entity.Department>(), allDepartment.ToList())
- });
- }
- if (departmentIds.Count() == 1)
- departmentIdsList.AddRange(departmentIds);
- for (int i = 0; i < result.Result.Count; i++)
- {
- for (int k = i + 1; k < result.Result.Count; k++)
- {
- if (result.Result[i].Item.Any(n => n.Id == result.Result[k].DepartmentId))
- {
- departmentIdsList.Add(result.Result[i].DepartmentId);
- }
- else if (result.Result[k].Item.Any(n => n.Id == result.Result[i].DepartmentId))
- {
- departmentIdsList.Add(result.Result[k].DepartmentId);
- result.Result[i].DepartmentId = result.Result[k].DepartmentId;
- result.Result[i].Item = result.Result[k].Item;
- }
- else
- {
- //departmentIdsList.Add(result.Result[i].DepartmentId);
- departmentIdsList.Add(result.Result[k].DepartmentId);
- }
- }
- }
- departmentIdsList = await GetDepartmentDistinct(allDepartment.ToList(), departmentIdsList.Distinct().ToList());
- return await _departmentRepository.GetAllAsync(Q.WhereIn(nameof(Entity.Department.Id), departmentIdsList));
- //
- }
- public async Task<List<int>> GetDepartmentDistinct(List<Entity.Department> allDepartment, List<int> departmentIds)
- {
- //
- var departmentIdsList = new List<int>();
- var result = new DepartmentUserInsResult();
- result.Result = new List<DepartmentUserInResult>();
- foreach (var departmentId in departmentIds)
- {
- result.Result.Add(new DepartmentUserInResult
- {
- DepartmentId = departmentId,
- Item = await _departmentRepository.GetDepartmentByPid(departmentId, new List<Entity.Department>(), allDepartment.ToList())
- });
- }
- if (departmentIds.Count() <= 2)
- departmentIdsList.AddRange(departmentIds);
- for (int i = 0; i < result.Result.Count; i++)
- {
- for (int k = i + 1; k < result.Result.Count; k++)
- {
- if (result.Result[i].Item.Any(n => n.Id == result.Result[k].DepartmentId))
- {
- departmentIdsList.Add(result.Result[i].DepartmentId);
- }
- else if (result.Result[k].Item.Any(n => n.Id == result.Result[i].DepartmentId))
- {
- departmentIdsList.Add(result.Result[k].DepartmentId);
- // result.Result[i].DepartmentId = result.Result[k].DepartmentId;
- // result.Result[i].Item = result.Result[k].Item;
- }
- else
- {
- // departmentIdsList.Add(result.Result[k].DepartmentId);
- departmentIdsList.Add(result.Result[i].DepartmentId);
- }
- }
- }
- return departmentIdsList;
- }
- }
- }
|