using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using GxPress.Common.Exceptions;
using GxPress.Common.Http;
using GxPress.Request.App.IM;
using Newtonsoft.Json;
using GxPress.Common.Extensions;
using GxPress.Common.Tools;
namespace GxPress.Service.Implement.IM
{
public partial class IMService
{
///
/// 群添加成员
///
///
///
public async Task InsertGroupChatUsersAsync(InsertGroupChatUsersRequest request)
{
var imServiceUrl = ConfigHelper.GetValue("ServiceAddress:ImUrl");
var token = await _cache.GetAsync("ImToken");
//创建群
var url = $"{imServiceUrl}/chatgroups/{request.GroupChatImId}/users";
var headers = new Dictionary { { "Authorization", "Bearer " + token } };
//获取成员
var users = await _userRepository.UserListInsAsync(request.UserIds);
request.Users = users.ToList();
if (request.Users.Count == 0)
return false;
var usersObj = new { usernames = users.Select(n => n.ImId) };
var response =
await HttpClientHelper.PostAsync(url, usersObj, headers);
var tokenJson = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
var dataJsonDynamic = JsonConvert.DeserializeObject(tokenJson);
request.GroupChatImId = dataJsonDynamic.data.groupid.ToString();
return await groupChatService.InsertUsersIntoGroupChatAsync(request);
}
//
if (!string.IsNullOrWhiteSpace(request.GroupChatImId) && request.IsFound)
{
var groupChat = await _groupChatRepository.GetGroupChatByImIdAsync(request.GroupChatImId);
await groupChatService.DeleteAsync(groupChat.Id);
}
if (response.StatusCode == HttpStatusCode.NotFound)
throw new BusinessException("此群组ID或被添加的人不存在");
if (response.StatusCode == HttpStatusCode.Unauthorized)
throw new BusinessException("未授权[无token、token错误、token过期]");
if (response.StatusCode == HttpStatusCode.BadRequest)
throw new BusinessException("owner用户不存在");
if (response.StatusCode == HttpStatusCode.TooManyRequests)
throw new BusinessException("接口被限流");
return false;
}
}
}