示例#1
0
        /// <summary>
        /// 用户授权筛选
        /// </summary>
        /// <param name="filter">筛选信息</param>
        /// <returns></returns>
        IQuery CreateAuthorityQueryObject(UserAuthorityFilterDto filter)
        {
            if (filter == null)
            {
                return(null);
            }
            IQuery query = CreateAuthorityQueryObject(filter, true) ?? QueryFactory.Create <AuthorityQuery>();

            #region 用户授权筛选

            if (filter.UserFilter != null)
            {
                IQuery userQuery = this.Instance <IUserBusiness>().CreateQueryObject(filter.UserFilter);
                if (userQuery != null)
                {
                    userQuery.AddQueryFields <UserQuery>(c => c.SysNo);

                    #region 用户或者角色绑定的授权

                    IQuery userOrRoleBindAuthQuery = QueryFactory.Create();

                    //用户授权
                    IQuery userAuthBindQuery = QueryFactory.Create <UserAuthorizeQuery>(c => c.Disable == false);
                    userAuthBindQuery.And <UserAuthorizeQuery>(c => c.User, CriteriaOperator.In, userQuery);
                    userAuthBindQuery.AddQueryFields <UserAuthorizeQuery>(c => c.Authority);
                    IQuery userAuthQuery = QueryFactory.Create <AuthorityQuery>();
                    userAuthQuery.And <AuthorityQuery>(c => c.Code, CriteriaOperator.In, userAuthBindQuery);
                    userOrRoleBindAuthQuery.And(userAuthQuery);
                    //角色授权
                    IQuery userRoleBindQuery = QueryFactory.Create <UserRoleQuery>();
                    userRoleBindQuery.And <UserRoleQuery>(c => c.UserSysNo, CriteriaOperator.In, userQuery);
                    userRoleBindQuery.AddQueryFields <UserRoleQuery>(c => c.RoleSysNo);
                    IQuery roleAuthBindQuery = QueryFactory.Create <RoleAuthorizeQuery>();
                    roleAuthBindQuery.And <RoleAuthorizeQuery>(c => c.Role, CriteriaOperator.In, userRoleBindQuery);
                    roleAuthBindQuery.AddQueryFields <RoleAuthorizeQuery>(c => c.Authority);
                    IQuery roleAuthQuery = QueryFactory.Create <AuthorityQuery>();
                    roleAuthQuery.And <AuthorityQuery>(c => c.Code, CriteriaOperator.In, roleAuthBindQuery);
                    userOrRoleBindAuthQuery.Or(roleAuthQuery);

                    query.And(userOrRoleBindAuthQuery);

                    #endregion

                    //排除用户禁用的授权
                    IQuery userDisableAuthQuery = QueryFactory.Create <UserAuthorizeQuery>(c => c.Disable == true);
                    userDisableAuthQuery.And <UserAuthorizeQuery>(c => c.User, CriteriaOperator.In, userQuery);
                    userDisableAuthQuery.AddQueryFields <UserAuthorizeQuery>(c => c.Authority);
                    query.And <AuthorityQuery>(c => c.Code, CriteriaOperator.NotIn, userDisableAuthQuery);
                }
            }

            #endregion

            return(query);
        }
示例#2
0
        /// <summary>
        /// 生成服务调度计划查询对象
        /// </summary>
        /// <param name="filter">查询信息</param>
        /// <returns></returns>
        IQuery CreateQueryObject(ServerScheduleTriggerFilterDto filter)
        {
            if (filter == null)
            {
                return(null);
            }
            IQuery triggerQuery = CreateQueryObject(filter, true) ?? QueryFactory.Create <TriggerQuery>();

            #region 任务筛选

            IQuery jobQuery = this.Instance <IJobBusiness>().CreateQueryObject(filter.JobFilter);
            if (jobQuery != null && jobQuery.Criterias.Count > 0)
            {
                jobQuery.AddQueryFields <JobQuery>(c => c.Id);
                triggerQuery.And <TriggerQuery>(c => c.Job, CriteriaOperator.In, jobQuery);
            }

            #endregion

            #region  务筛选

            IQuery serverQuery = this.Instance <IServerNodeBusiness>().CreateQueryObject(filter.ServerFilter);
            if (serverQuery != null && serverQuery.Criterias.Count > 0)
            {
                IQuery triggerServerFilterQuery = QueryFactory.Create();

                serverQuery.AddQueryFields <ServerNodeQuery>(c => c.Id);
                IQuery triggerServerQuery = QueryFactory.Create <TriggerServerQuery>();
                triggerServerQuery.And <TriggerServerQuery>(c => c.Server, CriteriaOperator.In, serverQuery);
                triggerServerQuery.AddQueryFields <TriggerServerQuery>(c => c.Trigger);
                triggerServerFilterQuery.And <TriggerQuery>(c => c.Id, CriteriaOperator.In, triggerServerQuery);

                //服务承载任务针对所有的执行计划
                IQuery serverJobHostQuery = QueryFactory.Create <JobServerHostQuery>();
                serverJobHostQuery.And <JobServerHostQuery>(c => c.Server, CriteriaOperator.In, serverQuery);
                serverJobHostQuery.AddQueryFields <JobServerHostQuery>(c => c.Job);
                IQuery applyToAllServerQuery = QueryFactory.Create();
                applyToAllServerQuery.And <TriggerQuery>(c => c.Job, CriteriaOperator.In, serverJobHostQuery);
                applyToAllServerQuery.And <TriggerQuery>(c => c.ApplyTo == TaskTriggerApplyTo.所有);

                triggerServerFilterQuery.Or(applyToAllServerQuery);
                triggerQuery.And(triggerServerFilterQuery);
            }

            #endregion

            return(triggerQuery);
        }
