public List <ChatDto> SearchChatMessages(string userId, DateTime?beginTime, DateTime?endTime, string senderName, EnterpriseData.Common.ReadStatus status, int pageSize, int pageNumber, out int amount) { try { if (string.IsNullOrEmpty(senderName)) { senderName = ""; } //if (beginTime > endTime) // throw new KnownException("起止时间不合法"); using (var db = new BCEnterpriseContext()) { var mgdb = new MongoDbProvider <UserMessageQueueItem>(); var uidlist = db.FrontUsers.Where(x => x.Name.Contains(senderName)).Select(n => n.UserID).ToList(); var templist = mgdb.GetAll(o => o.UserID == userId && ((ChatMessage)o.Data).SendTime <(endTime ?? DateTime.MaxValue) && ((ChatMessage)o.Data).SendTime> (beginTime ?? DateTime.MinValue) && (((ChatMessage)o.Data).IsRead == status || (status == EnterpriseData.Common.ReadStatus.All)) && uidlist.Contains(((ChatMessage)o.Data).SendUserID)) .Select(o => new ChatDto { SendTime = ((ChatMessage)o.Data).SendTime.ToLocalTime(), SenderName = ((ChatMessage)o.Data).SendUserID, Message = ((ChatMessage)o.Data).Message, IsRead = ((ChatMessage)o.Data).IsRead, MessageID = ((ChatMessage)o.Data).MessageID }).ToList(); var namelist = db.FrontUsers.Where(x => uidlist.Contains(x.UserID)).Select(x => new uidnameDto { UserId = x.UserID, UserName = x.Name }).ToList(); var list = from user in namelist join temp in templist on user.UserId equals temp.SenderName select new { SendTime = temp.SendTime, SenderName = user.UserName, IsRead = temp.IsRead, Message = temp.Message, MessageID = temp.MessageID }; //var list = templist.Where(x=>namelist.Any(n=>n.UserId.Equals(x.SenderName))).Select(m=>new ChatDto{ //SenderName = m. //}) int pagecount; amount = list.Count(); if (pageSize > 0) { // 获取总共页数 pagecount = (list.Count() + pageSize - 1) / pageSize; } else { pagecount = 0; } //页码判断,小于1则为1,大于最大页码则为最大页码 if (pageNumber > pagecount) { pageNumber = pagecount; } if (pageNumber < 1) { pageNumber = 1; } return(list.Select(x => new ChatDto { SendTime = x.SendTime, SenderName = x.SenderName, IsRead = x.IsRead, Message = x.Message, MessageID = x.MessageID }).OrderBy(x => x.MessageID).Skip(pageSize * (pageNumber - 1)).Take(pageSize).ToList()); } } catch (Exception ex) { throw ex; } }
public List <ChatDto> SearchChatMessages(string userId, DateTime?beginTime, DateTime?endTime, string objectiveName, EnterpriseData.Common.ReadStatus status, int pageSize, int pageNumber, out int amount) { try { if (string.IsNullOrEmpty(objectiveName)) { objectiveName = ""; } //if (beginTime > endTime) // throw new KnownException("起止时间不合法"); using (var db = new BCEnterpriseContext()) { var mgdb = new MongoDbProvider <UserMessageQueueItem>(); var msg = mgdb.GetAll(x => x.UserID == userId && ((ChatMessage)x.Data).IsRead == ReadStatus.NoRead); foreach (var chat in msg) { ((ChatMessage)chat.Data).IsRead = EnterpriseData.Common.ReadStatus.Read; mgdb.Update(chat); } var uidlist = db.FrontUsers.Where(x => x.Name.Contains(objectiveName)).Select(n => n.UserID).ToList(); List <ChatMessageDto> sendlist = new List <ChatMessageDto>(); List <ChatMessageDto> recivelist = new List <ChatMessageDto>(); sendlist = mgdb.GetAll(o => o.UserID == userId && ((ChatMessage)o.Data).SendTime <(endTime ?? DateTime.MaxValue) && ((ChatMessage)o.Data).SendTime> (beginTime ?? DateTime.MinValue) && (((ChatMessage)o.Data).IsRead == status || (status == EnterpriseData.Common.ReadStatus.All)) && uidlist.Contains(((ChatMessage)o.Data).SendUserID)).Select(o => { var temp = (ChatMessage)o.Data; return(new ChatMessageDto { SendUserID = temp.SendUserID, SendUserName = temp.SendUserName, SendUserPicture = temp.SendUserPicture, EnterpriseID = temp.EnterpriseID, Recipients = temp.Recipients, Message = temp.Message, MessageID = temp.MessageID, IsRead = temp.IsRead, SendTime = temp.SendTime.ToLocalTime(), Time = o.Time.ToLocalTime() }); }).Distinct().ToList(); foreach (var chat in sendlist) { List <KeyValuePair <string, string> > userlist = new List <KeyValuePair <string, string> >(); var useridlist = mgdb.GetAll(x => ((ChatMessage)x.Data).MessageID == chat.MessageID) .Select(n => n.UserID).Distinct().ToList(); foreach (var user in useridlist) { var u = db.FrontUsers.FirstOrDefault(x => x.UserID.Equals(user)); userlist.Add(new KeyValuePair <string, string>((u ?? new FrontUser { UserID = "" }).UserID, (u ?? new FrontUser { Name = "" }).Name)); } chat.UserList = userlist; } //var msgidlist = templist.Select(x => x.MessageID).ToList(); //var useridlist = mgdb.GetAll(x => msgidlist.Contains(((ChatMessage)x.Data).MessageID)) // .Select(n => ((ChatMessage)n.Data).SendUserID) // .ToList(); recivelist = mgdb.GetAll(o => ((ChatMessage)o.Data).SendUserID == userId && ((ChatMessage)o.Data).SendTime <(endTime ?? DateTime.MaxValue) && ((ChatMessage)o.Data).SendTime> (beginTime ?? DateTime.MinValue) && (((ChatMessage)o.Data).IsRead == status || (status == EnterpriseData.Common.ReadStatus.All)) && uidlist.Contains(o.UserID)).Select(o => { var temp = (ChatMessage)o.Data; return(new ChatMessageDto { SendUserID = temp.SendUserID, SendUserName = temp.SendUserName, SendUserPicture = temp.SendUserPicture, EnterpriseID = temp.EnterpriseID, Recipients = temp.Recipients, Message = temp.Message, MessageID = temp.MessageID, IsRead = temp.IsRead, SendTime = temp.SendTime.ToLocalTime(), Time = o.Time.ToLocalTime() }); }).Distinct().ToList(); foreach (var chat in recivelist) { List <KeyValuePair <string, string> > userlist = new List <KeyValuePair <string, string> >(); var useridlist = mgdb.GetAll(x => ((ChatMessage)x.Data).MessageID == chat.MessageID) .Select(n => n.UserID).Distinct().ToList(); foreach (var user in useridlist) { var u = db.FrontUsers.FirstOrDefault(x => x.UserID.Equals(user)); userlist.Add(new KeyValuePair <string, string>((u ?? new FrontUser { UserID = "" }).UserID, (u ?? new FrontUser { Name = "" }).Name)); } chat.UserList = userlist; } var templist = sendlist.Concat(recivelist); //.Select( //o => new ChatDto //{ // SendTime = ((ChatMessage)o.Data).SendTime.ToLocalTime(), // SenderName = ((ChatMessage)o.Data).SendUserID, // Message = ((ChatMessage)o.Data).Message, // IsRead = ((ChatMessage)o.Data).IsRead, // MessageID = ((ChatMessage)o.Data).MessageID //}).Distinct(); var namelist = db.FrontUsers.Where(x => uidlist.Contains(x.UserID)).Select(x => new uidnameDto { UserId = x.UserID, UserName = x.Name }).ToList(); var list = from user in namelist join temp in templist on user.UserId equals temp.SendUserID select new { SendTime = temp.SendTime, SenderName = user.UserName, IsRead = temp.IsRead, Message = temp.Message, MessageID = temp.MessageID, UserList = temp.UserList }; //var list = templist.Where(x=>namelist.Any(n=>n.UserId.Equals(x.SenderName))).Select(m=>new ChatDto{ //SenderName = m. //}) int pagecount; amount = list.Count(); if (pageSize > 0) { // 获取总共页数 pagecount = (list.Count() + pageSize - 1) / pageSize; } else { pagecount = 0; } //页码判断,小于1则为1,大于最大页码则为最大页码 if (pageNumber > pagecount) { pageNumber = pagecount; } if (pageNumber < 1) { pageNumber = 1; } return(list.Select(x => new ChatDto { SendTime = x.SendTime, SenderName = x.SenderName, IsRead = x.IsRead, Message = x.Message, MessageID = x.MessageID, UserList = x.UserList }).OrderByDescending(x => x.SendTime).Skip(pageSize * (pageNumber - 1)).Take(pageSize).ToList().Distinct(new DistinctByMessageID()).ToList()); } } catch (Exception ex) { throw ex; } }