using System.Collections.Generic; using System.Net; using System.Threading.Tasks; using GxPress.Common.Exceptions; using GxPress.Common.Http; using GxPress.Entity; using GxPress.Common.Extensions; using GxPress.Common.Tools; namespace GxPress.Service.Implement.IM { public partial class IMService { /// /// 添加用户黑名单 /// /// /// /// public async Task AddBlacklistUserAsync(int userId, int blacklistUserId) { var imServiceUrl = ConfigHelper.GetValue("ServiceAddress:ImUrl"); var resultBool = await _blacklistUserRepository.FindUserIsBlack(userId, blacklistUserId); if (resultBool) return true; var token = await _cache.GetAsync("ImToken"); var user = await _userRepository.GetAsync(userId); var blacklistUserEntity = await _userRepository.GetAsync(blacklistUserId); //环信添加黑名单 var url = $"{imServiceUrl}/users/{user.ImId}/blocks/users"; var headers = new Dictionary { { "Authorization", "Bearer " + token } }; var imIds = new List { blacklistUserEntity.ImId }; var jsonObj = new { usernames = imIds }; var response = await HttpClientHelper.PostAsync(url, jsonObj, headers); if (response.IsSuccessStatusCode) { //设置成功 var blacklistUser = new BlacklistUser { UserId = userId, AvatarUrl = blacklistUserEntity.AvatarUrl, BlackUserName = blacklistUserEntity.Name, ImId = blacklistUserEntity.ImId, BlackUserId = blacklistUserId }; await _blacklistUserRepository.InsertAsync(blacklistUser); //关系界面 await _oftenContactRepository.SetBlackUserAsync(userId, blacklistUserId); return true; } if (response.StatusCode == HttpStatusCode.NotFound) throw new BusinessException("用户不存在"); if (response.StatusCode == HttpStatusCode.Unauthorized) throw new BusinessException("未授权[无token、token错误、token过期]"); if (response.StatusCode == HttpStatusCode.TooManyRequests) throw new BusinessException("接口被限流"); return true; } /// /// 移除黑名单 /// /// /// public async Task ReMoveBlacklistUserAsync(int blackUserId, int userId) { var imServiceUrl = ConfigHelper.GetValue("ServiceAddress:ImUrl"); var blacklistUser = await _blacklistUserRepository.GetBlackUserAsync(userId, blackUserId); if (blacklistUser == null) return false; var token = await _cache.GetAsync("ImToken"); var user = await _userRepository.GetAsync(blacklistUser.UserId); //环信添加黑名单 var url = $"{imServiceUrl}/users/{user.ImId}/blocks/users/{blacklistUser.ImId}"; var headers = new Dictionary { { "Authorization", "Bearer " + token } }; var response = await HttpClientHelper.DeleteAsync(url, headers); if (response.IsSuccessStatusCode) { await _blacklistUserRepository.DeleteAsync(blacklistUser.Id); //关系界面 await _oftenContactRepository.SetBlackUserAsync(blacklistUser.UserId, blacklistUser.BlackUserId); return true; } if (response.StatusCode == HttpStatusCode.NotFound) throw new BusinessException("用户不存在"); if (response.StatusCode == HttpStatusCode.Unauthorized) throw new BusinessException("未授权[无token、token错误、token过期]"); if (response.StatusCode == HttpStatusCode.TooManyRequests) throw new BusinessException("接口被限流"); return true; } } }