示例#3
0
        /// <summary>
        /// Remove Objects
        /// </summary>
        /// <param name="entityList">datas</param>
        protected async Task RemoveAsync(IEnumerable <ET> entityList)
        {
            Type entityType = typeof(ET);
            var  keys       = QueryConfig.GetPrimaryKeys(entityType);

            if (keys.IsNullOrEmpty())
            {
                throw new Exception(string.Format("Type:{0} isn't set primary keys", entityType.FullName));
            }
            IQuery         query        = QueryFactory.Create();
            List <dynamic> keyValueList = new List <dynamic>();

            foreach (ET entity in entityList)
            {
                if (keys.Count == 1)
                {
                    keyValueList.Add(entity.GetPropertyValue(keys.ElementAt(0)));
                }
                else
                {
                    IQuery entityQuery = QueryFactory.Create();
                    foreach (var key in keys)
                    {
                        entityQuery.And(key, CriteriaOperator.Equal, entity.GetPropertyValue(key));
                    }
                    query.Or(entityQuery);
                }
            }
            if (keys.Count == 1)
            {
                query.In(keys.ElementAt(0), keyValueList);
            }
            UnitOfWork.UnitOfWork.RegisterCommand(await dataAccess.DeleteAsync(query).ConfigureAwait(false));
        }
示例#4
0
        /// <summary>
        /// 管理用户查询对象
        /// </summary>
        /// <param name="adminUserFilter">管理用户筛选对象</param>
        /// <returns></returns>
        public IQuery CreateAdminQueryObject(AdminUserFilterDto adminUserFilter)
        {
            if (adminUserFilter == null)
            {
                return(null);
            }
            IQuery userQuery = CreateQueryObject(adminUserFilter, true) ?? QueryFactory.Create <UserQuery>();

            #region 角色筛选

            if (adminUserFilter.RoleFilter != null)
            {
                IQuery roleQuery = this.Instance <IRoleBusiness>().CreateQueryObject(adminUserFilter.RoleFilter);
                if (roleQuery != null && roleQuery.Criterias.Count > 0)
                {
                    roleQuery.AddQueryFields <RoleQuery>(c => c.SysNo);
                    IQuery userRoleQuery = QueryFactory.Create <UserRoleQuery>();
                    userRoleQuery.And <UserRoleQuery>(u => u.RoleSysNo, CriteriaOperator.In, roleQuery);
                    userRoleQuery.AddQueryFields <UserRoleQuery>(u => u.UserSysNo);
                    userQuery.And <UserQuery>(c => c.SysNo, CriteriaOperator.In, userRoleQuery);
                }
            }

            #endregion

            return(userQuery);
        }
        /// <summary>
        /// Creates the entities supplied conditionally based on whether it exists in the datastore.
        /// Existance in the datastore is done by finding any entities w/ matching values for the
        /// <paramref name="checkFields"/> supplied.
        /// </summary>
        /// <param name="entity">Entity to create.</param>
        /// <param name="checkFields">Matching filters.</param>
        public virtual void Create(T entity, params Expression <Func <T, object> >[] checkFields)
        {
            if (checkFields == null || checkFields.Length == 0)
            {
                Create(entity);
                return;
            }

            IQuery <T> criteria = Query <T> .New();

            string       propName = ExpressionHelper.GetPropertyName <T>(checkFields[0]);
            PropertyInfo prop     = entity.GetType().GetProperty(propName);
            object       propVal  = Reflection.ReflectionUtils.GetPropertyValueSafely(entity, prop);

            criteria.Where(propName).Is(propVal);

            if (checkFields.Length > 1)
            {
                for (int ndx = 1; ndx < checkFields.Length; ndx++)
                {
                    propName = ExpressionHelper.GetPropertyName <T>(checkFields[ndx]);
                    prop     = entity.GetType().GetProperty(propName);
                    propVal  = Reflection.ReflectionUtils.GetPropertyValueSafely(entity, prop);
                    criteria.And(propName).Is(propVal);
                }
            }
            // Only create if it doesn't exist.
            int count = Count(criteria);

            if (count == 0)
            {
                Create(entity);
            }
        }
示例#6
0
        /// <summary>
        /// 根据用户查询操作授权的功能
        /// </summary>
        /// <param name="filter">筛选条件</param>
        /// <returns></returns>
        IQuery CreateAuthorityOperationQueryObject(UserOperationFilterDto filter)
        {
            if (filter == null)
            {
                return(null);
            }
            IQuery query = CreateAuthorityOperationQueryObject(filter, true) ?? QueryManager.Create <AuthorityOperationQuery>();
            //用户授权的操作或者无限制的操作
            var authAndUnlimitedOperationQuery = QueryManager.Create <AuthorityOperationQuery>();

            if (filter.UserFilter != null)
            {
                //用户权限
                var userAuthorityQuery = CreateUserAuthorityQueryObject(new UserAuthorityFilterDto()
                {
                    UserFilter = filter.UserFilter,
                    Status     = AuthorityStatus.启用
                });
                //权限绑定操作
                var authBindOperationQuery = QueryManager.Create <AuthorityBindOperationQuery>();
                authBindOperationQuery.EqualInnerJoin(userAuthorityQuery);
                authBindOperationQuery.AddQueryFields <AuthorityBindOperationQuery>(a => a.AuthorityOperationSysNo);
                authAndUnlimitedOperationQuery.In <AuthorityOperationQuery>(a => a.SysNo, authBindOperationQuery);
            }
            authAndUnlimitedOperationQuery.Or <AuthorityOperationQuery>(a => a.AuthorizeType == AuthorityOperationAuthorizeType.无限制);//无限制功能
            query.And(authAndUnlimitedOperationQuery);
            return(query);
        }
