Esempio n. 1
0
        public Page <Sys_Role> GetList(int pageIndex, int pageSize, string keyWord)
        {
            var condition = FreeSql.Select <Sys_Role>()
                            .Where(t => t.DeleteMark == false)
                            .WhereIf(!string.IsNullOrEmpty(keyWord), t => t.Name.Contains(keyWord) || t.EnCode.Contains(keyWord))
                            .From <Sys_Organize>((r, o) => r.LeftJoin(a => a.OrganizeId == o.Id))
                            .LeftJoin <Sys_Organize>((r, o) => r.OrganizeId == o.Id);
            var total = condition.Count();
            var items = condition.OrderBy((a, b) => a.SortCode)
                        .ToList((a, b) => new Sys_Role
            {
                AllowEdit  = a.AllowEdit,
                CreateTime = a.CreateTime,
                CreateUser = a.CreateUser,
                DeleteMark = a.DeleteMark,
                EnCode     = a.EnCode,
                Id         = a.Id,
                IsEnabled  = a.IsEnabled,
                ModifyTime = a.ModifyTime,
                ModifyUser = a.ModifyUser,
                Name       = a.Name,
                OrganizeId = a.OrganizeId,
                Remark     = a.Remark,
                SortCode   = a.SortCode,
                Type       = a.Type,
                DeptName   = b.FullName
            });

            return(new Page <Sys_Role> {
                Items = items, TotalItems = total
            });
        }
Esempio n. 2
0
        /// <summary>
        /// 创建一个群聊会话
        /// </summary>
        /// <param name="fromUserId"></param>
        /// <param name="toUserIds"></param>
        /// <returns></returns>
        public async Task <long> CreateGroupSession(string fromUserId, string[] toUserIds)
        {
            long sessionId = 0L;

            FreeSql.Transaction(() =>
            {
                sessionId = FreeSql.Insert(new im_chat_session()
                {
                    CreateDt     = DateTime.Now,
                    CreateUserId = fromUserId,
                    IsPublic     = false,
                    Name         = $"群聊{DateTime.Now:yyyyMMdd}",
                    Type         = SessionTypeEnum.Group
                }).ExecuteIdentity();


                FreeSql.Insert(toUserIds.Select(x => new im_chat_userInSession()
                {
                    JoinDt    = DateTime.Now,
                    SessionId = sessionId,
                    UserId    = x
                })).ExecuteInserted();
            });

            return(sessionId);
        }
Esempio n. 3
0
        public async Task <long> GetMessageSessionById(long messageId)
        {
            return(await FreeSql.Select <im_chat_message>().Where(x => x.MessageId == messageId)
                   .ToOneAsync(x => x.SessionId));

            ;
        }
Esempio n. 4
0
        /// <summary>
        /// 获取包含用户Id列表的群组信息
        /// </summary>
        /// <param name="sessionId"></param>
        /// <returns></returns>
        public async Task <DTO_UserSession> GetSessionInfoById(long sessionId)
        {
            var s = await FreeSql.Select <im_chat_session>().Where(x => x.SessionId == sessionId).ToOneAsync <DTO_UserSession>();

            s.SessionUserIds = await GetSessionUserIds(sessionId);

            return(s);
        }
