Beispiel #1
0
 /// <summary>
 /// 获取元数据
 /// </summary>
 /// <param name="fetch"></param>
 public void GetMetaDatas(FetchDescriptor fetch)
 {
     if (fetch.Query == null)
     {
         ToQueryExpression(fetch.FetchConfig);
     }
     else
     {
         this.QueryExpression = fetch.Query;
     }
     this.QueryExpression.PageInfo = new PagingInfo()
     {
         PageNumber = fetch.Page, PageSize = fetch.PageSize
     };
     this.QueryResolver = _queryResolverFactory.Get(QueryExpression);
     GetNonePermissionFields();
 }
Beispiel #2
0
        /// <summary>
        /// 查询数据
        /// </summary>
        /// <param name="fetch">查询参数</param>
        /// <param name="wrapOptionName">是否包含选项名称</param>
        /// <returns></returns>
        public PagedList <dynamic> Execute(FetchDescriptor fetch, bool wrapOptionName = false)
        {
            //bool hasChange = false;
            GetMetaDatas(fetch);
            if (fetch.User != null)
            {
                if (!fetch.User.IsSuperAdmin && fetch.User.Roles.IsEmpty())
                {
                    fetch.User.Roles = _systemUserRolesService.Query(n => n.Where(f => f.SystemUserId == fetch.User.SystemUserId));
                }
                this.User.Roles = fetch.User.Roles;
            }

            if (fetch.User != null && !fetch.User.IsSuperAdmin && fetch.User.Roles.NotEmpty())
            {
                var roles    = fetch.User.Roles.Select(r => r.RoleId);
                var entities = this.QueryExpression.GetAllEntityNames();
                var entIds   = _entityFinder.FindByNames(entities.ToArray()).Select(n => n.EntityId);
                fetch.User.RoleObjectAccessEntityPermission = _roleObjectAccessEntityPermissionService.GetPermissions(entIds, roles, AccessRightValue.Read);
                this.User.RoleObjectAccessEntityPermission  = fetch.User.RoleObjectAccessEntityPermission;
            }
            //this.User.UserName = "******";
            //this.SetRetrieveConditions(this.User, this.QueryExpression);

            if (fetch.Keyword.IsNotEmpty())
            {
                if (this.QueryExpression.Criteria == null || (this.QueryExpression.Criteria.Conditions.IsEmpty() && this.QueryExpression.Criteria.Filters.IsEmpty()))
                {
                    this.QueryExpression.Criteria = new FilterExpression(LogicalOperator.And);
                }
                else
                {
                    this.QueryExpression.Criteria.FilterOperator = LogicalOperator.And;
                }
                if (fetch.Field.IsNotEmpty())
                {
                    MakeFilterByKeyword(this.QueryExpression, fetch.Keyword, fetch.Field);
                }
                else
                {
                    MakeFilterByKeyword(this.QueryExpression, fetch.Keyword);
                }
                //hasChange = true;
            }
            //过滤
            if (fetch.Filter != null && (fetch.Filter.Filters.Count > 0 || fetch.Filter.Conditions.Count > 0))
            {
                this.QueryExpression.Criteria.AddFilter(fetch.Filter);
                //hasChange = true;
            }
            //排序
            if (fetch.Sort != null)
            {
                //重置排序
                this.QueryExpression.Orders.Clear();
                this.QueryExpression.AddOrder(fetch.Sort.Name, fetch.Sort.SortAscending ? OrderType.Ascending : OrderType.Descending);
                //hasChange = true;
            }
            //无指定排序时,默认第一列
            if (this.QueryExpression.Orders.IsEmpty())
            {
                if (this.QueryResolver.AttributeList.Exists(n => n.Name.IsCaseInsensitiveEqual("createdon")))
                {
                    this.QueryExpression.AddOrder("createdon", OrderType.Descending);
                }
                else
                {
                    this.QueryExpression.AddOrder(this.QueryExpression.ColumnSet.Columns.First(), OrderType.Descending);
                }
                //hasChange = true;
            }

            PagedList <dynamic> result = new PagedList <dynamic>();

            if (fetch.GetAll)
            {
                var data = this.QueryResolver.Query(noneReadFields: NonePermissionFields);
                result.Items = data;
            }
            else
            {
                result = this.QueryResolver.QueryPaged(noneReadFields: NonePermissionFields);
            }
            if (wrapOptionName)
            {
                result.Items = WrapOptionName(result.Items);
            }

            return(result);
        }