示例#7
0
        /// <summary>
        /// 授权操作绑定权限筛选
        /// </summary>
        /// <param name="filter">筛选对象</param>
        /// <returns></returns>
        IQuery CreateAuthorityQueryObject(AuthorityOperationBindAuthorityFilterDto filter)
        {
            if (filter == null)
            {
                return(null);
            }
            IQuery query = CreateAuthorityQueryObject(filter, true) ?? QueryFactory.Create <AuthorityQuery>();

            #region 授权操作筛选

            if (filter.AuthorityOperationFilter != null)
            {
                IQuery operationQuery = CreateAuthorityOperationQueryObject(filter.AuthorityOperationFilter);
                if (operationQuery != null)
                {
                    operationQuery.AddQueryFields <AuthorityOperationQuery>(c => c.SysNo);
                    IQuery authBindOperationQuery = QueryFactory.Create <AuthorityBindOperationQuery>();
                    authBindOperationQuery.And <AuthorityBindOperationQuery>(c => c.AuthorithOperation, CriteriaOperator.In, operationQuery);
                    authBindOperationQuery.AddQueryFields <AuthorityBindOperationQuery>(c => c.AuthorityCode);
                    query.And <AuthorityQuery>(c => c.Code, CriteriaOperator.In, authBindOperationQuery);
                }
            }

            #endregion

            return(query);
        }
示例#8
0
        /// <summary>
        /// 角色权限筛选
        /// </summary>
        /// <param name="filter">筛选信息</param>
        /// <returns></returns>
        IQuery CreateAuthorityQueryObject(RoleAuthorityFilterDto filter)
        {
            if (filter == null)
            {
                return(null);
            }
            IQuery query = CreateAuthorityQueryObject(filter, true) ?? QueryFactory.Create <AuthorityQuery>();

            #region 角色授权筛选

            if (filter.RoleFilter != null)
            {
                IQuery roleFilter = this.Instance <IRoleBusiness>().CreateQueryObject(filter.RoleFilter);
                if (roleFilter != null)
                {
                    roleFilter.AddQueryFields <RoleQuery>(c => c.SysNo);
                    IQuery roleBindAuthQuery = QueryFactory.Create <RoleAuthorizeQuery>();
                    roleBindAuthQuery.And <RoleAuthorizeQuery>(c => c.Role, CriteriaOperator.In, roleFilter);
                    roleBindAuthQuery.AddQueryFields <RoleAuthorizeQuery>(c => c.Authority);
                    query.And <AuthorityQuery>(c => c.Code, CriteriaOperator.In, roleBindAuthQuery);
                }
            }

            #endregion

            return(query);
        }
示例#9
0
        /// <summary>
        /// 创建查询对象
        /// </summary>
        /// <returns>返回查询对象</returns>
        public override IQuery CreateQuery()
        {
            IQuery query = base.CreateQuery() ?? QueryManager.Create <PermissionGroupEntity>(this);

            if (LevelOne)
            {
                query.And <PermissionGroupEntity>(c => c.Parent <= 0);
            }
            if (!Ids.IsNullOrEmpty())
            {
                query.And <PermissionGroupEntity>(c => Ids.Contains(c.Id));
            }
            if (!ExcludeIds.IsNullOrEmpty())
            {
                query.And <PermissionGroupEntity>(c => !ExcludeIds.Contains(c.Id));
            }
            if (!string.IsNullOrWhiteSpace(Name))
            {
                query.And <PermissionGroupEntity>(c => c.Name == Name);
            }
            if (Sort.HasValue)
            {
                query.And <PermissionGroupEntity>(c => c.Sort == Sort.Value);
            }
            if (Parent.HasValue)
            {
                query.And <PermissionGroupEntity>(c => c.Parent == Parent.Value);
            }
            if (!string.IsNullOrWhiteSpace(Remark))
            {
                query.And <PermissionGroupEntity>(c => c.Remark == Remark);
            }
            return(query);
        }
示例#10
0
        /// <summary>
        /// 管理用户查询对象
        /// </summary>
        /// <param name="adminUserFilter">管理用户筛选对象</param>
        /// <returns></returns>
        public IQuery CreateAdminQueryObject(AdminUserFilterDto adminUserFilter)
        {
            if (adminUserFilter == null)
            {
                return(null);
            }
            IQuery userQuery = CreateQueryObject(adminUserFilter, true) ?? QueryFactory.Create <UserQuery>();

            #region 角色筛选

            if (adminUserFilter.RoleFilter != null)
            {
                IQuery roleQuery = this.Instance <IRoleBusiness>().CreateQueryObject(adminUserFilter.RoleFilter);
                if (roleQuery != null && roleQuery.Criterias.Count > 0)
                {
                    roleQuery.AddQueryFields <RoleQuery>(c => c.SysNo);
                    IQuery userRoleQuery = QueryFactory.Create <UserRoleQuery>();
                    userRoleQuery.And <UserRoleQuery>(u => u.RoleSysNo, CriteriaOperator.In, roleQuery);
                    userRoleQuery.AddQueryFields <UserRoleQuery>(u => u.UserSysNo);
                    userQuery.And <UserQuery>(c => c.SysNo, CriteriaOperator.In, userRoleQuery);
                }
            }
            if (!adminUserFilter.WithoutRoles.IsNullOrEmpty())
            {
                IQuery withRoleQuery = QueryFactory.Create <UserRoleQuery>();
                withRoleQuery.In <UserRoleQuery>(r => r.RoleSysNo, adminUserFilter.WithoutRoles);
                withRoleQuery.AddQueryFields <UserRoleQuery>(r => r.UserSysNo);
                userQuery.And <UserQuery>(u => u.SysNo, CriteriaOperator.NotIn, withRoleQuery);
            }

            #endregion

            #region 加载数据

            if (adminUserFilter.LoadRole)
            {
                userQuery.SetLoadPropertys <AdminUser>(true, c => c.Roles);
            }

            #endregion

            return(userQuery);
        }