Esempio n. 5
0
        /// <summary>
        /// 获取用户相关连的会话列表
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        public async Task <IPagedList <DTO_UserSession> > GetUserSessions(string userId, int pageIndex = 1,
                                                                          int pageSize = 20)
        {
            var query = FreeSql.Select <im_chat_session, im_chat_userInSession, im_chat_message>()
                        .InnerJoin((x1, x2, x3) => x1.SessionId == x2.SessionId)
                        .LeftJoin((x1, x2, x3) => x1.LastMessageId == x3.MessageId)
                        .Where((x1, x2, x3) => x2.UserId == userId);

            var count = await query.CountAsync();

            if (count <= 0)
            {
                return(VM_PagedList <DTO_UserSession> .Empty(pageIndex, pageSize));
            }

            var t = await query
                    .OrderBy((x1, x2, x3) => x2.Order)
                    .OrderByDescending((x1, x2, x3) => x1.LastActivityDt)
                    .Skip((pageIndex - 1) * pageSize)
                    .Take(pageSize)
                    .ToListAsync <DTO_UserSession>((x1, x2, x3) => new DTO_UserSession()
            {
                SessionId          = x1.SessionId,
                Name               = x1.Name,
                ContentType        = x3 == null?null:(int?)x3.ContentType,
                LastMessageContent = x3 == null?"":x3.Content,
                CreateDt           = x1.CreateDt,
                CreateUserId       = x1.CreateUserId,
                ExtData            = x1.ExtData,
                HeaderImageUrl     = x1.HeaderImageUrl,
                IsPublic           = x1.IsPublic,
                LastMessageId      = x1.LastMessageId,
                Type               = x1.Type
            });

            if (t.HasData())
            {
                var sessionIds = t.Select(x => x.SessionId).ToArrayEx();

                var mappingIDs = await FreeSql.Select <im_chat_userInSession>()
                                 .Where(x => sessionIds.Contains(x.SessionId)).ToListAsync(x => new { x.SessionId, x.UserId });

                foreach (var session in t)
                {
                    session.SessionUserIds = mappingIDs.Where(x => x.SessionId == session.SessionId)
                                             .Select(x => x.UserId);
                }
                //FreeSql.Select<im_chat_userMessageStatus,im_chat_message>()
                //    .InnerJoin((x1,x2)=>x1.SessionId==x2.SessionId)
                //    .Where((x1,x2)=>x1.UserId==userId)
                //    .GroupBy((x1,x2)=>x2.SessionId)
                //    .Having((x1,x2)=> x1.Value.Item2.MessageId> x1.Value.Item1.LastReadMessageId)
            }

            return(new VM_PagedList <DTO_UserSession>(t, pageIndex, pageSize, (int)count));
        }
 public void GetComments()
 {
     dynamic comments = FreeSql.Select <Comment>().Include(r => r.UserInfo).From <UserLike>(
         (z, zzc) =>
         z.LeftJoin(u => u.Id == zzc.SubjectId)             //&& zzc.CreateUserId == _currentUser.Id
         )
                        .ToList((s, za) => new
     {
         comment = s,
         za.SubjectId
     });
 }
Esempio n. 7
0
        /// <summary>
        /// 设置会话的阅读时间
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="sessionId"></param>
        /// <param name="lastMessageId"></param>
        /// <returns></returns>
        public async Task SetMessageReadState(string userId, long sessionId, long lastMessageId)
        {
            //var sessionId =await GetMessageSessionById(lastMessageId);

            //if (sessionId<=0)
            //{
            //    return;
            //}

            await FreeSql.InsertOrUpdate <im_chat_userMessageStatus>().SetSource(new im_chat_userMessageStatus()
            {
                LastReadMessageId = lastMessageId,
                SessionId         = sessionId,
                UserId            = userId
            }).ExecuteAffrowsAsync();
        }
Esempio n. 8
0
        public void TestUnitOfWork()
        {
            Guid id = new Guid();

            using (var uow = FreeSql.CreateUnitOfWork())
            {
                var articleBaseRepository = uow.GetRepository <Article>();
                var tagArticleRepository  = uow.GetRepository <TagArticle>();
                var commentBaseRepository = uow.GetRepository <Comment>();
                var userLikeRepository    = uow.GetRepository <UserLike>();

                articleBaseRepository.Delete(new Article {
                    Id = id
                });
                tagArticleRepository.Delete(r => r.ArticleId == id);
                commentBaseRepository.Delete(r => r.SubjectId == id);
                userLikeRepository.Delete(r => r.SubjectId == id);
            }
        }
Esempio n. 9
0
        /// <summary>
        /// 创建一个一对一的私聊会话
        /// </summary>
        /// <param name="fromUserId"></param>
        /// <param name="toUserId"></param>
        /// <returns></returns>
        public async Task <long> CreateOneToOneSession(string fromUserId, string toUserId)
        {
            var sessionId = await GetToUseIdSessionIdByFromUseId(fromUserId, toUserId);

            if (sessionId > 0)
            {
                return(sessionId);
            }

            sessionId = await FreeSql.Insert(new im_chat_session()
            {
                CreateDt     = DateTime.Now,
                CreateUserId = fromUserId,
                ExtData      = $"{fromUserId},{toUserId},",
                IsPublic     = false,
                Name         = "",
                Type         = SessionTypeEnum.OneToOne,
            }).ExecuteIdentityAsync();

            await FreeSql.Insert(new[]
            {
                new im_chat_userInSession()
                {
                    JoinDt    = DateTime.Now,
                    Order     = 0,
                    QuitDt    = null,
                    SessionId = sessionId,
                    UserId    = fromUserId
                },
                new im_chat_userInSession()
                {
                    JoinDt    = DateTime.Now,
                    Order     = 0,
                    QuitDt    = null,
                    SessionId = sessionId,
                    UserId    = toUserId
                }
            }).ExecuteInsertedAsync();

            return(sessionId);
        }
