using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using AutoMapper; using Datory; using GxPress.Common.Tools; using GxPress.Entity; using GxPress.EnumConst; using GxPress.Repository.Interface; using GxPress.Repository.Interface.AdminVerify; using GxPress.Request.App.GroupUser; using GxPress.Result.App.AdminVerify; using GxPress.Service.Interface; using GxPress.Service.Interface.AdminVerify; using GxPress.Service.Interface.Group; using GxPress.Service.Interface.Middle; namespace GxPress.Service.Implement.AdminVerify { public class AdminVerifyService : IAdminVerifyService { private readonly IAdminVerifyRepository _adminVerifyRepository; private readonly IUserRepository _userRepository; private readonly IDepartmentRepository _departmentRepository; private readonly IGroupChatRepository _groupChatRepository; private readonly IGroupChatUserService _groupChatUserService; private readonly IGroupService _groupService; private readonly IMiddleService _middleService; private readonly IGroupRepository _groupRepository; private readonly IGroupUserRepository _groupUserRepository; private readonly IGroupChatUserRepository _groupChatUserRepository; private readonly IMapper _mapper; public AdminVerifyService(IAdminVerifyRepository adminVerifyRepository, IUserRepository userRepository, IDepartmentRepository departmentRepository, IGroupChatRepository groupChatRepository, IGroupService groupService, IMiddleService middleService, IGroupChatUserService groupChatUserService, IGroupRepository groupRepository, IMapper mapper, IGroupUserRepository groupUserRepository, IGroupChatUserRepository groupChatUserRepository) { _adminVerifyRepository = adminVerifyRepository; _userRepository = userRepository; _departmentRepository = departmentRepository; _groupChatRepository = groupChatRepository; _groupService = groupService; _middleService = middleService; _groupChatUserService = groupChatUserService; _groupRepository = groupRepository; _mapper = mapper; _groupUserRepository = groupUserRepository; _groupChatUserRepository = groupChatUserRepository; } /// /// 清空 /// /// /// public async Task DeleteAllAsync(int userId) { return await _adminVerifyRepository.DeleteAllAsync(userId); } /// /// 修改状态 /// /// /// /// public async Task UpdateAsync(int id, AdminVerifyTypeConst disposeTyeConst) { var adminVerify = await GetAsync(id); if (disposeTyeConst == AdminVerifyTypeConst.Approve) { //小组 if (adminVerify.VerifyType == GroupTypeConst.Group) { var request = new GroupUserInRequest(); request.GroupId = adminVerify.SourceId; //添加用户 if (adminVerify.SourceType == 2) request.UserIds.Add(adminVerify.AdminId); else request.UserIds.Add(adminVerify.UserId); await _groupService.AddUsersAsync(request); } } //修改状态 await _adminVerifyRepository.UpdateAsync(Q.Where(nameof(Entity.AdminVerify.AdminId), adminVerify.AdminId).Where(nameof(Entity.AdminVerify.UserId), adminVerify.UserId).Where(nameof(Entity.AdminVerify.SourceType), adminVerify.SourceType).Where(nameof(Entity.AdminVerify.SourceId), adminVerify.SourceId).Set(nameof(Entity.AdminVerify.DisposeType), AdminVerifyTypeConst.Approve.GetHashCode())); await _adminVerifyRepository.UpdateAsync(Q.Where(nameof(Entity.AdminVerify.AdminId), adminVerify.UserId).Where(nameof(Entity.AdminVerify.UserId), adminVerify.AdminId).Where(nameof(Entity.AdminVerify.SourceType), adminVerify.SourceType).Where(nameof(Entity.AdminVerify.SourceId), adminVerify.SourceId).Set(nameof(Entity.AdminVerify.DisposeType), disposeTyeConst.GetHashCode())); return true; } /// /// 获取详情 /// /// /// public async Task GetAsync(int id) { return await _adminVerifyRepository.GetAsync(id); } /// /// 根据用户查询 /// /// /// public async Task> GetAllAsync(int userId) { var user = await _userRepository.GetAsync(userId); var adminVerify = await _adminVerifyRepository.GetAllAsync(Q.Where(nameof(Entity.AdminVerify.AdminId), userId).OrderByDesc(nameof(Entity.AdminVerify.CreatedDate))); var result = adminVerify.Select(n => _mapper.Map(n)); var adminVerifySearchResults = result as AdminVerifySearchResult[] ?? result.ToArray(); foreach (var item in adminVerifySearchResults) { item.AvatarUrl = StringUtils.AddDomainMin(item.AvatarUrl); //是否小组 if (item.VerifyType == GroupTypeConst.Group) { //获取小组成员 var groupUsers = await _groupUserRepository.GetAllAsync(Q.Where(nameof(GroupUser.GroupId), item.SourceId)); //不在小组 if (groupUsers.All(n => n.UserId != userId)) item.IsVisit = false; var roleId = new List { 1, 2 }; var groupUsersRole = groupUsers.Where(n => roleId.Contains(n.GroupUserRoleId.GetHashCode())); //判断是否有操作权限 if (item.SourceType == 1) { if (groupUsersRole.Any(n => n.UserId == item.AdminId) && item.DisposeType == 0) item.IsOperate = true; else item.IsOperate = false; } else { if (groupUsersRole.Any(n => n.UserId == item.AdminId)) item.IsOperate = false; else if (item.DisposeType == 0) item.IsOperate = true; } } } return adminVerifySearchResults; } /// /// 获取未处理条数 /// /// /// public async Task GetUDisposeCount(int userId) { return await _adminVerifyRepository.GetUDisposeCount(userId); } } }