示例#11
0
        /// <summary>
        /// Create a new query instance
        /// </summary>
        /// <typeparam name="T">data type</typeparam>
        /// <param name="criteria">condition expression</param>
        /// <returns>IQuery object</returns>
        public static IQuery Create <T>(Expression <Func <T, bool> > criteria) where T : QueryModel <T>
        {
            IQuery query = Create <T>();

            if (criteria != null)
            {
                query.And(criteria);
            }
            return(query);
        }
示例#12
0
        /// <summary>
        /// Modify data
        /// </summary>
        /// <param name="newData">New data</param>
        /// <param name="oldData">Old data</param>
        /// <param name="query">Query object</param>
        /// <returns>Return command</returns>
        public ICommand Modify(TEntity newData, TEntity oldData, IQuery query)
        {
            Dictionary <string, dynamic> modifyValues = newData.GetModifyValues(oldData);

            if (modifyValues == null || modifyValues.Count < 1)
            {
                return(null);
            }
            if (query == null)
            {
                throw new EZNEWException("the data modification condition is null");
            }

            #region control version

            string versionFieldName = EntityManager.GetVersionField(entityType);
            if (!string.IsNullOrWhiteSpace(versionFieldName))
            {
                var nowVersionValue = newData.GetPropertyValue(versionFieldName);
                if (!modifyValues.ContainsKey(versionFieldName))
                {
                    var newVersionValue = nowVersionValue + 1;
                    newData.SetPropertyValue(versionFieldName, newVersionValue);
                    modifyValues.Add(versionFieldName, newVersionValue);
                }
                query.And(versionFieldName, CriteriaOperator.Equal, nowVersionValue);
            }

            #endregion

            #region refresh date

            string refreshFieldName = EntityManager.GetRefreshDateField(entityType);
            if (!string.IsNullOrWhiteSpace(refreshFieldName))
            {
                if (!modifyValues.ContainsKey(refreshFieldName))
                {
                    var nowDate = DateTimeOffset.Now;
                    newData.SetPropertyValue(refreshFieldName, nowDate);
                    modifyValues.Add(refreshFieldName, nowDate);
                }
            }

            #endregion

            var originValues = oldData.GetAllPropertyValues();
            var command      = ExecuteModifyData(originValues, modifyValues, query);

            //publish modify data event
            DataAccessEventBus.PublishModifyDataEvent <TEntity>(originValues, modifyValues, query);

            return(command);
        }
 /// <summary>
 /// 加载操作对应的权限信息
 /// </summary>
 /// <returns></returns>
 List<Authority> LoadAuthority()
 {
     if (!AllowLazyLoad(r => r.Authoritys))
     {
         return _authoritys.CurrentValue;
     }
     IQuery query = QueryFactory.Create();
     IQuery bindQuery = QueryFactory.Create(AuthorityBindOperationQuery.ObjectName);
     bindQuery.AddQueryFields<AuthorityBindOperationQuery>(a => a.AuthorityCode);
     bindQuery.And<AuthorityBindOperationQuery>(a => a.AuthorithOperation == _sysNo);
     query.And<AuthorityQuery>(a => a.Code, CriteriaOperator.In, bindQuery);
     return this.Instance<IAuthorityRepository>().GetList(query);
 }
示例#14
0
        /// <summary>
        /// 加载操作对应的权限信息
        /// </summary>
        /// <returns></returns>
        List <Authority> LoadAuthority()
        {
            if (!AllowLazyLoad(r => r.Authoritys))
            {
                return(authoritys.CurrentValue);
            }
            IQuery query     = QueryManager.Create();
            IQuery bindQuery = QueryManager.Create <AuthorityBindOperationQuery>();

            bindQuery.AddQueryFields <AuthorityBindOperationQuery>(a => a.AuthoritySysNo);
            bindQuery.And <AuthorityBindOperationQuery>(a => a.AuthorityOperationSysNo == SysNo);
            query.And <AuthorityQuery>(a => a.Code, CriteriaOperator.In, bindQuery);
            return(this.Instance <IAuthorityRepository>().GetList(query));
        }
示例#15
0
        /// <summary>
        /// 验证用户名是否存在
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="excludeId">检查除指定用户以外的用户信息</param>
        /// <returns>返回用户名是否存在</returns>
        public bool ExistName(string userName, long?excludeId = null)
        {
            if (string.IsNullOrWhiteSpace(userName))
            {
                return(false);
            }
            IQuery query = QueryManager.Create <UserEntity>(c => c.UserName == userName);

            if (excludeId.HasValue)
            {
                query.And <UserEntity>(c => c.Id != excludeId);
            }
            return(userRepository.Exist(query));
        }
