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)); }
/// <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 }); } } } } }
/// <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()); }