/// <summary> /// 添加好友 /// 作者:郭明 /// 日期:2017年6月23日 /// </summary> /// <param name="request"></param> /// <returns></returns> public Dictionary <int, ResponseConversationRoomDTO> ApplyAddFriend(RequestConversactionApplyAddFriendDTO request) { Dictionary <int, ResponseConversationRoomDTO> result = new Dictionary <int, ResponseConversationRoomDTO>(); using (var db = new DBEntities()) { request.AddFriendItem.ForEach(account => { var channelInfo = (from friend in db.ConversationFriends.Where(a => a.FromUserID == request.FromUserID && a.ToUserID == account.ToUserID) join room in db.ConversationRooms on friend.ConversationRoomID equals room.ConversationRoomID where room.RoomType == EnumRoomType.C2C select room).FirstOrDefault(); if (channelInfo == null) { var ConversationRoomID = Guid.NewGuid().ToString("N"); channelInfo = new ConversationRoom() { ServiceID = "", Priority = 5, ChargingInterval = 0, ChargingSeq = 0, ChargingState = EnumRoomChargingState.Stoped, ChargingTime = DateTime.Now, Duration = 0, TotalTime = 0, Enable = false, ServiceType = EnumDoctorServiceType.PicServiceType, Secret = "", BeginTime = DateTime.Now, EndTime = DateTime.Now, ConversationRoomID = ConversationRoomID, CreateTime = DateTime.Now, IsDeleted = false, RoomState = EnumRoomState.NoTreatment, RoomType = EnumRoomType.C2C, TriageID = long.MaxValue }; db.ConversationRooms.Add(channelInfo); db.ConversationRoomUids.Add(new ConversationRoomUid() { ConversationRoomID = ConversationRoomID, Identifier = account.ToUserIdentifier, UserType = account.ToUserType, IsDeleted = false, UserMemberID = account.ToUserMemberID, CreateUserID = request.FromUserID, UserID = account.ToUserID, UserCNName = account.ToUserName, UserENName = account.ToUserName, PhotoUrl = "", }); if (request.FromUserIdentifier != request.FromUserIdentifier) { db.ConversationRoomUids.Add(new ConversationRoomUid() { ConversationRoomID = ConversationRoomID, Identifier = request.FromUserIdentifier, UserType = request.FromUserType, IsDeleted = false, UserMemberID = request.FromUserMemberID, CreateUserID = request.FromUserID, UserID = request.FromUserID, UserCNName = account.ToUserName, UserENName = account.ToUserName, PhotoUrl = "", }); } db.ConversationFriends.Add(new ConversationFriend() { ConversationRoomID = ConversationRoomID, FromUserID = request.FromUserID, FromUserIdentifier = request.FromUserIdentifier, ToUserIdentifier = account.ToUserIdentifier, ToUserID = account.ToUserID, AddWording = account.AddWording, CreateTime = DateTime.Now, GroupName = account.GroupName, Remark = account.Remark, IsDeleted = false, FriendID = Guid.NewGuid().ToString("N") }); db.ConversationFriends.Add(new ConversationFriend() { ConversationRoomID = ConversationRoomID, FromUserID = account.ToUserID, FromUserIdentifier = account.ToUserIdentifier, ToUserIdentifier = request.FromUserIdentifier, ToUserID = request.FromUserID, AddWording = account.AddWording, CreateTime = DateTime.Now, GroupName = account.GroupName, Remark = account.Remark, IsDeleted = false, FriendID = Guid.NewGuid().ToString("N") }); db.SaveChanges(); result.Add(account.ToUserIdentifier, channelInfo.Map <ConversationRoom, ResponseConversationRoomDTO>()); } else { result.Add(account.ToUserIdentifier, channelInfo.Map <ConversationRoom, ResponseConversationRoomDTO>()); } }); } return(result); }
public bool Handle(Dto.EventBus.ChannelC2CCreateEvent evt) { try { if (evt == null) { return(true); } if (string.IsNullOrEmpty(evt.FromUserID)) { return(true); } if (evt.AddFriendItem == null || evt.AddFriendItem.Count <= 0) { return(true); } //创建房间请求参数 var createC2CChannelRequest = new RequestConversactionApplyAddFriendDTO() { FromUserIdentifier = evt.FromUserIdentifier, FromUserMemberID = evt.FromUserMemberID, FromUserType = evt.FromUserType, FromUserID = evt.FromUserID, FromUserName = evt.FromUserName, AddFriendItem = new List <AddFriendAccount>() }; //添加群组请求参数 var requestParamsCreateGroup = new List <int>() { evt.FromUserIdentifier }; //添加好友请求参数 var requestParamsApplyAddFriend = new List <Dto.IM.AddFriendAccount>(); //循环好友项 evt.AddFriendItem.ForEach(a => { //好友存在 createC2CChannelRequest.AddFriendItem.Add(new AddFriendAccount() { AddType = "Add_Type_Both", AddWording = a.AddWording, ForceAddFlags = 1, GroupName = a.GroupName, Remark = a.Remark, ToUserID = a.ToUserID, ToUserIdentifier = a.ToUserIdentifier, ToUserMemberID = a.ToUserMemberID, ToUserType = a.ToUserType, ToUserName = a.ToUserName }); requestParamsApplyAddFriend.Add(new Dto.IM.AddFriendAccount { AddWording = a.AddWording, AddSource = "AddSource_Type_WEB",//需要前缀AddSource_Type_ GroupName = a.GroupName, Remark = a.Remark, To_Account = a.ToUserIdentifier.ToString() }); requestParamsCreateGroup.Add(a.ToUserIdentifier); }); //写入数据库 var ChannelInfoList = roomService.ApplyAddFriend(createC2CChannelRequest); using (MQChannel mqChannel = new MQChannel()) { mqChannel.BeginTransaction(); foreach (var item in ChannelInfoList) { var room = item.Value; //根据Uid 获取好友信息 var friend = requestParamsApplyAddFriend.Find(a => a.To_Account == item.Key.ToString()); //如果房间还未启用才调用请求否则忽略 if (!room.Enable) { //发送好友附言消息 if (!mqChannel.Publish(new Dto.EventBus.ChannelSendGroupMsgEvent <string>() { ChannelID = room.ConversationRoomID, FromAccount = evt.FromUserIdentifier, Msg = friend.AddWording })) { return(false); } //发布房间创建完成的领域消息 if (!mqChannel.Publish(new Dto.EventBus.ChannelCreatedEvent() { ChannelID = room.ConversationRoomID, ServiceID = room.ServiceID, ServiceType = room.ServiceType })) { return(false); } //新增好友 if (!imService.ApplyAddFriend(evt.FromUserIdentifier.ToString(), requestParamsApplyAddFriend)) { return(false); } //创建群组 if (!imService.CreateGroup(room.ConversationRoomID, room.ConversationRoomID, room.ServiceType, requestParamsCreateGroup, "", "")) { return(false); } //设置房间已经启用 //room.Enable = true; //更新房间状态 if (!roomService.UpdateRoomEable(room.ConversationRoomID, true)) { return(false); } } } mqChannel.Commit(); } return(true); } catch (Exception E) { LogHelper.DefaultLogger.Error(E); } return(false); }