示例#16
0
    public void BracketsOnLogicalOp()
    {
        aQuery = new Query <ColumnInfo>();
        aQuery.And(val.of("CHAR") == "AAA" | val.of("CHAR") == "BBB" | val.of("CHAR") == "CCC");
        Assert.AreEqual("(CHAR = AAA OR CHAR = BBB OR CHAR = CCC)", aQuery.GetWhereExp());

        aQuery = new Query <ColumnInfo>();
        aQuery.And(val.of("CHAR") == "AAA" & val.of("CHAR") == "BBB" | val.of("CHAR") == "CCC");
        Assert.AreEqual("(CHAR = AAA AND CHAR = BBB OR CHAR = CCC)", aQuery.GetWhereExp());

        aQuery = new Query <ColumnInfo>();
        aQuery.And(val.of("CHAR") == "AAA" | val.of("CHAR") == "BBB" & val.of("CHAR") == "CCC");
        Assert.AreEqual("(CHAR = AAA OR CHAR = BBB AND CHAR = CCC)", aQuery.GetWhereExp());
    }
示例#17
0
        /// <summary>
        /// Create a new query instance
        /// </summary>
        /// <typeparam name="T">data type</typeparam>
        /// <param name="criteria">condition expression</param>
        /// <param name="objectName">object name</param>
        /// <returns>IQuery object</returns>
        public static IQuery Create <T>(Expression <Func <T, bool> > criteria, string objectName = "") where T : IQueryModel <T>
        {
            if (string.IsNullOrWhiteSpace(objectName))
            {
                objectName = QueryModel <T> .QueryObjectName;
            }
            IQuery query = Create(objectName);

            if (criteria != null)
            {
                query.And <T>(criteria);
            }
            return(query);
        }
示例#18
0
        /// <summary>
        /// 验证用户名是否存在
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="excludeUserId">检查除指定用户以外的用户信息</param>
        /// <returns></returns>
        public bool ExistUserName(string userName, long?excludeUserId = null)
        {
            if (userName.IsNullOrEmpty())
            {
                return(false);
            }
            IQuery query = QueryFactory.Create <UserQuery>(c => c.UserName == userName);

            if (excludeUserId.HasValue)
            {
                query.And <UserQuery>(c => c.SysNo != excludeUserId);
            }
            return(userRepository.Exist(query));
        }
示例#19
0
        /// <summary>
        /// 根据查询条件生成查询对象
        /// </summary>
        /// <param name="filter">查询条件</param>
        /// <returns></returns>
        IQuery CreateQueryObject(JobServerHostFilterDto filter)
        {
            if (filter == null)
            {
                return(null);
            }
            IQuery query = QueryFactory.Create(filter);

            if (!filter.Servers.IsNullOrEmpty())
            {
                query.In <JobServerHostQuery>(c => c.Server, filter.Servers);
            }
            if (!filter.Jobs.IsNullOrEmpty())
            {
                query.In <JobServerHostQuery>(c => c.Job, filter.Jobs);
            }
            if (filter.RunStatus.HasValue)
            {
                query.Equal <JobServerHostQuery>(c => c.RunStatus, filter.RunStatus.Value);
            }
            if (!filter.ServerKey.IsNullOrEmpty())
            {
                IQuery serverQuery = QueryFactory.Create <ServerNodeQuery>();
                serverQuery.And <ServerNodeQuery>(QueryOperator.OR, CriteriaOperator.Like, filter.ServerKey, null, c => c.Name, c => c.Host);
                serverQuery.AddQueryFields <ServerNodeQuery>(c => c.Id);
                query.And <JobServerHostQuery>(c => c.Server, CriteriaOperator.In, serverQuery);
            }
            if (!filter.JobKey.IsNullOrEmpty())
            {
                IQuery jobQuery = QueryFactory.Create <JobQuery>();
                jobQuery.And <JobQuery>(QueryOperator.OR, CriteriaOperator.Like, filter.JobKey, null, c => c.Name);
                jobQuery.AddQueryFields <JobQuery>(c => c.Id);
                query.And <JobServerHostQuery>(c => c.Job, CriteriaOperator.In, jobQuery);
            }
            return(query);
        }
示例#20
0
        /// <summary>
        /// Append Entity Identity Condition
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="datas">datas</param>
        /// <param name="originalQuery">original query</param>
        /// <param name="exclude">exclude</param>
        /// <returns></returns>
        public static IQuery AppendEntityIdentityCondition <T>(IEnumerable <T> datas, IQuery originalQuery = null, bool exclude = false) where T : BaseEntity <T>
        {
            originalQuery = originalQuery ?? QueryFactory.Create();
            if (datas == null || !datas.Any())
            {
                return(originalQuery);
            }
            var entityType = typeof(T);
            var keys       = EntityManager.GetPrimaryKeys(entityType);

            if (keys.IsNullOrEmpty())
            {
                throw new Exception(string.Format("type:{0} isn't set primary keys", entityType.FullName));
            }
            var     firstData    = datas.ElementAt(0).GetPropertyValue(keys.ElementAt(0));
            var     dataType     = firstData.GetType();
            dynamic keyValueList = Activator.CreateInstance(typeof(List <>).MakeGenericType(dataType));

            //List<dynamic> keyValueList = new List<dynamic>();
            foreach (T entity in datas)
            {
                if (keys.Count == 1)
                {
                    keyValueList.Add(entity.GetPropertyValue(keys.ElementAt(0)));
                }
                else
                {
                    IQuery entityQuery = Create();
                    foreach (var key in keys)
                    {
                        entityQuery.And(key, exclude ? CriteriaOperator.NotEqual : CriteriaOperator.Equal, entity.GetPropertyValue(key));
                    }
                    originalQuery.Or(entityQuery);
                }
            }
            if (keys.Count == 1)
            {
                if (exclude)
                {
                    originalQuery.NotIn(keys.ElementAt(0), keyValueList);
                }
                else
                {
                    originalQuery.In(keys.ElementAt(0), keyValueList);
                }
            }
            return(originalQuery);
        }
