public async Task <FriendDto> CreateFriendshipRequest(CreateFriendshipRequestInput input) { var userIdentifier = AbpSession.ToUserIdentifier(); var probableFriend = new UserIdentifier(AbpSession.TenantId, input.UserId); if (await _friendshipManager.GetFriendshipOrNullAsync(userIdentifier, probableFriend) != null) { throw new UserFriendlyException(L("YouAlreadySentAFriendshipRequestToThisUser")); } var user = await UserManager.FindByIdAsync(AbpSession.GetUserId().ToString()); User probableFriendUser = await UserManager.FindByIdAsync(input.UserId.ToString()); var sourceFriendship = new Friendship(userIdentifier, probableFriend, probableFriendUser.UserName, probableFriendUser.HeadImage, FriendshipState.Accepted); await _friendshipManager.CreateFriendshipAsync(sourceFriendship); var targetFriendship = new Friendship(probableFriend, userIdentifier, user.UserName, user.HeadImage, FriendshipState.Accepted); await _friendshipManager.CreateFriendshipAsync(targetFriendship); var sourceFriendshipRequest = sourceFriendship.MapTo <FriendDto>(); sourceFriendshipRequest.IsOnline = _onlineClientManager.GetAllByUserId(probableFriend).Any(); return(sourceFriendshipRequest); }
/// <summary> /// 添加好友关系 /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task <FriendDto> CreateFriendshipRequest(CreateFriendshipRequestInput input) { // 获取当前登录人 var userIdentifier = AbpSession.ToUserIdentifier(); // 组合获取要添加的好友信息 var probableFriend = new UserIdentifier(input.TenantId, input.UserId); // 判断跨租户(TODO 目前猜测) _chatFeatureChecker.CheckChatFeatures(userIdentifier.TenantId, probableFriend.TenantId); // 判断双方是否是联系人 if (await _friendshipManager.GetFriendshipOrNullAsync(userIdentifier, probableFriend) != null) { throw new UserFriendlyException(L("YouAlreadySentAFriendshipRequestToThisUser")); } // 获取到当前登录人信息 var user = await UserManager.FindByIdAsync(AbpSession.GetUserId().ToString()); // 将要添加的好友信息 User probableFriendUser; using (CurrentUnitOfWork.SetTenantId(input.TenantId)) { probableFriendUser = await UserManager.FindByIdAsync(input.UserId.ToString()); } // 好友的租户名称 var friendTenancyName = probableFriend.TenantId.HasValue ? _tenantCache.Get(probableFriend.TenantId.Value).TenancyName : null; // 生成一条 登录人 添加 好友的记录 var sourceFriendship = new Friendship(userIdentifier, probableFriend, friendTenancyName, probableFriendUser.UserName, probableFriendUser.ProfilePictureId, FriendshipState.Accepted); await _friendshipManager.CreateFriendshipAsync(sourceFriendship); // 获取登录人租户名称 var userTenancyName = user.TenantId.HasValue ? _tenantCache.Get(user.TenantId.Value).TenancyName : null; // 生成一条 好友 和 当前登录人的好友记录 var targetFriendship = new Friendship(probableFriend, userIdentifier, userTenancyName, user.UserName, user.ProfilePictureId, FriendshipState.Accepted); await _friendshipManager.CreateFriendshipAsync(targetFriendship); // 判断接收人是否在线 var clients = _onlineClientManager.GetAllByUserId(probableFriend); if (clients.Any()) { var isFriendOnline = _onlineClientManager.IsOnline(sourceFriendship.ToUserIdentifier()); await _chatCommunicator.SendFriendshipRequestToClient(clients, targetFriendship, false, isFriendOnline); } // 判断发送人是否在线 var senderClients = _onlineClientManager.GetAllByUserId(userIdentifier); if (senderClients.Any()) { var isFriendOnline = _onlineClientManager.IsOnline(targetFriendship.ToUserIdentifier()); await _chatCommunicator.SendFriendshipRequestToClient(senderClients, sourceFriendship, true, isFriendOnline); } var sourceFriendshipRequest = ObjectMapper.Map <FriendDto>(sourceFriendship); sourceFriendshipRequest.IsOnline = _onlineClientManager.GetAllByUserId(probableFriend).Any(); return(sourceFriendshipRequest); }
private async Task HandleSenderToReceiverAsync(UserIdentifier senderIdentifier, UserIdentifier receiverIdentifier, string message, Guid sharedMessageId) { var friendshipState = (await _friendshipManager.GetFriendshipOrNullAsync(senderIdentifier, receiverIdentifier))?.State; if (friendshipState == null) { friendshipState = FriendshipState.Accepted; var receiverTenancyName = receiverIdentifier.TenantId.HasValue ? _tenantCache.Get(receiverIdentifier.TenantId.Value).TenancyName : null; var receiverUser = _userManager.GetUser(receiverIdentifier); await _friendshipManager.CreateFriendshipAsync( new Friendship( senderIdentifier, receiverIdentifier, receiverTenancyName, receiverUser.UserName, receiverUser.ProfilePictureId, friendshipState.Value) ); } if (friendshipState.Value == FriendshipState.Blocked) { //Do not send message if receiver banned the sender return; } var sentMessage = new ChatMessage( senderIdentifier, receiverIdentifier, ChatSide.Sender, message, ChatMessageReadState.Read, sharedMessageId, ChatMessageReadState.Unread ); Save(sentMessage); await _chatCommunicator.SendMessageToClient( _onlineClientManager.GetAllByUserId(senderIdentifier), sentMessage ); }
private async Task BuildForInternalAsync(Tenant tenant) { //Create Organization Units var organizationUnits = new List <OrganizationUnit>(); var producing = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Producing"); var researchAndDevelopment = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Research & Development", producing); var ivrProducts = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "IVR Related Products", researchAndDevelopment); var voiceTech = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Voice Technologies", researchAndDevelopment); var inhouseProjects = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Inhouse Projects", researchAndDevelopment); var qualityManagement = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Quality Management", producing); var testing = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Testing", producing); var selling = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Selling"); var marketing = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Marketing", selling); var sales = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Sales", selling); var custRelations = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Customer Relations", selling); var supporting = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Supporting"); var buying = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Buying", supporting); var humanResources = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Human Resources", supporting); //Create users var users = _randomUserGenerator.GetRandomUsers(RandomHelper.GetRandom(12, 26), tenant.Id); foreach (var user in users) { //Create the user await _userManager.CreateAsync(user); await CurrentUnitOfWork.SaveChangesAsync(); //Add to roles await _userManager.AddToRoleAsync(user, StaticRoleNames.Tenants.User); //Add to OUs var randomOus = RandomHelper.GenerateRandomizedList(organizationUnits).Take(RandomHelper.GetRandom(0, 3)); foreach (var ou in randomOus) { await _userManager.AddToOrganizationUnitAsync(user, ou); } //Set profile picture if (RandomHelper.GetRandom(100) < 70) //A user will have a profile picture in 70% probability. { await SetRandomProfilePictureAsync(user); } } //Set a picture to admin! var admin = await _userManager.GetAdminAsync(); await SetRandomProfilePictureAsync(admin); //Create Friendships var friends = RandomHelper.GenerateRandomizedList(users).Take(3).ToList(); foreach (var friend in friends) { await _friendshipManager.CreateFriendshipAsync( new Friendship( admin.ToUserIdentifier(), friend.ToUserIdentifier(), tenant.TenancyName, friend.UserName, friend.ProfilePictureId, FriendshipState.Accepted) ); await _friendshipManager.CreateFriendshipAsync( new Friendship( friend.ToUserIdentifier(), admin.ToUserIdentifier(), tenant.TenancyName, admin.UserName, admin.ProfilePictureId, FriendshipState.Accepted) ); } //Create chat message var friendWithMessage = RandomHelper.GenerateRandomizedList(friends).First(); var sharedMessageId = Guid.NewGuid(); _chatMessageRepository.InsertAndGetId( new ChatMessage( friendWithMessage.ToUserIdentifier(), admin.ToUserIdentifier(), ChatSide.Sender, L("Demo_SampleChatMessage"), ChatMessageReadState.Read, sharedMessageId, ChatMessageReadState.Unread ) ); _chatMessageRepository.InsertAndGetId( new ChatMessage( admin.ToUserIdentifier(), friendWithMessage.ToUserIdentifier(), ChatSide.Receiver, L("Demo_SampleChatMessage"), ChatMessageReadState.Unread, sharedMessageId, ChatMessageReadState.Read ) ); }