/// <summary> /// 更新会话 /// 单聊 /// </summary> /// <param name="model"></param> /// <returns></returns> private bool Single_updateSession(IM_MsgSingle msg) { var user = LOGIN_USER; var db_result = 0; using (var db = new ModelAC()) { var session = db.IM_Chatter.SingleOrDefault(p => p.App_Id == APP_GUID && p.ChatType == IM_ChatType.Single && ((p.Single_A_UserId == msg.From_UserId && p.Single_B_UserId == msg.To_UserId) || (p.Single_A_UserId == msg.To_UserId && p.Single_B_UserId == msg.From_UserId)) ); if (session == null) { #region 新增会话 var newSession = new IM_Chatter() { App_Id = APP_GUID, ChatType = IM_ChatType.Single, Single_A_UserId = msg.From_UserId, Single_B_UserId = msg.To_UserId, Group_GroupId = null, }; newSession.IM_ChatterActors.Add(new IM_ChatterActor() {//消息发送者 App_Id = APP_GUID, ChatterId = newSession.Id, UserId = msg.From_UserId, Last_MsgId = msg.Id, UnreadMsgCount = 0, ChatterTime = DateTime.Now, IsCleared = false, }); newSession.IM_ChatterActors.Add(new IM_ChatterActor() {//消息接收者 App_Id = APP_GUID, ChatterId = newSession.Id, UserId = msg.To_UserId, Last_MsgId = msg.Id, UnreadMsgCount = 1, ChatterTime = DateTime.Now, IsCleared = false, }); db.IM_Chatter.Add(newSession); db_result = db.SaveChanges(); #endregion } else { #region 更新会话 foreach (var toActor in session.IM_ChatterActors) { toActor.Last_MsgId = msg.Id; if (toActor.UserId != user.Id) {//消息接收者 toActor.UnreadMsgCount += 1; } toActor.ChatterTime = DateTime.Now; } db_result = db.SaveChanges(); #endregion } } return(db_result > 0); }
/// <summary> /// 更新会话 /// 群聊 /// </summary> /// <param name="model"></param> /// <returns></returns> private bool Group_updateSession(IM_MsgGroup msg) { var user = LOGIN_USER; //所有群聊成员 var allMembers = new List <Guid>(); var db_result = 0; using (var db = new ModelAC()) { allMembers = db.Im_UserGroup.Where(p => p.IM_Group_Id == msg.To_GroupId).Select(p => p.IM_User_Id).ToList(); var session = db.IM_Chatter.SingleOrDefault(p => p.App_Id == APP_GUID && p.ChatType == IM_ChatType.Group && p.Group_GroupId == msg.To_GroupId); if (session == null) { #region 新增会话 var newSession = new IM_Chatter() { App_Id = APP_GUID, ChatType = IM_ChatType.Group, Single_A_UserId = null, Single_B_UserId = null, Group_GroupId = msg.To_GroupId, }; newSession.IM_ChatterActors.Add(new IM_ChatterActor() {//消息发送者 App_Id = APP_GUID, ChatterId = newSession.Id, UserId = msg.From_UserId, Last_MsgId = msg.Id, UnreadMsgCount = 0, ChatterTime = DateTime.Now, IsCleared = false, }); allMembers.Remove(msg.From_UserId); foreach (var memeberId in allMembers) {//消息接收者 newSession.IM_ChatterActors.Add(new IM_ChatterActor() { App_Id = APP_GUID, ChatterId = newSession.Id, UserId = memeberId, Last_MsgId = msg.Id, UnreadMsgCount = 1, ChatterTime = DateTime.Now, IsCleared = false, }); } db.IM_Chatter.Add(newSession); db_result = db.SaveChanges(); #endregion } else { #region 更新会话 List <Guid> oldIM_ChatterActors = session.IM_ChatterActors.Select(p => p.UserId).ToList(); List <Guid> expectedList = allMembers.Except(oldIM_ChatterActors).ToList(); foreach (var toActor in session.IM_ChatterActors) {//更新会话参与者 toActor.Last_MsgId = msg.Id; if (toActor.UserId != user.Id) {//消息接收者 toActor.UnreadMsgCount += 1; } toActor.ChatterTime = DateTime.Now; } if (expectedList.Exists(p => p == msg.From_UserId)) {//新增会话参与者-消息发送者 expectedList.Remove(msg.From_UserId); session.IM_ChatterActors.Add(new IM_ChatterActor() { App_Id = APP_GUID, ChatterId = session.Id, UserId = msg.From_UserId, Last_MsgId = msg.Id, UnreadMsgCount = 0, ChatterTime = DateTime.Now, IsCleared = false, }); } foreach (var memeberId in expectedList) {//新增会话参与者-消息接收者 session.IM_ChatterActors.Add(new IM_ChatterActor() { App_Id = APP_GUID, ChatterId = session.Id, UserId = memeberId, Last_MsgId = msg.Id, UnreadMsgCount = 1, ChatterTime = DateTime.Now, IsCleared = false, }); } db_result = db.SaveChanges(); #endregion } } return(db_result > 0); }