示例#21
0
        /// <summary>
        /// edit data
        /// </summary>
        /// <param name="newData">new data</param>
        /// <param name="oldData">old data</param>
        /// <param name="query">query object</param>
        /// <returns>ICommand object</returns>
        public virtual async Task <ICommand> ModifyAsync(T newData, T oldData, IQuery query)
        {
            Dictionary <string, dynamic> modifyValues = newData.GetModifyValues(oldData);

            if (modifyValues == null || modifyValues.Count <= 0)
            {
                return(null);
            }
            if (query == null)
            {
                throw new EZNEWException("the data modification condition is null");
            }

            #region control version

            string versionFieldName = EntityManager.GetVersionField(entityType);
            if (!string.IsNullOrWhiteSpace(versionFieldName))
            {
                var nowVersionValue = newData.GetPropertyValue(versionFieldName);
                if (!modifyValues.ContainsKey(versionFieldName))
                {
                    var newVersionValue = nowVersionValue + 1;
                    newData.SetPropertyValue(versionFieldName, newVersionValue);
                    modifyValues.Add(versionFieldName, newVersionValue);
                }
                query.And(versionFieldName, CriteriaOperator.Equal, nowVersionValue);
            }

            #endregion

            #region update date

            string refreshFieldName = EntityManager.GetRefreshDateField(entityType);
            if (!string.IsNullOrWhiteSpace(refreshFieldName))
            {
                if (!modifyValues.ContainsKey(refreshFieldName))
                {
                    var nowDate = DateTime.Now;
                    newData.SetPropertyValue(refreshFieldName, nowDate);
                    modifyValues.Add(refreshFieldName, nowDate);
                }
            }

            #endregion

            return(await UpdateAsync(modifyValues.Keys, modifyValues, query).ConfigureAwait(false));
        }
示例#22
0
        public void TestAnd()
        {
            Expression <Func <AggregateRootSample, bool> > expression = null;

            _query.And(expression);
            _query.And(t => t.Name == "A");
            Assert.Equal("t => (t.Name == \"A\")", _query.GetPredicate().ToString());

            _query.And(t => t.Tel == 1);
            Assert.Equal("t => ((t.Name == \"A\") AndAlso (t.Tel == 1))", _query.GetPredicate().ToString());
        }
示例#23
0
    public void LogicalOp()
    {
        //AND
        aQuery = new Query <ColumnInfo>();
        aQuery.And(val.of("NUM").Between(1, 9) & val.of("CHAR").Between("abc", "xyz"));
        Assert.AreEqual("NUM BETWEEN 1 AND 9 AND CHAR BETWEEN abc AND xyz", aQuery.GetWhereExp());

        aQuery = new Query <ColumnInfo>();
        aQuery.And(val.of("NUM").In(1, 2, 3) & val.of("CHAR").In("abc", "def", "ghi"));
        Assert.AreEqual("NUM IN (1, 2, 3) AND CHAR IN (abc, def, ghi)", aQuery.GetWhereExp());

        aQuery = new Query <ColumnInfo>();
        aQuery.And(val.of("NUM") != val.of("and") & val.of("CHAR") != val.of("or"));
        Assert.AreEqual("NUM <> \"and\" AND CHAR <> \"or\"", aQuery.GetWhereExp());

        aQuery = new Query <ColumnInfo>();
        aQuery.And(val.of("NUM") == 1 & val.of("CHAR") == "a" & val.of("CHAR") == "a" & val.of("CHAR") == "a" & val.of("CHAR") == "a" & val.of("CHAR") == "a");
        Assert.AreEqual("NUM = 1 AND CHAR = a AND CHAR = a AND CHAR = a AND CHAR = a AND CHAR = a", aQuery.GetWhereExp());
    }
示例#24
0
    public void NullOperand()
    {
        val nullVal = null;

        //AND
        aQuery = new Query <ColumnInfo>();
        aQuery.And(val.of("NUM") == 10 & null);
        Assert.AreEqual("NUM = 10", aQuery.GetWhereExp());

        aQuery = new Query <ColumnInfo>();
        aQuery.And(null & val.of("NUM") == 10);
        Assert.AreEqual("NUM = 10", aQuery.GetWhereExp());

        aQuery = new Query <ColumnInfo>();
        //aQuery.And(nullVal And nullVal)
        Assert.AreEqual("", aQuery.GetWhereExp());

        //OR
        aQuery = new Query <ColumnInfo>();
        aQuery.And(val.of("NUM") == 10 | null);
        Assert.AreEqual("NUM = 10", aQuery.GetWhereExp());

        aQuery = new Query <ColumnInfo>();
        aQuery.And(null | val.of("NUM") == 10);
        Assert.AreEqual("NUM = 10", aQuery.GetWhereExp());

        aQuery = new Query <ColumnInfo>();
        //aQuery.And(nullVal Or nullVal)
        Assert.AreEqual("", aQuery.GetWhereExp());

        //XOR
        aQuery = new Query <ColumnInfo>();
        aQuery.And(val.of("NUM") == 10 ^ null);
        Assert.AreEqual("NUM = 10", aQuery.GetWhereExp());

        aQuery = new Query <ColumnInfo>();
        aQuery.And(null ^ val.of("NUM") == 10);
        Assert.AreEqual("NUM = 10", aQuery.GetWhereExp());

        aQuery = new Query <ColumnInfo>();
        //aQuery.And(nullVal Xor nullVal)
        Assert.AreEqual("", aQuery.GetWhereExp());
    }
