using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Datory; using GxPress.Common.Tools; using GxPress.Entity; using GxPress.EnumConst; using GxPress.Repository.Interface; using GxPress.Repository.Interface.AdminVerify; using GxPress.Repository.Interface.DepartmentUser; using GxPress.Request.App.AdminVerify; using GxPress.Request.App.Middle; using GxPress.Service.Interface.AdminVerify; using GxPress.Service.Interface.Middle; using GxPress.Repository.Interface.Friends; namespace GxPress.Service.Implement.AdminVerify { public class AdminVerifyInsetService : IAdminVerifyInsertService { private readonly IAdminVerifyRepository _adminVerifyRepository; private readonly IUserRepository _userRepository; private readonly IDepartmentRepository _departmentRepository; private readonly IMiddleService _middleService; private readonly IGroupRepository _groupRepository; private readonly IGroupChatRepository _groupChatRepository; private readonly IMiddleRepository _middleRepository; private readonly IGroupUserRepository _groupUserRepository; private readonly IDepartmentUserRepository departmentUserRepository; private readonly IFriendsRepository friendsRepository; public AdminVerifyInsetService(IAdminVerifyRepository adminVerifyRepository, IUserRepository userRepository, IDepartmentRepository departmentRepository, IMiddleService middleService, IGroupRepository groupRepository, IGroupChatRepository groupChatRepository, IMiddleRepository middleRepository, IGroupUserRepository groupUserRepository, IDepartmentUserRepository departmentUserRepository, IFriendsRepository friendsRepository) { _adminVerifyRepository = adminVerifyRepository; _userRepository = userRepository; _departmentRepository = departmentRepository; _groupRepository = groupRepository; _middleService = middleService; _groupChatRepository = groupChatRepository; _middleRepository = middleRepository; _groupUserRepository = groupUserRepository; this.departmentUserRepository = departmentUserRepository; this.friendsRepository = friendsRepository; } /// /// 添加成员 /// /// /// public async Task InsertAsync(AdminVerifyInsertRequest request) { var adminVerifys = new List(); //获取邀请人信息 var userDto = await _userRepository.GetAsync(request.UserId); //获取员工所有信息 var users = await _userRepository.GetAllAsync(Q.WhereIn(nameof(Entity.User.Id), request.UserIds)); var departmentUsers = await departmentUserRepository.GetDepartmentUsersByUserIdsAsync(request.UserIds); var departments = await _departmentRepository.GetAllAsync(Q.WhereIn(nameof(Entity.Department.Id), departmentUsers.Select(n => n.DepartmentId))); //获取小组 var group = await _groupRepository.GetAsync(request.SourceId); var ids = new List { GroupUserRoleTyeConst.Admin, GroupUserRoleTyeConst.SuperAdmin }; //创建人 var groupUsers = await _groupUserRepository.GetAllAsync(Q.Where(nameof(GroupUser.GroupId), group.Id).WhereIn(nameof(GroupUser.GroupUserRoleId), ids)); foreach (var userId in request.UserIds) { //获取用户 var user = users.FirstOrDefault(n => n.Id == userId); if (user == null) continue; var department = new Entity.Department(); if (departmentUsers.FirstOrDefault(n => n.UserId == user.Id) != null) department = departments.FirstOrDefault(m => m.Id == departmentUsers.FirstOrDefault(n => n.UserId == user.Id).DepartmentId); //判断是否是小组成员 if (request.VerifyType == GroupTypeConst.Group) { if (await _groupUserRepository.ExistsAsync(userId, request.SourceId)) continue; } //申请 if (request.SourceType == 1) { foreach (var groupUser in groupUsers) { //设置群主验证 //await InsertMiddleVerify(groupUser.UserId); var adminVerify = new Entity.AdminVerify() { AvatarUrl = StringUtils.RemoveDomain(user.AvatarUrl), SourceName = group.Name, Name = user.Name, DisposeType = AdminVerifyTypeConst.UDispose.GetHashCode(), VerifyType = request.VerifyType, AdminId = groupUser.UserId, SourceType = request.SourceType, SourceId = request.SourceId, UserId = userId, IsDelete = false, Remark = request.Remark }; adminVerifys.Add(adminVerify); } } //邀请 if (request.SourceType == 2) { var adminVerify = new Entity.AdminVerify() { AvatarUrl = StringUtils.RemoveDomain(userDto.AvatarUrl), Name = userDto.Name, DisposeType = AdminVerifyTypeConst.UDispose.GetHashCode(), VerifyType = request.VerifyType, AdminId = userId, SourceType = request.SourceType, SourceId = request.SourceId, UserId = request.UserId, SourceName = group.Name, IsDelete = false, //获取部门 Remark = department.Name + "-" + userDto.Name }; adminVerifys.Add(adminVerify); } } await _adminVerifyRepository.InsertAsync(adminVerifys); return true; } /// /// 设置用户通知验证 /// /// /// private async Task InsertMiddleVerify(int userId) { var middle = await _middleRepository.GetMiddleAsync(Q .Where(nameof(Entity.Middle.Middle.AttributeValue), 3) .Where(nameof(Entity.Middle.Middle.UserId), userId)); if (middle == null) { //添加验证信息 var middleInsertTypeRequest = new MiddleInsertTypeRequest { AttributeValue = 3, FolderId = 0, FolderType = 1, MiddleId = 0, MiddleSonId = 0, UserId = userId }; await _middleService.InsertAsync(middleInsertTypeRequest); } else if (middle.IsDelete) { middle.IsDelete = false; await _middleRepository.UpdateAsync(middle); } } } }