using System; using System.Threading.Tasks; using System.Transactions; using Datory; using GxPress.Request.App.IM; using GxPress.Service.Interface.GroupChat; using GxPress.Repository.Interface; using System.Collections.Generic; using System.Linq; namespace GxPress.Service.Implement.GroupChat { public class GroupChatService : IGroupChatService { private readonly IOftenContactRepository oftenContactRepository; private readonly IGroupChatRepository groupChatRepository; private readonly IMiddleRepository middleRepository; private readonly IGroupChatUserRepository groupChatUserRepository; public GroupChatService(IOftenContactRepository oftenContactRepository, IGroupChatRepository groupChatRepository, IMiddleRepository middleRepository, IGroupChatUserRepository groupChatUserRepository) { this.oftenContactRepository = oftenContactRepository; this.groupChatRepository = groupChatRepository; this.middleRepository = middleRepository; this.groupChatUserRepository = groupChatUserRepository; } /// /// 群添加用户 /// /// /// public async Task InsertUsersIntoGroupChatAsync(InsertGroupChatUsersRequest request) { try { using (TransactionScope transactionScope = new TransactionScope()) { var groupChat = await groupChatRepository.GetAsync(Q.Where(nameof(Entity.GroupChat.GroupChatImId), request.GroupChatImId)); if (groupChat == null) return false; //添加用户 var oftenContacts = new List(); var middles = new List(); var groupChatUsers = new List(); foreach (var user in request.Users) { if (user.Id == groupChat.UserId) continue; var oftenContact = new Entity.OftenContact { ChatType = 2, ContactUserId = groupChat.GroupChatImId, IndividualGroupId = 0, UserId = user.Id }; oftenContacts.Add(oftenContact); } //绑定关系 await oftenContactRepository.InsertAsync(oftenContacts); //查询关系 var oftenContactList = await oftenContactRepository.GetAllAsync(Q.Where(nameof(Entity.OftenContact.ChatType), 2).Where(nameof(Entity.OftenContact.ContactUserId), groupChat.GroupChatImId)); foreach (var oftenContact in oftenContactList) { if (oftenContact.UserId == groupChat.UserId) continue; //var oftenContactId = await oftenContactRepository.InsertAsync(oftenContact); //添加middle var middle = new Entity.Middle.Middle(); middle.IsAdmin = true; middle.MiddleId = oftenContact.Id; middle.FolderType = 10; middle.IsDefault = false; middle.IsDelete = false; middle.UserId = oftenContact.UserId; middle.IsRead = false; middle.IsTop = false; middle.ParentId = 0; //await middleRepository.InsertAsync(middle); //查询用户信息 var user = request.Users.FirstOrDefault(n => n.Id == oftenContact.UserId); if (user == null) continue; var groupChatUser = new Entity.GroupChatUser { GroupChatId = groupChat.Id, UserId = oftenContact.UserId, ImId = user.ImId, GroupChatImId = request.GroupChatImId, IsAdmin = false }; groupChatUsers.Add(groupChatUser); middles.Add(middle); //创建环信Mi群 // var id = await groupChatUserRepository.InsertAsync(groupChatUser); } await middleRepository.InsertAsync(middles); // await groupChatUserRepository.InsertAsync(groupChatUsers); transactionScope.Complete(); } } catch (Exception e) { Console.WriteLine(e); throw; } return true; } public async Task DeleteAsync(int groupChatId) { return await groupChatRepository.DeleteAsync(groupChatId); } } }