示例#25
0
    public void Seriaraizable()
    {
        aQuery = new Query <Person>();
        aQuery.MaxRows(7);
        aQuery.RowRange(8, 9);
        aQuery.OrderBy("id", "name", "birthDay");
        aQuery.And(val.of("name") == "源頼朝" &
                   val.of("birthDay") != DateTime.Now &
                   !(val.of("id").In(1, 2, 3) | val.of("id").Between(1, 3)) ^
                   val.of("name").Like("源%") &
                   (val.of("birthDay") < DateTime.Now |
                    val.of("birthDay") <= DateTime.Now |
                    val.of("birthDay") > DateTime.Now |
                    val.of("birthDay") <= DateTime.Now));

        this.Serialize(aQuery);
        aQuery = null;
        aQuery = (Query <Person>) this.Deserialize();
    }
示例#26
0
        /// <summary>
        /// Append Entity Identity Condition
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data"></param>
        /// <param name="originalQuery"></param>
        /// <param name="exclude"></param>
        /// <returns></returns>
        public static IQuery AppendEntityIdentityCondition <T>(T data, IQuery originalQuery = null, bool exclude = false) where T : BaseEntity <T>
        {
            originalQuery = originalQuery ?? QueryFactory.Create();
            if (data == null)
            {
                return(originalQuery);
            }
            Type entityType = typeof(T);
            var  keys       = EntityManager.GetPrimaryKeys(entityType);

            if (keys.IsNullOrEmpty())
            {
                throw new Exception(string.Format("type:{0} is not set primary keys", entityType.FullName));
            }
            foreach (var key in keys)
            {
                originalQuery.And(key, exclude ? CriteriaOperator.NotEqual : CriteriaOperator.Equal, data.GetPropertyValue(key));
            }
            return(originalQuery);
        }
示例#27
0
        /// <summary>
        /// 修改用户授权
        /// </summary>
        /// <param name="userAuthorizes">用户授权信息</param>
        /// <returns></returns>
        public static Result ModifyUserAuthorize(IEnumerable <UserAuthorize> userAuthorizes)
        {
            if (userAuthorizes.IsNullOrEmpty())
            {
                return(Result.FailedResult("没有指定任何要修改的用户授权信息"));
            }

            #region 角色授权

            List <long> userIds           = userAuthorizes.Select(c => c.User?.SysNo ?? 0).Distinct().ToList();
            IQuery      userRoleBindQuery = QueryFactory.Create <UserRoleQuery>(c => userIds.Contains(c.UserSysNo));
            userRoleBindQuery.AddQueryFields <UserRoleQuery>(c => c.RoleSysNo);
            IQuery roleAuthBindQuery = QueryFactory.Create <RoleAuthorizeQuery>();
            roleAuthBindQuery.And <RoleAuthorizeQuery>(c => c.Role, CriteriaOperator.In, userRoleBindQuery);
            roleAuthBindQuery.AddQueryFields <RoleAuthorizeQuery>(c => c.Authority);
            IQuery authQuery = QueryFactory.Create <AuthorityQuery>();
            authQuery.And <AuthorityQuery>(c => c.Code, CriteriaOperator.In, roleAuthBindQuery);
            authQuery.AddQueryFields <AuthorityQuery>(c => c.Code);
            IEnumerable <Authority> roleAuthoritys     = AuthorityService.GetAuthorityList(authQuery);
            List <string>           roleAuthorityCodes = roleAuthoritys.Select(c => c.Code).ToList();

            #endregion

            List <UserAuthorize> saveUserAuthorizes = new List <UserAuthorize>();
            userAuthRepository.Remove(userAuthorizes.ToArray());                                                                                      //移除授权数据
            List <UserAuthorize> disableAuthorizes = userAuthorizes.Where(c => c.Disable && roleAuthorityCodes.Contains(c.Authority?.Code)).ToList(); //角色拥有但是用户显示禁用掉的授权
            if (!disableAuthorizes.IsNullOrEmpty())
            {
                saveUserAuthorizes.AddRange(disableAuthorizes);
            }
            List <UserAuthorize> enableAuthorizes = userAuthorizes.Where(c => !c.Disable && !roleAuthorityCodes.Contains(c.Authority?.Code)).ToList();//用户单独授权的权限
            if (!enableAuthorizes.IsNullOrEmpty())
            {
                saveUserAuthorizes.AddRange(enableAuthorizes);
            }
            if (!saveUserAuthorizes.IsNullOrEmpty())
            {
                userAuthRepository.Save(saveUserAuthorizes.ToArray());
            }
            return(Result.SuccessResult("修改成功"));
        }
        /// <summary>
        /// edit data
        /// </summary>
        /// <param name="obj">object</param>
        /// <param name="query">query object</param>
        /// <returns>ICommand object</returns>
        public virtual ICommand Modify(T obj, IQuery query)
        {
            Dictionary <string, dynamic> modifyValues = obj.GetModifyValues();

            if (modifyValues == null || modifyValues.Count <= 0)
            {
                return(null);
            }

            #region 版本控制

            string versionFieldName = QueryConfig.GetVersionField(typeof(T));
            if (!string.IsNullOrWhiteSpace(versionFieldName))
            {
                if (!modifyValues.ContainsKey(versionFieldName))
                {
                    modifyValues.Add(versionFieldName, obj.PropertyValues[versionFieldName] + 1);
                }
                query = query ?? QueryFactory.Create();
                query.And(versionFieldName, CriteriaOperator.Equal, obj.PropertyValues[versionFieldName]);
            }

            #endregion

            #region 更新时间

            string refreshFieldName = QueryConfig.GetRefreshDateField(typeof(T));
            if (!string.IsNullOrWhiteSpace(refreshFieldName))
            {
                if (!modifyValues.ContainsKey(refreshFieldName))
                {
                    modifyValues.Add(refreshFieldName, DateTime.Now);
                }
            }

            #endregion

            return(Update(modifyValues.Keys, modifyValues, query));
        }
