Esempio n. 1
0
        /// <summary>
        /// 分页加载系统消息
        /// </summary>
        /// <param name="category"></param>
        /// <param name="memberId"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="totalCount"></param>
        /// <returns></returns>
        public IEnumerable <SystemMessageUnion> LoadSystemMessageByPage(MessageCategory category, string memberId, int pageIndex, int pageSize, out int totalCount)
        {
            using (var dbContext = new SystemMessageDbContext())
            {
                var queryList = from m in dbContext.SystemMessages
                                where m.Category == category &&
                                //没有删除的私有消息
                                ((dbContext.SystemMessageRecievers.Any(mr => mr.MessageId == m.Id && mr.RecieveId.Equals(memberId) && mr.Status != Status.Deleted) && m.MessageType == MessageType.Personal) ||

                                 //存在并没有删除的公有消息
                                 ((dbContext.SystemMessageRecievers.Any(mr => mr.MessageId == m.Id && mr.RecieveId.Equals(memberId) && mr.Status != Status.Deleted) ||
                                   //还不存在记录的公有消息
                                   (!dbContext.SystemMessageRecievers.Any(mr => mr.MessageId == m.Id && mr.RecieveId.Equals(memberId)))

                                   && m.MessageType == MessageType.Public))
                                )


                                select new SystemMessageUnion {
                    Id = m.Id, Category = m.Category, Title = m.Title, Content = m.Content, CreateTime = m.CreateTime, SourceId = m.SourceId, SourceType = m.SourceType, HasRead = dbContext.SystemMessageRecievers.Any(mr => mr.MessageId == m.Id && mr.RecieveId.Equals(memberId) && mr.Status == Status.HasRead)
                };
                totalCount = queryList.Count();
                return(queryList.OrderBy(o => o.HasRead).ThenByDescending(o => o.CreateTime).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList());
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 插入系统信息
        /// </summary>
        /// <param name="title"></param>
        /// <param name="content"></param>
        /// <param name="recieveId"></param>
        /// <param name="sourceId"></param>
        /// <param name="sourceType"></param>
        /// <param name="moduleKey"></param>
        /// <param name="category"></param>
        /// <returns></returns>
        private bool InsertSystemMessage(string title, string content, string recieveId, Guid?sourceId, string sourceType, string moduleKey, MessageCategory category = MessageCategory.System)
        {
            using (var dbContext = new SystemMessageDbContext())
            {
                var systemMessage = new Models.SystemMessage
                {
                    Id          = KeyGenerator.GetGuidKey(),
                    Title       = title,
                    Content     = content,
                    SourceId    = sourceId,
                    MessageType = recieveId == null ? MessageType.Public : MessageType.Personal,
                    CreateTime  = DateTime.Now,
                    SourceType  = sourceType,
                    ModuleKey   = moduleKey,
                    Category    = category
                };
                dbContext.SystemMessages.Add(systemMessage);
                if (recieveId != null)
                {
                    var systemMessageReciever = new SystemMessageReciever
                    {
                        Id         = KeyGenerator.GetGuidKey(),
                        MessageId  = systemMessage.Id,
                        RecieveId  = recieveId,
                        CreateTime = DateTime.Now,
                        Status     = Status.UnRead
                    };
                    dbContext.SystemMessageRecievers.Add(systemMessageReciever);
                }

                var result = dbContext.SaveChanges();
                return(result > 0);
            }
        }
Esempio n. 3
0
        private bool SetMessageRead(Models.SystemMessage message, string memberId)
        {
            if (message.MessageType == MessageType.Personal)
            {
                using (var dbContext = new SystemMessageDbContext())
                {
                    var query = (from mr in dbContext.SystemMessageRecievers
                                 where mr.MessageId == message.Id && mr.RecieveId == memberId && mr.Status == Status.UnRead
                                 select mr).ToList();
                    foreach (var item in query)
                    {
                        item.Status = Status.HasRead;
                        dbContext.Set <SystemMessageReciever>().Attach(item);
                        dbContext.Entry(item).State = System.Data.Entity.EntityState.Modified;
                    }
                    dbContext.SaveChanges();
                    return(true);
                }
            }
            if (message.MessageType == MessageType.Public)
            {
                using (var dbContext = new SystemMessageDbContext())
                {
                    var query = (from mr in dbContext.SystemMessageRecievers
                                 where mr.MessageId == message.Id && mr.RecieveId == memberId
                                 select mr).ToList();
                    if (query.Count > 0)
                    {
                        foreach (var item in query)
                        {
                            if (item.Status == Status.UnRead)
                            {
                                item.Status = Status.HasRead;
                                dbContext.Set <SystemMessageReciever>().Attach(item);
                                dbContext.Entry(item).State = System.Data.Entity.EntityState.Modified;
                            }
                        }
                    }
                    else
                    {
                        var messageReciever = new SystemMessageReciever();
                        messageReciever.Id         = KeyGenerator.GetGuidKey();
                        messageReciever.MessageId  = message.Id;
                        messageReciever.RecieveId  = memberId;
                        messageReciever.Status     = Status.HasRead;
                        messageReciever.CreateTime = DateTime.Now;
                        messageReciever.ReadTime   = DateTime.Now;
                        dbContext.SystemMessageRecievers.Add(messageReciever);
                    }
                    dbContext.SaveChanges();
                    return(true);
                }
            }

            return(true);
        }
Esempio n. 4
0
        public IEnumerable <Models.SystemMessage> GetSystemMessageListByPage(int pageIndex, int pageSize, out int totalCount)
        {
            using (var dbContext = new SystemMessageDbContext())
            {
                var query = from m in dbContext.SystemMessages
                            where m.Category == MessageCategory.System && m.SourceType.Equals("System", StringComparison.OrdinalIgnoreCase)
                            select m;
                totalCount = query.Count();
                var list = query.OrderByDescending(s => s.CreateTime).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();

                foreach (var message in list)
                {
                    message.ReadCount = dbContext.SystemMessageRecievers.Count(mr => mr.MessageId == message.Id && mr.Status == Status.HasRead);
                }

                return(list);
            }
        }
Esempio n. 5
0
        public bool SetRead(string memberId, MessageCategory category)
        {
            using (var dbContext = new SystemMessageDbContext())
            {
                var query = from m in dbContext.SystemMessages
                            where m.Category == category && !dbContext.SystemMessageRecievers.Any(
                    mr =>
                    mr.MessageId == m.Id && mr.Status != Status.UnRead &&
                    mr.RecieveId == memberId)
                            select m;
                foreach (var message in query.ToList())
                {
                    SetMessageRead(message, memberId);
                }

                return(true);
            }
        }
Esempio n. 6
0
        public SystemMessageUnion GetFirstMessage(MessageCategory category, string recieveId, out int unreadCount)
        {
            using (var dbContext = new SystemMessageDbContext())
            {
                var unreadCountQuery = from m in dbContext.SystemMessages
                                       where m.Category == category &&
                                       //未读的私有消息
                                       ((dbContext.SystemMessageRecievers.Any(mr => mr.MessageId == m.Id && mr.RecieveId.Equals(recieveId) && mr.Status == Status.UnRead) && m.MessageType == MessageType.Personal) ||

                                        //还不存在记录的公有消息
                                        (!dbContext.SystemMessageRecievers.Any(mr => mr.MessageId == m.Id && mr.RecieveId.Equals(recieveId))

                                         && m.MessageType == MessageType.Public)
                                       )
                                       select new { };
                unreadCount = unreadCountQuery.Count();


                var query = from m in dbContext.SystemMessages
                            where m.Category == category &&
                            //没有删除的私有消息
                            ((dbContext.SystemMessageRecievers.Any(mr => mr.MessageId == m.Id && mr.RecieveId.Equals(recieveId) && mr.Status != Status.Deleted) && m.MessageType == MessageType.Personal) ||

                             //存在并没有删除的公有消息
                             ((dbContext.SystemMessageRecievers.Any(mr => mr.MessageId == m.Id && mr.RecieveId.Equals(recieveId) && mr.Status != Status.Deleted) ||
                               //还不存在记录的公有消息
                               (!dbContext.SystemMessageRecievers.Any(mr => mr.MessageId == m.Id && mr.RecieveId.Equals(recieveId)))

                               && m.MessageType == MessageType.Public))
                            )
                            orderby m.CreateTime descending
                            select new SystemMessageUnion {
                    Id = m.Id, Category = m.Category, Title = m.Title, Content = m.Content, CreateTime = m.CreateTime, SourceId = m.SourceId, SourceType = m.SourceType, HasRead = dbContext.SystemMessageRecievers.Any(mr => mr.MessageId == m.Id && mr.RecieveId.Equals(recieveId) && mr.Status == Status.HasRead)
                };
                var message = query.FirstOrDefault();
                if (message == null)
                {
                    return(null);
                }
                return(message);
            }
        }