/// <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); }
public async Task <FriendDto> CreateFriendshipRequest(CreateFriendshipRequestInput input) { var userIdentifier = AbpSession.ToUserIdentifier(); var probableFriend = new UserIdentifier(input.TenantId, input.UserId); _chatFeatureChecker.CheckChatFeatures(userIdentifier.TenantId, probableFriend.TenantId); if (_friendshipManager.GetFriendshipOrNull(userIdentifier, probableFriend) != null) { throw new UserFriendlyException(L("YouAlreadySentAFriendshipRequestToThisUser")); } var user = await UserManager.FindByIdAsync(AbpSession.GetUserId()); User probableFriendUser; using (CurrentUnitOfWork.SetTenantId(input.TenantId)) { probableFriendUser = (await UserManager.FindByIdAsync(input.UserId)); } 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); _friendshipManager.CreateFriendship(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); _friendshipManager.CreateFriendship(targetFriendship); var clients = _onlineClientManager.GetAllByUserId(probableFriend); if (clients.Any()) { var isFriendOnline = _onlineClientManager.IsOnline(sourceFriendship.ToUserIdentifier()); _chatCommunicator.SendFriendshipRequestToClient(clients, targetFriendship, false, isFriendOnline); } var senderClients = _onlineClientManager.GetAllByUserId(userIdentifier); if (senderClients.Any()) { var isFriendOnline = _onlineClientManager.IsOnline(targetFriendship.ToUserIdentifier()); _chatCommunicator.SendFriendshipRequestToClient(senderClients, sourceFriendship, true, isFriendOnline); } var sourceFriendshipRequest = sourceFriendship.MapTo <FriendDto>(); 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 ); }
public void ShouldGetTenantById() { //Act var tenant = tenantCache.Get(1); //Assert tenant.TenancyName.ShouldBe(Tenant.DefaultTenantName); }
public void Should_Get_Tenant_By_Id() { //Act var tenant = _tenantCache.Get(1); //Assert tenant.TenancyName.ShouldBe(Tenant.DefaultTenantName); }
private void HandleSenderToReceiver(UserIdentifier senderIdentifier, UserIdentifier receiverIdentifier, string message) { var friendshipState = _friendshipManager.GetFriendshipOrNull(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); _friendshipManager.CreateFriendship( new Friendship( senderIdentifier, receiverIdentifier, receiverTenancyName, receiverUser.UserName, receiverUser.Avatar, 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 ); Save(sentMessage); _chatCommunicator.SendMessageToClient( _onlineClientManager.GetAllByUserId(senderIdentifier), sentMessage ); }
private string GetTenantLogoUrl(int?tenantId) { if (!tenantId.HasValue) { return(_webUrlService.GetServerRootAddress().EnsureEndsWith('/') + "TenantCustomization/GetTenantLogo?skin=light"); } var tenant = _tenantCache.Get(tenantId.Value); return(_webUrlService.GetServerRootAddress(tenant.TenancyName).EnsureEndsWith('/') + "TenantCustomization/GetTenantLogo?skin=light&tenantId=" + tenantId.Value); }
public virtual string GetNameOrConnectionString(DbPerTenantConnectionStringResolveArgs args) { if (args.TenantId == null) { //Requested for host return(base.GetNameOrConnectionString(args)); } var tenantCacheItem = _tenantCache.Get(args.TenantId.Value); if (tenantCacheItem.ConnectionString.IsNullOrEmpty()) { //Tenant has not dedicated database return(base.GetNameOrConnectionString(args)); } return(tenantCacheItem.ConnectionString); }
public async Task <string> GetTenantAdminToken([FromBody] GetTenantAdminToken input) { var tenancyName = _tenantCache.Get(input.TenantId).TenancyName; var loginResult = await GetLoginResultAsync( AbpUserBase.AdminUserName, CharonX.Authorization.Users.User.DefaultPassword, tenancyName ); int?tenantId = null; if (loginResult.Tenant != null) { tenantId = loginResult.Tenant.Id; } var accessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity, tenantId)); return(accessToken); }
private string GetTenancyName(int?tenantId) { return(tenantId.HasValue ? TenantCache.Get(tenantId.Value).TenancyName : null); }
public async Task <ResultDto <PaymentOrderDto> > PlaceOrderAsync(CreatePaymentOrderDto input) { var tenant = tenantCache.Get(input.TenantId); if (!string.IsNullOrEmpty(input.ExternalOrderId)) { var isDuplicate = await paymentOrderRepository.GetAll().AnyAsync(o => o.TenantId == input.TenantId && o.ExternalOrderId == input.ExternalOrderId); if (isDuplicate) { return(new ResultDto <PaymentOrderDto> { IsSuccess = false, ErrorMessage = "商户订单号重复" }); } } //支付通道 var channel = await channelRepository.FirstOrDefaultAsync(c => c.ChannelCode == input.ChannelCode); if (channel == null) { return(new ResultDto <PaymentOrderDto>() { IsSuccess = false, ErrorMessage = "支付通道编码错误" }); } int channelId = channel.Id; //银行 int? bankId = null; List <int> excludedBankCompanies = null; if (channel.RequiredBank) { var bank = await bankRepository.FirstOrDefaultAsync(b => b.BankCode == input.BankCode); if (bank != null) { bankId = bank.Id; excludedBankCompanies = await bankOverrideRepository.GetAll().Where(bo => bo.BankId == bank.Id && bo.OverrideIsActive == false).Select(bo => bo.CompanyId).ToListAsync(); } else { return(new ResultDto <PaymentOrderDto>() { IsSuccess = false, ErrorMessage = "银行编码错误" }); } } //TODO 支付订单策略 var policies = await paymentOrderPolicyService.GetPoliciesAsync(input.TenantId, channelId); if (policies == null) { return(new ResultDto <PaymentOrderDto> { IsSuccess = false, ErrorMessage = "没有匹配的支付接口" }); } var verifiedPaymentOrder = new VerifiedPaymentOrderDto() { PaymentOrder = input }; bool isUnsupportedBank = false; //订单提交策略验证 foreach (var item in policies) { if (await paymentOrderPolicyService.VerifyPolicyAsync(item, input)) { if (excludedBankCompanies != null && excludedBankCompanies.Contains(item.CompanyId)) { isUnsupportedBank = true; continue; } verifiedPaymentOrder.Success = true; verifiedPaymentOrder.CompanyId = item.CompanyId; verifiedPaymentOrder.AccountId = item.AccountId; verifiedPaymentOrder.ChannelId = channelId; verifiedPaymentOrder.BankId = bankId; break; } } if (verifiedPaymentOrder.CompanyId == 0) { if (isUnsupportedBank) { return(new ResultDto <PaymentOrderDto>() { IsSuccess = false, ErrorMessage = "不支持该银行" }); } else { return(new ResultDto <PaymentOrderDto>() { IsSuccess = false, ErrorMessage = "没有可用的第三方平台" }); } } if (verifiedPaymentOrder.AccountId == 0) { return(new ResultDto <PaymentOrderDto>() { IsSuccess = false, ErrorMessage = "没有可用的第三方账号" }); } var company = await companyRepository.GetAsync(verifiedPaymentOrder.CompanyId); var account = await accountRepository.GetAsync(verifiedPaymentOrder.AccountId); var channelOverride = await channelOverrideRepository.FirstOrDefaultAsync(co => co.CompanyId == company.Id && co.ChannelId == channelId); var paymentOrder = BuildPaymentOrder(verifiedPaymentOrder, GetFeeRate(company, channelOverride, account), input.TransparentKey); await paymentOrderRepository.InsertAsync(paymentOrder); await CurrentUnitOfWork.SaveChangesAsync(); return(new ResultDto <PaymentOrderDto> { IsSuccess = true, Data = ObjectMapper.Map <PaymentOrderDto>(paymentOrder), ErrorMessage = "提交成功" }); }