Example #1
0
        public IActionResult RolesDialog([FromBody] RoleDialogModel model)
        {
            if (model.UserId.NotEmpty() && model.UserId.Count == 1)
            {
                var             id    = model.UserId.First();
                QueryExpression query = new QueryExpression("SystemUserRoles");
                query.AddColumns("roleid");
                query.Criteria.AddCondition("systemuserid", ConditionOperator.Equal, id);
                var userRolesData = _dataFinder.RetrieveAll(query);
                if (userRolesData.NotEmpty())
                {
                    model.SelectedRoles = userRolesData.Select(x => x.GetGuidValue("roleid")).ToList();
                }
            }
            if (model.TeamId.NotEmpty() && model.TeamId.Count == 1)
            {
                var             id    = model.TeamId.First();
                QueryExpression query = new QueryExpression("TeamRoles");
                query.AddColumns("roleid");
                query.Criteria.AddCondition("teamid", ConditionOperator.Equal, id);
                var userRolesData = _dataFinder.RetrieveAll(query);
                if (userRolesData.NotEmpty())
                {
                    model.SelectedRoles = userRolesData.Select(x => x.GetGuidValue("roleid")).ToList();
                }
            }
            var result = _roleService.QueryPaged(x => x
                                                 .Where(n => n.OrganizationId == CurrentUser.OrganizationId)
                                                 .Sort(n => n.OnFile(model.SortBy).ByDirection(model.SortDirection))
                                                 );

            model.Items      = result.Items;
            model.TotalItems = result.TotalItems;
            return(View(model));
        }
Example #2
0
        /// <summary>
        /// 重复规则命中
        /// </summary>
        /// <param name="organizationService"></param>
        /// <param name="data"></param>
        /// <param name="entityMetadata"></param>
        /// <param name="attributeMetadatas"></param>
        /// <returns></returns>
        public virtual IEnumerable <DuplicateRuleHitResult> ExecuteCore(Entity data, Schema.Domain.Entity entityMetadata, List <Schema.Domain.Attribute> attributeMetadatas)
        {
            if (!entityMetadata.DuplicateEnabled)
            {
                yield break;
            }
            var duplicateRules = _duplicateRuleFinder.QueryByEntityId(entityMetadata.EntityId, RecordState.Enabled);

            if (duplicateRules.NotEmpty())
            {
                var languageId = _appContext.GetFeature <ICurrentUser>().UserSettings.LanguageId;
                foreach (var rule in duplicateRules)
                {
                    rule.Conditions = _duplicateRuleConditionService.Query(n => n.Where(w => w.DuplicateRuleId == rule.DuplicateRuleId));
                    var             attrid     = rule.Conditions.Select(s => s.AttributeId).ToArray();
                    var             attributes = attributeMetadatas.Where(w => attrid.Contains(w.AttributeId));
                    QueryExpression qe         = new QueryExpression(data.Name, languageId);
                    qe.AddColumns(attributes.Select(s => s.Name).ToArray());
                    FilterExpression filter = new FilterExpression(LogicalOperator.And);
                    foreach (var item in qe.ColumnSet.Columns)
                    {
                        if (!data.ContainsKey(item))
                        {
                            continue;
                        }
                        var    attr  = attributeMetadatas.Find(n => n.Name.IsCaseInsensitiveEqual(item));
                        object value = data.UnWrapAttributeValue(attr);
                        //忽略空值
                        if (rule.Conditions.Find(x => x.AttributeId == attr.AttributeId).IgnoreNullValues)
                        {
                            if (value == null || value.ToString().IsEmpty())
                            {
                                continue;
                            }
                        }
                        filter.AddCondition(item, ConditionOperator.NotNull);
                        filter.AddCondition(item, ConditionOperator.Equal, value);
                    }
                    if (filter.Conditions.NotEmpty() && data.ContainsKey(data.IdName))
                    {
                        //排除自身的比较
                        filter.AddCondition(data.IdName, ConditionOperator.NotEqual, data.GetIdValue());
                    }
                    if (filter.Conditions.NotEmpty())
                    {
                        qe.Criteria.AddFilter(filter);
                        var record = _dataFinder.Retrieve(qe, true);
                        if (record != null && record.Count > 0)
                        {
                            yield return(new DuplicateRuleHitResult {
                                Rule = rule, Target = record
                            });
                        }
                    }
                }
            }
        }