示例#29
0
        /// <summary>
        /// 根据筛选条件创建查询对象
        /// </summary>
        /// <returns>返回查询对象</returns>
        public override IQuery CreateQuery()
        {
            IQuery query = base.CreateQuery() ?? QueryManager.Create <OperationEntity>(this);
            //用户授权的操作或者无限制的操作
            var publicOrUserOperationQuery = QueryManager.Create <OperationEntity>();

            if (UserFilter != null)
            {
                //用户权限
                var userPermissionQuery = new UserPermissionFilter()
                {
                    UserFilter = UserFilter,
                    Status     = PermissionStatus.Enable
                }.CreateQuery();
                //权限绑定操作
                var userPermissionOperationQuery = QueryManager.Create <PermissionOperationEntity>();
                userPermissionOperationQuery.EqualInnerJoin(userPermissionQuery);
                userPermissionOperationQuery.AddQueryFields <PermissionOperationEntity>(p => p.OperationId);
                publicOrUserOperationQuery.In <OperationEntity>(c => c.Id, userPermissionOperationQuery);
            }
            publicOrUserOperationQuery.Or <OperationEntity>(a => a.AccessLevel == OperationAccessLevel.Public);//无限制功能
            query.And(publicOrUserOperationQuery);
            return(query);
        }
示例#30
0
        /// <summary>
        /// 根据权限查询条件生成查询对象
        /// </summary>
        /// <param name="filter">查询条件</param>
        /// <returns></returns>
        IQuery CreateAuthorityQueryObject(AuthorityFilterDto filter, bool useBaseFilter = false)
        {
            if (filter == null)
            {
                return(null);
            }
            IQuery query = null;

            if (useBaseFilter)
            {
                query = QueryFactory.Create <AuthorityQuery>(filter);

                #region 数据筛选

                if (!filter.Codes.IsNullOrEmpty())
                {
                    query.In <AuthorityQuery>(c => c.Code, filter.Codes);
                }
                if (!filter.Name.IsNullOrEmpty())
                {
                    query.Equal <AuthorityQuery>(c => c.Name, filter.Name);
                }
                if (!filter.NameCodeMateKey.IsNullOrEmpty())
                {
                    query.And <AuthorityQuery>(QueryOperator.OR, CriteriaOperator.Like, filter.NameCodeMateKey, null, a => a.Code, a => a.Name);
                }
                if (filter.AuthType.HasValue)
                {
                    query.Equal <AuthorityQuery>(c => c.AuthType, filter.AuthType.Value);
                }
                if (filter.Status.HasValue)
                {
                    query.Equal <AuthorityQuery>(c => c.Status, filter.Status.Value);
                }
                if (filter.Sort.HasValue)
                {
                    query.Equal <AuthorityQuery>(c => c.Sort, filter.Sort.Value);
                }
                if (filter.AuthGroup.HasValue)
                {
                    query.Equal <AuthorityQuery>(c => c.AuthGroup, filter.AuthGroup.Value);
                }
                if (!filter.Remark.IsNullOrEmpty())
                {
                    query.Equal <AuthorityQuery>(c => c.Remark, filter.Remark);
                }
                //if (!filter.Application.IsNullOrEmpty())
                //{
                //    query.Equal<AuthorityQuery>(c => c.Application, filter.Application);
                //}
                if (filter.CreateDate.HasValue)
                {
                    query.Equal <AuthorityQuery>(c => c.CreateDate, filter.CreateDate.Value);
                }

                #endregion

                #region 数据加载

                if (filter.LoadGroup)
                {
                    query.SetLoadPropertys <Authority>(true, c => c.AuthGroup);
                }

                #endregion
            }
            else
            {
                if (filter is AuthorityOperationBindAuthorityFilterDto)
                {
                    query = CreateAuthorityQueryObject(filter as AuthorityOperationBindAuthorityFilterDto);//操作授权
                }
                else if (filter is RoleAuthorityFilterDto)
                {
                    query = CreateAuthorityQueryObject(filter as RoleAuthorityFilterDto);//角色授权
                }
                else if (filter is UserAuthorityFilterDto)
                {
                    query = CreateAuthorityQueryObject(filter as UserAuthorityFilterDto);//用户授权
                }
                else
                {
                    query = CreateAuthorityQueryObject(filter, true);
                }
            }

            return(query);
        }