Esempio n. 10
0
        /// <summary>
        /// 指定用户Id加入session会话中
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="sessionId"></param>
        /// <returns></returns>
        public async Task <ResultReturn> JoinToSession(string userId, long sessionId)
        {
            if (!await FreeSql.Select <im_chat_session>().Where(x => x.SessionId == sessionId && x.Type == SessionTypeEnum.Group).AnyAsync())
            {
                return(new FailResultReturn("指定会话不是群组会话,无法加入"));
            }

            if (await FreeSql.Select <im_chat_userInSession>().AnyAsync(x => x.SessionId == sessionId && x.UserId == userId))
            {
                return(SuccessResultReturn.Default);
            }

            await FreeSql.Insert <im_chat_userInSession>(new im_chat_userInSession()
            {
                JoinDt    = DateTime.Now,
                SessionId = sessionId,
                UserId    = userId
            }).ExecuteInsertedAsync();

            return(SuccessResultReturn.Default);
        }
Esempio n. 11
0
        public Page <Sys_User> GetList(int pageIndex, int pageSize, string keyWord)
        {
            var condition = FreeSql.Select <Sys_User>()
                            .Where(t => t.DeleteMark == false)
                            .WhereIf(!string.IsNullOrEmpty(keyWord), t => t.Account.Contains(keyWord) || t.RealName.Contains(keyWord))
                            .From <Sys_Organize>((u, o) => u.LeftJoin(a => a.DepartmentId == o.Id));
            var total = condition.Count();
            var items = condition.OrderBy((a, b) => a.SortCode).ToList((a, b) =>
                                                                       new Sys_User
            {
                Account      = a.Account,
                Address      = a.Address,
                Avatar       = a.Avatar,
                Birthday     = a.Birthday,
                CompanyId    = a.CompanyId,
                CreateTime   = a.CreateTime,
                CreateUser   = a.CreateUser,
                DeleteMark   = a.DeleteMark,
                DepartmentId = a.DepartmentId,
                Email        = a.Email,
                Gender       = a.Gender,
                Id           = a.Id,
                IsEnabled    = a.IsEnabled,
                MobilePhone  = a.MobilePhone,
                ModifyTime   = a.ModifyTime,
                ModifyUser   = a.ModifyUser,
                NickName     = a.NickName,
                RealName     = a.RealName,
                //RoleId = a.RoleId,
                Signature = a.Signature,
                SortCode  = a.SortCode,
                DeptName  = b.FullName
            }
                                                                       );

            return(new Page <Sys_User> {
                Items = items, TotalItems = total
            });
        }
Esempio n. 12
0
        /// <summary>
        /// 添加一条信息
        /// </summary>
        /// <param name="fromUserId"></param>
        /// <param name="toSessionId"></param>
        /// <param name="content"></param>
        /// <param name="type"></param>
        /// <param name="contentType"></param>
        /// <returns></returns>
        public async Task <long> AddMessage(
            string fromUserId,
            long toSessionId,
            string content,
            MessageTypeEnum type,
            MessageContentTypeEnum contentType)
        {
            if (!await FreeSql.Select <im_chat_session>().Where(x => x.SessionId == toSessionId).AnyAsync())
            {
                return(-1);
            }

            if (!await FreeSql.Select <im_chat_userInSession>().Where(x => x.SessionId == toSessionId && x.UserId == fromUserId).AnyAsync())
            {
                return(-1);
            }


            var item = new im_chat_message()
            {
                SessionId   = toSessionId,
                SenderId    = fromUserId,
                Content     = content,
                ContentType = contentType,
                SendDt      = DateTime.Now,
                Type        = type
            };

            var messageId = await FreeSql.Insert(item).ExecuteIdentityAsync();

            await FreeSql.Update <im_chat_session>()
            .Where(x => x.SessionId == toSessionId)
            .Set(x => x.LastActivityDt, DateTime.Now)
            .Set(x => x.LastMessageId, messageId)
            .ExecuteUpdatedAsync();

            return(messageId);
        }
