IMService.Blacklist.cs 4.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System.Collections.Generic;
  2. using System.Net;
  3. using System.Threading.Tasks;
  4. using GxPress.Common.Exceptions;
  5. using GxPress.Common.Http;
  6. using GxPress.Entity;
  7. using GxPress.Common.Extensions;
  8. using GxPress.Common.Tools;
  9. namespace GxPress.Service.Implement.IM
  10. {
  11. public partial class IMService
  12. {
  13. /// <summary>
  14. /// 添加用户黑名单
  15. /// </summary>
  16. /// <param name="userId"></param>
  17. /// <param name="blacklistUserId"></param>
  18. /// <returns></returns>
  19. public async Task<bool> AddBlacklistUserAsync(int userId, int blacklistUserId)
  20. {
  21. var imServiceUrl = ConfigHelper.GetValue("ServiceAddress:ImUrl");
  22. var resultBool = await _blacklistUserRepository.FindUserIsBlack(userId, blacklistUserId);
  23. if (resultBool)
  24. return true;
  25. var token = await _cache.GetAsync<string>("ImToken");
  26. var user = await _userRepository.GetAsync(userId);
  27. var blacklistUserEntity = await _userRepository.GetAsync(blacklistUserId);
  28. //环信添加黑名单
  29. var url = $"{imServiceUrl}/users/{user.ImId}/blocks/users";
  30. var headers = new Dictionary<string, string> { { "Authorization", "Bearer " + token } };
  31. var imIds = new List<string> { blacklistUserEntity.ImId };
  32. var jsonObj = new { usernames = imIds };
  33. var response =
  34. await HttpClientHelper.PostAsync(url, jsonObj, headers);
  35. if (response.IsSuccessStatusCode)
  36. {
  37. //设置成功
  38. var blacklistUser = new BlacklistUser
  39. {
  40. UserId = userId,
  41. AvatarUrl = blacklistUserEntity.AvatarUrl,
  42. BlackUserName = blacklistUserEntity.Name,
  43. ImId = blacklistUserEntity.ImId,
  44. BlackUserId = blacklistUserId
  45. };
  46. await _blacklistUserRepository.InsertAsync(blacklistUser);
  47. //关系界面
  48. await _oftenContactRepository.SetBlackUserAsync(userId, blacklistUserId);
  49. return true;
  50. }
  51. if (response.StatusCode == HttpStatusCode.NotFound)
  52. throw new BusinessException("用户不存在");
  53. if (response.StatusCode == HttpStatusCode.Unauthorized)
  54. throw new BusinessException("未授权[无token、token错误、token过期]");
  55. if (response.StatusCode == HttpStatusCode.TooManyRequests)
  56. throw new BusinessException("接口被限流");
  57. return true;
  58. }
  59. /// <summary>
  60. /// 移除黑名单
  61. /// </summary>
  62. /// <param name="blacklistId"></param>
  63. /// <returns></returns>
  64. public async Task<bool> ReMoveBlacklistUserAsync(int blackUserId, int userId)
  65. {
  66. var imServiceUrl = ConfigHelper.GetValue("ServiceAddress:ImUrl");
  67. var blacklistUser = await _blacklistUserRepository.GetBlackUserAsync(userId, blackUserId);
  68. if (blacklistUser == null)
  69. return false;
  70. var token = await _cache.GetAsync<string>("ImToken");
  71. var user = await _userRepository.GetAsync(blacklistUser.UserId);
  72. //环信添加黑名单
  73. var url = $"{imServiceUrl}/users/{user.ImId}/blocks/users/{blacklistUser.ImId}";
  74. var headers = new Dictionary<string, string> { { "Authorization", "Bearer " + token } };
  75. var response =
  76. await HttpClientHelper.DeleteAsync(url, headers);
  77. if (response.IsSuccessStatusCode)
  78. {
  79. await _blacklistUserRepository.DeleteAsync(blacklistUser.Id);
  80. //关系界面
  81. await _oftenContactRepository.SetBlackUserAsync(blacklistUser.UserId, blacklistUser.BlackUserId);
  82. return true;
  83. }
  84. if (response.StatusCode == HttpStatusCode.NotFound)
  85. throw new BusinessException("用户不存在");
  86. if (response.StatusCode == HttpStatusCode.Unauthorized)
  87. throw new BusinessException("未授权[无token、token错误、token过期]");
  88. if (response.StatusCode == HttpStatusCode.TooManyRequests)
  89. throw new BusinessException("接口被限流");
  90. return true;
  91. }
  92. }
  93. }