Ejemplo n.º 1
0
        public async Task <MessageModel <PageModel <sysUserInfo> > > Get(int page = 1, string key = "")
        {
            if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
            {
                key = "";
            }
            int intPageSize = 50;
            var nextRoleIds = (await _roleServices.GetNextRoles(_user.ID)).Select(it => it.Id).ToList();
            var data        = await _sysUserInfoServices.QueryTabsPage <sysUserInfo, UserRole, sysUserInfo>((a, b) =>
                                                                                                            new object[]
            {
                JoinType.Inner, a.uID == b.UserId
            },
                                                                                                            (a, b) => a.tdIsDelete != true && a.uStatus >= 0 && ((a.uLoginName != null && a.uLoginName.Contains(key)) || (a.uRealName != null && a.uRealName.Contains(key)) &&
                                                                                                                                                                 nextRoleIds.Contains(b.RoleId)),
                                                                                                            a => new { a.uID },
                                                                                                            (a, b) => a,
                                                                                                            page, intPageSize, " uID desc ");

            #region MyRegion

            // 这里可以封装到多表查询,此处简单处理
            var userIds      = data.data.Select(it => it.uID).ToList();
            var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false && userIds.Contains(d.UserId));

            var allRoles = await _roleServices.Query(d => d.IsDeleted == false);

            var currentRoleId = (await _userRoleServices.Query(it => it.UserId == _user.ID && it.IsDeleted == false)).FirstOrDefault();
            var sysUserInfos  = data.data;
            foreach (var item in sysUserInfos)
            {
                item.RIDArray = await _roleServices.GetPreviousRoleIds(item.uID);

                var userRoleIds            = allUserRoles.Where(d => d.UserId == item.uID).Select(d => d.RoleId).ToList();
                List <List <int> > roleIds = new List <List <int> >();
                foreach (var roleId in userRoleIds)
                {
                    List <int> ids  = new List <int>();
                    var        role = allRoles.Where(it => it.Id == roleId).FirstOrDefault();
                    if (role == null)
                    {
                        continue;
                    }
                    ids.Add(role.Id);
                    Role parent = allRoles.Where(it => it.Id == role.Pid).FirstOrDefault();
                    if (parent != null)
                    {
                        ids.Add(parent.Id);
                    }
                    while (parent != null)
                    {
                        parent = allRoles.Where(it => it.Id == parent.Pid).FirstOrDefault();
                        if (parent != null)
                        {
                            ids.Add(parent.Id);
                        }
                    }
                    ;
                    ids.Reverse();
                    roleIds.Add(ids);
                }
                item.RIDs      = new List <int>();
                item.RIDArray  = roleIds;
                item.RoleNames = allRoles.Where(d => userRoleIds.Contains(d.Id)).Select(d => d.Name).ToList();
            }

            data.data = sysUserInfos;
            #endregion


            return(new MessageModel <PageModel <sysUserInfo> >()
            {
                msg = "获取成功",
                success = data.dataCount >= 0,
                response = data
            });
        }