Esempio n. 13
0
 /// <summary>
 /// 拉取历史记录
 /// </summary>
 /// <param name="sessionId">会话Id</param>
 /// <param name="lastMessageId">上一次拉取的消息Id,如果为-1,则为从最新开始拉取,如果>0,则为最后一条消息id,并从这条消息开始往前拉取</param>
 /// <returns></returns>
 public async Task <IReadOnlyList <DTO_SessionMessage> > GetSessionMessage(long sessionId, string userId, long lastMessageId = -1, int takeCount = 20)
 {
     if (sessionId == -1 && userId != "")
     {
         return(await FreeSql.Select <im_chat_userInSession, im_chat_message, im_chat_session>()
                .InnerJoin((s, m, se) => s.SessionId == m.SessionId)
                .Where((s, m, se) => s.UserId == userId)
                .Where((s, m, se) => m.MessageId > lastMessageId && m.State == 0)
                .OrderBy((s, m, se) => m.MessageId)
                .Take(takeCount)
                .ToListAsync((s, m, se) => new DTO_SessionMessage()
         {
             Content = m.State == 99 ? "已撤回的消息" : m.Content,
             ContentType = m.ContentType,
             SendDt = m.SendDt,
             SendUserId = m.SenderId,
             MessageType = m.Type,
             State = m.State
         }));
     }
     else
     {
         return(await FreeSql.Select <im_chat_message>()
                .Where(x => x.SessionId == sessionId && x.State == 0)
                .WhereIf(lastMessageId > 0, x => x.MessageId > lastMessageId)
                .OrderBy(x => x.MessageId)
                .Take(takeCount)
                .ToListAsync(x => new DTO_SessionMessage()
         {
             Content = x.State == 99?"已撤回的消息":x.Content,
             ContentType = x.ContentType,
             SendDt = x.SendDt,
             SendUserId = x.SenderId,
             MessageType = x.Type,
             State = x.State
         }));
     }
 }
Esempio n. 14
0
 /// <summary>
 /// 获取指定用户的群组Id
 /// </summary>
 /// <param name="userId"></param>
 /// <returns></returns>
 public async Task <IReadOnlyList <long> > GetUserGroupIDs(string userId)
 {
     return(await FreeSql.Select <im_chat_userInSession>().Where(x => x.UserId == userId && x.QuitDt == null)
            .ToListAsync(x => x.SessionId));
 }
Esempio n. 15
0
 /// <summary>
 /// 获取指定Id会话信息
 /// </summary>
 /// <param name="sessionId"></param>
 /// <returns></returns>
 public async Task <im_chat_session> GetSessionById(long sessionId)
 {
     return(await FreeSql.Select <im_chat_session>().Where(x => x.SessionId == sessionId).ToOneAsync());
 }
Esempio n. 16
0
 /// <summary>
 /// 获取两个用户的私聊会话id
 /// </summary>
 /// <param name="fromUserId"></param>
 /// <param name="toUserId"></param>
 /// <returns></returns>
 public async Task <long> GetToUseIdSessionIdByFromUseId(string fromUserId, string toUserId)
 {
     return(await FreeSql.Select <im_chat_session>()
            .Where(x => x.ExtData.Contains($"{fromUserId},") && x.ExtData.Contains($"{toUserId},"))
            .ToOneAsync(x => x.SessionId));
 }
Esempio n. 17
0
 /// <summary>
 /// 判断指定用户是否在指定会话中
 /// </summary>
 /// <param name="sessionId"></param>
 /// <param name="userId"></param>
 /// <returns></returns>
 public async Task <bool> IsUserExistsInSession(long sessionId, string userId)
 {
     return(await FreeSql.Select <im_chat_userInSession>()
            .Where(x => x.SessionId == sessionId && x.UserId == userId).AnyAsync());
 }
Esempio n. 18
0
 /// <summary>
 /// 撤回信息
 /// </summary>
 /// <param name="messageId"></param>
 /// <returns></returns>
 public async Task RevocationMessage(long messageId)
 {
     await FreeSql.Update <im_chat_message>().Where(x => x.MessageId == messageId).Set(x => x.State, 99)
     .ExecuteAffrowsAsync();
 }