IMService.AddChatGroupUsers.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Net;
  4. using System.Threading.Tasks;
  5. using GxPress.Common.Exceptions;
  6. using GxPress.Common.Http;
  7. using GxPress.Request.App.IM;
  8. using Newtonsoft.Json;
  9. using GxPress.Common.Extensions;
  10. using GxPress.Common.Tools;
  11. namespace GxPress.Service.Implement.IM
  12. {
  13. public partial class IMService
  14. {
  15. /// <summary>
  16. /// 群添加成员
  17. /// </summary>
  18. /// <param name="request"></param>
  19. /// <returns></returns>
  20. public async Task<bool> InsertGroupChatUsersAsync(InsertGroupChatUsersRequest request)
  21. {
  22. var imServiceUrl = ConfigHelper.GetValue("ServiceAddress:ImUrl");
  23. var token = await _cache.GetAsync<string>("ImToken");
  24. //创建群
  25. var url = $"{imServiceUrl}/chatgroups/{request.GroupChatImId}/users";
  26. var headers = new Dictionary<string, string> { { "Authorization", "Bearer " + token } };
  27. //获取成员
  28. var users = await _userRepository.UserListInsAsync(request.UserIds);
  29. request.Users = users.ToList();
  30. if (request.Users.Count == 0)
  31. return false;
  32. var usersObj = new { usernames = users.Select(n => n.ImId) };
  33. var response =
  34. await HttpClientHelper.PostAsync(url, usersObj, headers);
  35. var tokenJson = await response.Content.ReadAsStringAsync();
  36. if (response.IsSuccessStatusCode)
  37. {
  38. var dataJsonDynamic = JsonConvert.DeserializeObject<dynamic>(tokenJson);
  39. request.GroupChatImId = dataJsonDynamic.data.groupid.ToString();
  40. return await groupChatService.InsertUsersIntoGroupChatAsync(request);
  41. }
  42. //
  43. if (!string.IsNullOrWhiteSpace(request.GroupChatImId) && request.IsFound)
  44. {
  45. var groupChat = await _groupChatRepository.GetGroupChatByImIdAsync(request.GroupChatImId);
  46. await groupChatService.DeleteAsync(groupChat.Id);
  47. }
  48. if (response.StatusCode == HttpStatusCode.NotFound)
  49. throw new BusinessException("此群组ID或被添加的人不存在");
  50. if (response.StatusCode == HttpStatusCode.Unauthorized)
  51. throw new BusinessException("未授权[无token、token错误、token过期]");
  52. if (response.StatusCode == HttpStatusCode.BadRequest)
  53. throw new BusinessException("owner用户不存在");
  54. if (response.StatusCode == HttpStatusCode.TooManyRequests)
  55. throw new BusinessException("接口被限流");
  56. return false;
  57. }
  58. }
  59. }