Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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;
            }
        }