Example #3
0
        /// <summary>
        /// 获取当前处理者列表
        /// </summary>
        /// <param name="instance"></param>
        /// <param name="handlerIdType"></param>
        /// <param name="handlers"></param>
        /// <param name="stepOrder"></param>
        /// <returns></returns>
        public List <Guid> GetCurrentHandlerId(WorkFlowInstance instance, WorkFlowProcess prevStep, int handlerIdType, string handlers)
        {
            var result = new List <Guid>();

            try
            {
                var applicantUser = _dataFinder.RetrieveById("systemuser", instance.ApplicantId, ignorePermissions: true);
                switch (handlerIdType)
                {
                case 1:    //所有成员

                    break;

                case 2:    //指定成员
                    if (handlers.IsNotEmpty())
                    {
                        List <WorkFlowStepHandler> handlerObjs = new List <WorkFlowStepHandler>().DeserializeFromJson(handlers);
                        foreach (var item in handlerObjs)
                        {
                            if (item.Type == WorkFlowStepHandlerType.SystemUser)
                            {
                                result.Add(item.Id);
                            }
                            else if (item.Type == WorkFlowStepHandlerType.Team)
                            {
                                var queryTeam = new QueryExpression("TeamMembership", _currentUser.UserSettings.LanguageId);
                                queryTeam.ColumnSet.AddColumn("SystemUserId");
                                queryTeam.Criteria.AddCondition("TeamId", ConditionOperator.Equal, item.Id);
                                var teamMembers = _dataFinder.RetrieveAll(queryTeam, true);
                                if (teamMembers.NotEmpty())
                                {
                                    result.AddRange(teamMembers.Select(n => n.GetGuidValue("SystemUserId")));
                                }
                            }
                            else if (item.Type == WorkFlowStepHandlerType.Roles)
                            {
                                QueryExpression query = new QueryExpression("SystemUserRoles");
                                query.AddColumns("SystemUserId");
                                query.Criteria.AddCondition("RoleId", ConditionOperator.Equal, item.Id);
                                var userRolesData = _dataFinder.RetrieveAll(query, true);
                                if (userRolesData.NotEmpty())
                                {
                                    result.AddRange(userRolesData.Select(n => n.GetGuidValue("SystemUserId")));
                                }
                            }
                            else if (item.Type == WorkFlowStepHandlerType.Post)
                            {
                                var queryTeam = new QueryExpression("SystemUser", _currentUser.UserSettings.LanguageId);
                                queryTeam.ColumnSet.AddColumn("SystemUserId");
                                queryTeam.Criteria.AddCondition("PostId", ConditionOperator.Equal, item.Id);
                                queryTeam.Criteria.AddCondition("statecode", ConditionOperator.Equal, 1);
                                var teamMembers = _dataFinder.RetrieveAll(queryTeam, true);
                                if (teamMembers.NotEmpty())
                                {
                                    result.AddRange(teamMembers.Select(n => n.GetGuidValue("SystemUserId")));
                                }
                            }
                        }
                    }
                    break;

                case 3:    //发起人领导
                    var parentUserId = applicantUser.GetGuidValue("parentsystemuserid");
                    if (!parentUserId.Equals(Guid.Empty))
                    {
                        result.Add(parentUserId);
                    }
                    break;

                case 4:    //发起人部门负责人
                    var bmanager   = _dataFinder.RetrieveById("businessunit", applicantUser.GetGuidValue("businessunitid"));
                    var bmanagerId = bmanager.GetGuidValue("managerid");
                    if (!bmanagerId.Equals(Guid.Empty))
                    {
                        result.Add(bmanagerId);
                    }
                    break;

                case 5:    //发起人公司负责人
                    var orgmanager   = _dataFinder.RetrieveById("organization", applicantUser.GetGuidValue("organizationid"), ignorePermissions: true);
                    var orgmanagerId = orgmanager.GetGuidValue("managerid");
                    if (!orgmanagerId.Equals(Guid.Empty))
                    {
                        result.Add(orgmanagerId);
                    }
                    break;

                case 6:    //上一环节审核人领导
                           //var prevStepOrder = stepOrder - 1;
                           //var prevStep = new WorkFlowStepService(this.User).Find(n => n.WorkFlowId == instance.WorkFlowId && n.StepOrder == prevStepOrder);
                    if (prevStep != null)
                    {
                        var prevHandlers = GetCurrentHandlerId(instance, null, prevStep.HandlerIdType, prevStep.Handlers);
                        foreach (var item in prevHandlers)
                        {
                            var prevHandledUsers = _dataFinder.RetrieveById("systemuser", item, ignorePermissions: true);
                            var parentUserId2    = prevHandledUsers.GetGuidValue("parentsystemuserid");
                            if (!parentUserId2.Equals(Guid.Empty))
                            {
                                result.Add(parentUserId2);
                            }
                        }
                    }
                    break;

                case 7:    //发起人
                    result.Add(instance.ApplicantId);
                    break;
                }
            }
            catch (Exception ex)
            {
                throw new XmsException(ex);
            }
            return(result.Distinct().ToList());
        }