using APT.Infrastructure.Core; using APT.BaseData.Domain.ApiModel; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.IServices.FM; using APT.Utility; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Collections.Immutable; using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Enums; using APT.Infrastructure.Api; using APT.MS.Domain.Entities.PF; using APT.BaseData.Domain.Dtos; using Castle.Core.Internal; namespace APT.BaseData.Services.Services.FM { public partial class FMUserService : CommonService, IFMUserService { public FMUserService(IRepository repository) : base(repository) { } public List Login(string userName, string pwd) { var person = this.GetEntities(i => i.CODE == userName && i.PASSWORD == pwd.Trim()).ToList(); return person; } public UserRoleModel GetRolesByUser(Guid userId, KeywordFilter filter) { List list = new List(); list.Add(userId); var result = GetRolesByUser(list, filter); if (result != null && result.Any()) return result[0]; return null; } public UserRoleModel AppGetRolesByUser(Guid userId, KeywordFilter filter) { List list = new List(); list.Add(userId); var result = GetAppRolesByUser(list, filter); if (result != null && result.Any()) return result[0]; return null; } public List GetAppRolesByUser(IEnumerable userIds, KeywordFilter filter) { try { if (userIds == null || userIds.Count() <= 0) return null; var list = this.GetEntities(t => userIds.Contains(t.ID), filter, new string[] { "Nav_BelongRoles.Nav_BelongRole", "Nav_Org","Nav_Department"}).ToList(); List result = new List(); List roleGroupList = null; List userGroupList = null; foreach (var user in list) { Dictionary existsUserGroupIds = new Dictionary(); List roleIds = new List(); if (user.Nav_BelongRoles != null && user.Nav_BelongRoles.Any()) { var tmpList = user.Nav_BelongRoles.Where(x => x.Nav_BelongRole.PLATFORM_TYPE == (int)PFPlatTypeEnum.APP).Select(t => t.BELONG_ROLE_ID).ToList(); GetRoleByStr(tmpList, roleIds); } if (user.Nav_BelongRoleGroups != null && user.Nav_BelongRoleGroups.Any()) { var tmpList = user.Nav_BelongRoleGroups.Select(t => t.BELONG_ROLE_GROUP_ID).ToList(); GetRoleByRoleGroupStr(user.ORG_ID, tmpList, roleIds, ref roleGroupList); } if (user.Nav_BelongUserGroups != null && user.Nav_BelongUserGroups.Any()) { var tmpList = user.Nav_BelongUserGroups.Select(t => t.BELONG_USER_GROUP_ID).ToList(); foreach (var s in tmpList) GetRoleByUserGroup(user.ORG_ID, s, existsUserGroupIds, ref userGroupList, ref roleGroupList, roleIds); } UserRoleModel userRoleModel = new UserRoleModel(); userRoleModel.User = user; if (roleIds.Any()) { RolePerm rolePerm = new RolePerm(); userRoleModel.Nav_RolePerm = rolePerm; var roles = this.GetEntities(t => roleIds.Contains(t.ID) && t.ENABLE_STATUS == 0, filter, new string[] { "Nav_MenuPermissions.Nav_PermissionForm" }).ToList(); userRoleModel.Roles = roles; var menuIds = roles.SelectMany(i => i.Nav_MenuPermissions).Select(i => i?.MENU_ID).Distinct().ToList(); if (!roles.Any(x => x.ROLE_TYPE == (int)PFUserTypeEnum.管理员)) { foreach (var item in roles) { //表单授权 if (item.Nav_MenuPermissions != null && item.Nav_MenuPermissions.Any()) { foreach (var menu in item.Nav_MenuPermissions) { if (!menu.IS_PERMISSION || menu.Nav_PermissionForm == null) continue; var form = rolePerm.Nav_RolePermForms.Where(t => t.MenuId == menu.MENU_ID.ToString() && t.PermFormId == menu.PERMISSION_FORM_ID.ToString()).FirstOrDefault(); if (form == null) { form = new PermMenuDto(); form.PermFormId = menu.PERMISSION_FORM_ID.ToString(); form.MenuId = menu.MENU_ID?.ToString(); //form.Nav_PermForm = menu.Nav_PermissionForm; rolePerm.Nav_RolePermForms.Add(form); } } } } } } //清空导航 user.Nav_BelongRoleGroups = null; user.Nav_BelongRoles = null; user.Nav_BelongUserGroups = null; result.Add(userRoleModel); } return result; } catch (Exception ex) { throw new Exception(LogHelper.GetCurSourceFileName() + " - " + LogHelper.GetLineNum() + ":" + ex.Message); } } public List GetRolesByUser(IEnumerable userIds, KeywordFilter filter) { try { if (userIds == null || userIds.Count() <= 0) return null; //var list = this.GetEntities(t => userIds.Contains(t.ID)); //if (list == null || !list.Any()) return null; //var def = list.FirstOrDefault(); var list = this.GetEntities(t => userIds.Contains(t.ID), filter, new string[] { "Nav_BelongRoles.Nav_BelongRole", "Nav_BelongRoleGroups.Nav_BelongRoleGroup", "Nav_BelongUserGroups.Nav_BelongUserGroup","Nav_Org","Nav_Department"}).ToList(); //var userBelongRules = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //var belongRules = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //userBelongRules = userBelongRules.Where(i => userIds.Contains(i.USER_ID)).ToList(); //foreach (var u in userBelongRules) //{ // u.Nav_BelongRole = belongRules.FirstOrDefault(i => i.ID == u.BELONG_ROLE_ID); //} //var userBelongRuleGroups = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //var belongRuleGroups = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //userBelongRuleGroups = userBelongRuleGroups.Where(i => userIds.Contains(i.USER_ID)).ToList(); //foreach (var u in userBelongRuleGroups) //{ // u.Nav_BelongRoleGroup = belongRuleGroups.FirstOrDefault(i => i.ID == u.BELONG_ROLE_GROUP_ID); //} //var userBelongUserGroups = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //var belongUserGroups = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //userBelongUserGroups = userBelongUserGroups.Where(i => userIds.Contains(i.USER_ID)).ToList(); //foreach (var u in userBelongUserGroups) //{ // u.Nav_BelongUserGroup = belongUserGroups.FirstOrDefault(i => i.ID == u.BELONG_USER_GROUP_ID); //} //foreach (var l in list) //{ // l.Nav_BelongRoles = userBelongRules.Where(i => i.USER_ID == l.ID).ToList(); // l.Nav_BelongRoleGroups = userBelongRuleGroups.Where(i => i.USER_ID == l.ID).ToList(); // l.Nav_BelongUserGroups = userBelongUserGroups.Where(i => i.USER_ID == l.ID).ToList(); //} List result = new List(); //var roleService = ServiceUtils.GetCommonService(); //var roleGroupService = ServiceUtils.GetCommonService(); //var userGroupService = ServiceUtils.GetCommonService(); List roleGroupList = null; List userGroupList = null; foreach (var user in list) { Dictionary existsUserGroupIds = new Dictionary(); List roleIds = new List(); if (user.Nav_BelongRoles != null && user.Nav_BelongRoles.Any()) { var tmpList = user.Nav_BelongRoles.Where(x => x.Nav_BelongRole.PLATFORM_TYPE == Convert.ToInt32(filter.Parameter3)).Select(t => t.BELONG_ROLE_ID).ToList(); GetRoleByStr(tmpList, roleIds); } if (user.Nav_BelongRoleGroups != null && user.Nav_BelongRoleGroups.Any()) { var tmpList = user.Nav_BelongRoleGroups.Select(t => t.BELONG_ROLE_GROUP_ID).ToList(); GetRoleByRoleGroupStr(user.ORG_ID, tmpList, roleIds, ref roleGroupList); } if (user.Nav_BelongUserGroups != null && user.Nav_BelongUserGroups.Any()) { var tmpList = user.Nav_BelongUserGroups.Select(t => t.BELONG_USER_GROUP_ID).ToList(); foreach (var s in tmpList) GetRoleByUserGroup(user.ORG_ID, s, existsUserGroupIds, ref userGroupList, ref roleGroupList, roleIds); } UserRoleModel userRoleModel = new UserRoleModel(); userRoleModel.User = user; if (roleIds.Any()) { RolePerm rolePerm = new RolePerm(); userRoleModel.Nav_RolePerm = rolePerm; var roles = this.GetEntities(t => roleIds.Contains(t.ID) && t.ENABLE_STATUS == 0, filter, new string[] { "Nav_MenuPermissions.Nav_PermissionBtns.Nav_Btn", "Nav_MenuPermissions.Nav_PermissionForm", "Nav_Panels.Nav_Panel.Nav_PanelInfo.Nav_Info", "Nav_MenuPermissions.Nav_PermissionColumns.Nav_Column" }).ToList(); //var roles = this.GetEntities(i => i.ORG_ID == orgId); //roles = roles.Where(t => roleIds.Contains(t.ID) && t.ENABLE_STATUS == 0).ToList(); //List nav_MenuPermissions = new List(); //foreach (var s in roleIds) //{ // var roleMenuPerm = this.GetEntitiesByRedis(i => i.ORG_ID == def.ORG_ID, new BaseFilter(), s.ToString()); // nav_MenuPermissions.AddRange(roleMenuPerm); //} //nav_MenuPermissions = nav_MenuPermissions.Where(i => roleIds.Contains(i.ROLE_ID)).ToList(); //var nav_Panels = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //nav_Panels = nav_Panels.Where(i => roleIds.Contains(i.BELONG_ROLE_ID)).ToList(); //var nav_PermissionBtns = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //var nav_Btn = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //var nav_PermissionForm = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //var nav_Panel = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //var nav_PanelInfo = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //var nav_Info = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //var nav_PermissionColumns = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //var nav_Column = this.GetEntitiesByRedis(def.ORG_ID ?? Guid.Empty); //// "Nav_Panels.Nav_Panel.Nav_PanelInfo.Nav_Info" //foreach (var p in nav_Panels) //{ // p.Nav_Panel = nav_Panel.FirstOrDefault(i => i.ID == p.PANEL_ID); // if (p.Nav_Panel != null) // p.Nav_Panel.Nav_PanelInfo = nav_PanelInfo.Where(i => i.PANEL_ID == p.PANEL_ID).ToList(); // if (p.Nav_Panel.Nav_PanelInfo.Any()) // { // foreach (var info in p.Nav_Panel.Nav_PanelInfo) // { // info.Nav_Info = nav_Info.FirstOrDefault(i => i.ID == info.INFO_ID); // } // } //} ////"Nav_MenuPermissions.Nav_PermissionBtns.Nav_Btn";"Nav_Panels.Nav_Panel.Nav_PanelInfo.Nav_Info" ////"Nav_MenuPermissions.Nav_PermissionColumns.Nav_Column" //foreach (var p in nav_MenuPermissions) //{ // p.Nav_PermissionBtns = nav_PermissionBtns.Where(i => i.ROLE_MENU_PERMISSION_ID == p.ID).ToList(); // if (p.Nav_PermissionBtns.Any()) // { // foreach (var btn in p.Nav_PermissionBtns) // { // btn.Nav_Btn = nav_Btn.FirstOrDefault(i => i.ID == btn.BTN_ID); // } // } // p.Nav_PermissionForm = nav_PermissionForm.FirstOrDefault(i => i.ID == p.PERMISSION_FORM_ID); // //Nav_Column // p.Nav_PermissionColumns = nav_PermissionColumns.Where(i => i.ROLE_MENU_PERMISSION_ID == p.ID).ToList(); // if (p.Nav_PermissionColumns.Any()) // { // foreach (var col in p.Nav_PermissionColumns) // { // col.Nav_Column = nav_Column.FirstOrDefault(i => i.ID == col.COLUMN_ID); // } // } //} ////因MySQL 不支持多个列表的导航取值,这里对Nav_MenuPermissions.Nav_PermissionColumns特殊处理 //var tempRoles = this.GetEntities(t => roleIds.Contains(t.ID) && t.ENABLE_STATUS == 0, // new string[] { "Nav_MenuPermissions.Nav_PermissionColumns.Nav_Column" }).ToList(); userRoleModel.Roles = roles; var menuIds = roles.SelectMany(i => i.Nav_MenuPermissions).Select(i => i?.MENU_ID).Distinct().ToList(); //var filter = new BaseFilter(); //filter.SelectField = new string[] { "ID", "MENU_ID", "BTN_ID", "Nav_Column" }; var perBtns = this.GetEntities(i => menuIds.Contains(i.MENU_ID) && roleIds.Contains(i.ROLE_ID ?? Guid.Empty), filter, "Nav_Btn"); //filter.SelectField = new string[] { "ID", "MENU_ID", "COLUMN_ID", "Nav_Column.IS_RULE", // "Nav_Column.FIELD_NAME", "Nav_Column.LABEL", "Nav_Column.PAGE_TABLE_ID", "Nav_Column.IS_DEFAULT", // "Nav_Column.NUM", "Nav_Column.WIDTH", "Nav_Column.PAGE_TABLE_ID", "Nav_Column.IS_DEFAULT", // "Nav_Column.FIELD_NAME", "Nav_Column.LABEL", "Nav_Column.PAGE_TABLE_ID", "Nav_Column.IS_DEFAULT", // "Nav_Column.DATA_TYPE","Nav_Column.NO_SORT","Nav_Column.CONTROL_TYPE", "Nav_Column.VALIDATA_TYPE","Nav_Column.FORMAT","Nav_Column.ENUM" }; var perColumns = this.GetEntities(i => menuIds.Contains(i.MENU_ID) && roleIds.Contains(i.ROLE_ID ?? Guid.Empty), filter, "Nav_Column"); if (!roles.Any(x => x.ROLE_TYPE == (int)PFUserTypeEnum.管理员)) { foreach (var item in roles) { //表单授权 if (item.Nav_MenuPermissions != null && item.Nav_MenuPermissions.Any()) { //var tempRole = tempRoles.FirstOrDefault(t => t.ID == item.ID); foreach (var menu in item.Nav_MenuPermissions) { //if (!menu.IS_PERMISSION || menu.Nav_PermissionForm == null || menu.Nav_PermissionForm.ENABLE_STATUS == 1) continue; if (!menu.IS_PERMISSION || menu.Nav_PermissionForm == null) continue; var form = rolePerm.Nav_RolePermForms.Where(t => t.MenuId == menu.MENU_ID.ToString() && t.PermFormId == menu.PERMISSION_FORM_ID.ToString()).FirstOrDefault(); if (form == null) { form = new PermMenuDto(); form.PermFormId = menu.PERMISSION_FORM_ID.ToString(); form.MenuId = menu.MENU_ID?.ToString(); //form.Nav_PermForm = menu.Nav_PermissionForm; rolePerm.Nav_RolePermForms.Add(form); } //按钮 if (perBtns != null && perBtns.Any()) { perBtns.ForEach(t => { if (t.MENU_ID.ToString() == form.MenuId) { if (!form.Nav_Btns.Any(t1 => t1.BtnId == t.BTN_ID.ToString() && t1.MenuId == t.MENU_ID.ToString())) { BtnDto btn = new BtnDto(); btn.BtnId = t.BTN_ID.ToString(); btn.MenuId = t.MENU_ID?.ToString(); //btn.Nav_Btn = t.Nav_Btn; form.Nav_Btns.Add(btn); } } }); } //列 if (perColumns != null && perColumns.Any()) { perColumns.ForEach(t => { if (t.MENU_ID.ToString() == form.MenuId) { if (!form.Nav_Columns.Any(t1 => t1.ColumnId == t.COLUMN_ID.ToString() && t1.MenuId == t.MENU_ID.ToString())) { ClumnDto col = new ClumnDto(); col.ColumnId = t.COLUMN_ID.ToString(); col.MenuId = t.MENU_ID?.ToString(); //col.Nav_Column = t.Nav_Column; form.Nav_Columns.Add(col); } } }); } } } //工作中心授权 //if (item.Nav_Workstages != null && item.Nav_Workstages.Any()) //{ //foreach (var workstate in item.Nav_Workstages) //{ // if (!workstate.IS_PERMISSION) continue; // if (workstate.Nav_Workstage == null || workstate.Nav_Workstage.ENABLE_STATUS == 1) continue; // if (!rolePerm.Nav_RolePermWorkStages.Any(t => t.WorkstageId == workstate.WORKSTAGE_ID)) // { // RolePermWorkStage tmp = new RolePermWorkStage(); // tmp.WorkstageId = workstate.WORKSTAGE_ID; // tmp.Nav_WorkStage = workstate.Nav_Workstage; // rolePerm.Nav_RolePermWorkStages.Add(tmp); // } //} //} //区域授权 //if (item.Nav_Panels != null && item.Nav_Panels.Any()) //{ // foreach (var panel in item.Nav_Panels) // { // if (panel.Nav_Panel == null || panel.Nav_Panel.ENABLE_STATUS == 1) continue; // if (!rolePerm.Nav_RolePermPanels.Any(t => t.PanelId == panel.PANEL_ID)) // { // RolePermPanel tmp = new RolePermPanel(); // tmp.PanelId = panel.PANEL_ID; // tmp.Nav_Panel = panel.Nav_Panel; // rolePerm.Nav_RolePermPanels.Add(tmp); // } // } //} } } } //清空导航 user.Nav_BelongRoleGroups = null; user.Nav_BelongRoles = null; user.Nav_BelongUserGroups = null; result.Add(userRoleModel); } return result; } catch (Exception ex) { throw new Exception(LogHelper.GetCurSourceFileName() + " - " + LogHelper.GetLineNum() + ":" + ex.Message); } } public UserRoleModel NewGetRolesByUser(Guid userId, KeywordFilter filter) { try { var newUser = this.GetEntity(userId, new string[] { "Nav_Org", "Nav_Department" }); //var newUser = this.GetEntities(t => userId == t.ID, filter, new string[] { "Nav_Org", "Nav_Department" }).FirstOrDefault(); var newFilter = new BaseFilter(filter.GetOrgId()); newFilter.SelectField = new string[] { "ID", "ROLE_TYPE", "PLATFORM_TYPE" }; var rolesa = this.GetEntities(i => i.Nav_UserBelongRoles.Any(i => i.USER_ID == userId) && i.PLATFORM_TYPE == Convert.ToInt32(filter.Parameter3), newFilter); UserRoleModel userRoleModel = new UserRoleModel(); userRoleModel.User = newUser; userRoleModel.Roles = rolesa.ToList(); if (rolesa.Any(i => i.ROLE_TYPE == (int)FMRoleTypeEnum.管理角色)) { } else { if (rolesa.Any()) { var rolesId = rolesa.Select(i => i.ID).ToArray(); RolePerm rolePerm = new RolePerm(); userRoleModel.Nav_RolePerm = rolePerm; newFilter.SelectField = new string[] { "ID", "MENU_ID", "IS_PERMISSION", "PERMISSION_FORM_ID" }; var menuPer = this.GetEntities(i => rolesId.Contains(i.ROLE_ID), newFilter); userRoleModel.Roles.FirstOrDefault().Nav_MenuPermissions = menuPer.ToList(); var menuPerIds = menuPer.Select(i => i.ID).ToArray(); var menuFormIds = menuPer.Select(i => i.PERMISSION_FORM_ID).ToArray(); var menuIds = menuPer.Select(i => i?.MENU_ID).Distinct().ToList(); newFilter.SelectField = new string[] { "ID", "MENU_ID", "Nav_Btn.ID" }; var perBtns = this.GetEntities(i => menuIds.Contains(i.MENU_ID) && rolesId.Contains(i.ROLE_ID ?? Guid.Empty) && i.Nav_Btn.ENABLE_STATUS == (int)FMEnableStatusEnum.启用, newFilter, "Nav_Btn"); newFilter.SelectField = new string[] { "ID", "MENU_ID", "Nav_Column.ID" }; var perColumns = this.GetEntities(i => menuIds.Contains(i.MENU_ID) && rolesId.Contains(i.ROLE_ID ?? Guid.Empty) && i.Nav_Column.IS_DEFAULT, newFilter, "Nav_Column"); newFilter.SelectField = new string[] { "ID", "CODE" }; var perForms = this.GetEntities(i => menuFormIds.Contains(i.ID), newFilter); //表单授权 foreach (var menu in menuPer) { //if (!menu.IS_PERMISSION) continue; if (menu.PERMISSION_FORM_ID != null) { var form = rolePerm.Nav_RolePermForms.FirstOrDefault(t => t.MenuId == menu.MENU_ID.ToString() && t.PermFormId == menu.PERMISSION_FORM_ID.ToString()); if (form == null) { form = new PermMenuDto(); form.PermFormId = menu.PERMISSION_FORM_ID.ToString(); form.MenuId = menu.MENU_ID?.ToString(); //form.Nav_PermForm = perForms.FirstOrDefault(i => i.ID == menu.PERMISSION_FORM_ID); rolePerm.Nav_RolePermForms.Add(form); //按钮 var btns = perBtns.Where(i => i.MENU_ID == menu.MENU_ID); if (btns != null && btns.Any()) { btns.ForEach(t => { if (!form.Nav_Btns.Any(t1 => t1.BtnId == t.BTN_ID.ToString() && t1.MenuId == t.MENU_ID.ToString())) { BtnDto btn = new BtnDto(); btn.BtnId = t.BTN_ID.ToString(); btn.MenuId = t.MENU_ID?.ToString(); //btn.Nav_Btn = t.Nav_Btn; form.Nav_Btns.Add(btn); } }); } //列 var columns = perColumns.Where(i => i.MENU_ID == menu.MENU_ID); if (columns != null && columns.Any()) { columns.ForEach(t => { if (!form.Nav_Columns.Any(t1 => t1.ColumnId == t.COLUMN_ID.ToString() && t1.MenuId == t.MENU_ID.ToString())) { ClumnDto col = new ClumnDto(); col.ColumnId = t.COLUMN_ID.ToString(); col.MenuId = t.MENU_ID?.ToString(); //col.Nav_Column = t.Nav_Column; form.Nav_Columns.Add(col); } }); } } } } } } return userRoleModel; } catch (Exception ex) { throw new Exception(LogHelper.GetCurSourceFileName() + " - " + LogHelper.GetLineNum() + ":" + ex.Message); } } /// /// 通过角色获取人员列表 /// /// /// /// public List GetUsersByRoles(IEnumerable roleIds, Guid? orgId) { //var roleService = ServiceUtils.GetCommonService(); //var roleGroupService = ServiceUtils.GetCommonService(); //var userGroupService = ServiceUtils.GetCommonService(); Expression> userExpression = t => false; Expression> roleGroupExpression = t => false; Expression> userGroupExpression = t => false; foreach (var item in roleIds) { Guid tmp = new Guid(item); userExpression = userExpression.Or(t => t.Nav_BelongRoles.Any(i => i.BELONG_ROLE_ID == tmp)); roleGroupExpression = roleGroupExpression.Or(t => t.Nav_BelongRoles.Any(i => i.BELONG_ROLE_ID == tmp)); userGroupExpression = userGroupExpression.Or(t => t.Nav_BelongRoles.Any(i => i.BELONG_ROLE_ID == tmp)); } roleGroupExpression = roleGroupExpression.And(t => t.ENABLE_STATUS == 0); var roleGroupIds = this.GetEntities(roleGroupExpression, new string[] { "Nav_BelongRoles.Nav_BelongRole" }).Select(t => t.ID).ToList(); if (roleGroupIds != null && roleGroupIds.Any()) { foreach (var item in roleGroupIds) { userExpression = userExpression.Or(t => t.Nav_BelongRoleGroups.Any(i => i.BELONG_ROLE_GROUP_ID == item)); userGroupExpression = userGroupExpression.Or(t => t.Nav_BelongRoleGroups.Any(i => i.BELONG_ROLE_GROUP_ID == item)); } } userGroupExpression = userGroupExpression.And(t => t.ENABLE_STATUS == 0); var userGroupList = this.GetEntities(userGroupExpression, new string[] { "Nav_BelongRoles.Nav_BelongRole", "Nav_BelongRoleGroups.Nav_BelongRoleGroup", "Nav_BelongUserGroups.Nav_BelongUserGroup" }).Select(t => t.ID).ToList(); if (userGroupList.Any()) { List userGroupIds = new List(); Expression> tmpExpression = t => true; if (orgId != null) tmpExpression = tmpExpression.And(t => t.ORG_ID == orgId); tmpExpression = tmpExpression.And(t => t.ENABLE_STATUS == 0); var tmpUserGroupList = this.GetEntities(tmpExpression, new string[] { "Nav_BelongRoles.Nav_BelongRole", "Nav_BelongRoleGroups.Nav_BelongRoleGroup", "Nav_BelongUserGroups.Nav_BelongUserGroup" }).ToList(); GetUserGroups(userGroupList, userGroupIds, tmpUserGroupList); if (userGroupIds.Any()) { foreach (var item in userGroupIds) userExpression = userExpression.Or(t => t.Nav_BelongUserGroups.Any(i => i.BELONG_USER_GROUP_ID == item)); } } userExpression = userExpression.And(t => t.ENABLE_STATUS == 0); return this.GetEntities(userExpression, new string[] { "Nav_BelongRoles.Nav_BelongRole", "Nav_BelongRoleGroups.Nav_BelongRoleGroup", "Nav_BelongUserGroups.Nav_BelongUserGroup" }).ToList(); } #region 私有方法 private void GetRoleByStr(List list, List roleIds) { if (list == null || list.Count <= 0) return; foreach (var item in list) { if (!roleIds.Contains(item)) roleIds.Add(item); } } private void GetRoleByRoleGroupStr(Guid? orgId, List list, List roleIds, ref List roleGroupList) { if (list == null || list.Count <= 0) return; if (roleGroupList == null) { //Expression> expression = t => true; //if (orgId != null) // expression = expression.And(t => t.ORG_ID == orgId); //expression = expression.And(t => t.ENABLE_STATUS == 0); //roleGroupList = this.GetEntities(expression, new string[] { "Nav_BelongRoles.Nav_BelongRole" }).ToList(); // var baseFilter = new BaseFilter(orgId ?? Guid.Empty); baseFilter.IgnoreDataRule = true; roleGroupList = this.GetEntitiesByRedis(baseFilter); roleGroupList = roleGroupList.Where(t => t.ENABLE_STATUS == 0).ToList(); var belongRules = this.GetEntitiesByRedis(baseFilter); var belongRule = this.GetEntitiesByRedis(baseFilter); foreach (var role in belongRules) { role.Nav_BelongRole = belongRule.FirstOrDefault(i => i.ID == role.BELONG_ROLE_ID); } foreach (var role in roleGroupList) { role.Nav_BelongRoles = belongRules.Where(i => i.ROLE_GROUP_ID == role.ID).ToList(); } } foreach (var s in list) { var rg = roleGroupList.Where(t => t.ID == s).FirstOrDefault(); if (rg != null) { if (rg.Nav_BelongRoles != null && rg.Nav_BelongRoles.Any()) { var tmpList = rg.Nav_BelongRoles.Select(t => t.BELONG_ROLE_ID).ToList(); GetRoleByStr(tmpList, roleIds); } } } } private void GetRoleByUserGroup(Guid? orgId, Guid userGroupId, Dictionary existsUserGroupIds, ref List userGroupList, ref List roleGroupList, List roleIds) { if (userGroupList == null) { //Expression> expression = t => true; //if (orgId != null) // expression = expression.And(t => t.ORG_ID == orgId); //expression = expression.And(t => t.ENABLE_STATUS == 0); //userGroupList = this.GetEntities(expression, new string[] { "Nav_BelongRoles.Nav_BelongRole", // "Nav_BelongRoleGroups.Nav_BelongRoleGroup", // "Nav_BelongUserGroups.Nav_BelongUserGroup" }).ToList(); var baseFilter = new BaseFilter(orgId ?? Guid.Empty); baseFilter.IgnoreDataRule = true; userGroupList = this.GetEntitiesByRedis(baseFilter); userGroupList = userGroupList.Where(t => t.ENABLE_STATUS == 0).ToList(); var nav_BelongRoles = this.GetEntitiesByRedis(baseFilter); var nav_BelongRoleGroups = this.GetEntitiesByRedis(baseFilter); var nav_BelongUserGroups = this.GetEntitiesByRedis(baseFilter); var belongRule = this.GetEntitiesByRedis(baseFilter); var belongRoleGroup = this.GetEntitiesByRedis(baseFilter); var belonUserGroup = this.GetEntitiesByRedis(baseFilter); foreach (var role in nav_BelongRoles) { role.Nav_BelongRole = belongRule.FirstOrDefault(i => i.ID == role.BELONG_ROLE_ID); } foreach (var role in nav_BelongRoleGroups) { role.Nav_BelongRoleGroup = belongRoleGroup.FirstOrDefault(i => i.ID == role.BELONG_ROLE_GROUP_ID); } foreach (var role in nav_BelongUserGroups) { role.Nav_BelongUserGroup = belonUserGroup.FirstOrDefault(i => i.ID == role.BELONG_USER_GROUP_ID); } foreach (var u in userGroupList) { u.Nav_BelongRoles = nav_BelongRoles.Where(i => i.BELONG_ROLE_ID == u.ID).ToList(); u.Nav_BelongRoleGroups = nav_BelongRoleGroups.Where(i => i.BELONG_ROLE_GROUP_ID == u.ID).ToList(); u.Nav_BelongUserGroups = nav_BelongUserGroups.Where(i => i.BELONG_USER_GROUP_ID == u.ID).ToList(); } } if (userGroupList == null || userGroupList.Count <= 0) return; var userGroup = userGroupList.Where(t => t.ID == userGroupId).FirstOrDefault(); if (userGroup == null) return; if (existsUserGroupIds.ContainsKey(userGroup.ID)) return; existsUserGroupIds.Add(userGroup.ID, 0); if (userGroup.Nav_BelongRoles != null && userGroup.Nav_BelongRoles.Any()) { var list = userGroup.Nav_BelongRoles.Select(t => t.BELONG_ROLE_ID).ToList(); GetRoleByStr(list, roleIds); } if (userGroup.Nav_BelongRoleGroups != null && userGroup.Nav_BelongRoleGroups.Any()) { var list = userGroup.Nav_BelongRoleGroups.Select(t => t.BELONG_ROLE_GROUP_ID).ToList(); GetRoleByRoleGroupStr(orgId, list, roleIds, ref roleGroupList); } if (userGroup.Nav_BelongUserGroups != null && userGroup.Nav_BelongUserGroups.Any()) { var list = userGroup.Nav_BelongUserGroups.Select(t => t.BELONG_USER_GROUP_ID).ToList(); foreach (var s in list) GetRoleByUserGroup(orgId, s, existsUserGroupIds, ref userGroupList, ref roleGroupList, roleIds); } } private void GetUserGroups(List ids, List resultList, List tmpUserGroupList) { if (ids == null || ids.Count <= 0) return; resultList.AddRange(ids); var list = tmpUserGroupList.Where(t => t.Nav_BelongUserGroups.Any(t1 => ids.Contains(t1.BELONG_USER_GROUP_ID))).Select(t => t.ID).ToList(); if (list.Any()) { List tmps = new List(); foreach (var item in list) { if (!resultList.Any(t => t == item)) tmps.Add(item); } if (tmps.Count > 0) GetUserGroups(tmps, resultList, tmpUserGroupList); } } #endregion #region wyw /// /// 获取部门节点下所有人员信息 /// /// /// public List GetDownUser(Guid BaseDepartMentID, string[] UserParts = null) { List listTemp = null; List listDepartMentID = new List(); List listDepartMentIDAll = new List(); var listDep = GetEntities(e => e.ID == BaseDepartMentID, null, new string[] { "Nav_Children" }); if (listDep.Any()) { listTemp = listDep.ToList(); listDepartMentID = listTemp.Select(x => x.ID).ToList(); listDepartMentIDAll = listTemp.Select(x => x.ID).ToList(); } else { return null; } IEnumerable listDeps = null; IEnumerable listTempChil = null; do { listDeps = GetEntities(e => e.PARENT_ID.HasValue && listDepartMentID.Contains(e.PARENT_ID.Value), null, new string[] { "Nav_Children" }); if (listDeps.Any()) { listTemp = listDeps.ToList(); listDepartMentID = listTemp.Select(x => x.ID).ToList(); listDepartMentIDAll.AddRange(listDepartMentID); listTempChil = listDeps.Where(e => e.Nav_Children != null && e.Nav_Children.Count > 0); } else { listTempChil = null; } } while (listTempChil != null && listTempChil.Any()); if (UserParts == null) { UserParts = new string[] { "Nav_Department" }; } return GetEntities(e => listDepartMentIDAll.Contains(e.DEPARTMENT_ID.Value) && e.ENABLE_STATUS == 0 && !e.IS_DELETED, null, UserParts).OrderBy(e => e.Nav_Department.DEPARTMENT_TYPE).ThenByDescending(e => e.APPROVE_ROLE_ID).ToList(); } /// /// 获取组织成员和下属有审批角色的人(负责人、安全员) /// /// /// public List GetUserContentNextHead(Guid DepartMentID) { List listUser = new List(); var userDep = GetEntities(e => e.DEPARTMENT_ID.HasValue && e.DEPARTMENT_ID.Value == DepartMentID && e.ENABLE_STATUS == 0, "Nav_Department", "Nav_Person.Nav_Post"); if (userDep != null && userDep.Any()) listUser = userDep.OrderByDescending(e => e.APPROVE_ROLE_ID).ToList(); else return listUser; var depChilID = GetEntities(e => e.PARENT_ID.HasValue && e.PARENT_ID.Value == DepartMentID).Select(e => e.ID); if (depChilID == null || !depChilID.Any()) return listUser; var listChilUser = GetEntities(e => e.DEPARTMENT_ID.HasValue && depChilID.Contains(e.DEPARTMENT_ID.Value) && e.ENABLE_STATUS == 0 && e.APPROVE_ROLE_ID.HasValue, "Nav_Department", "Nav_Person.Nav_Post"); if (listChilUser == null || !listChilUser.Any()) return listUser; listUser.AddRange(listChilUser.OrderBy(e => e.DEPARTMENT_ID).ToList()); return listUser; } /// /// 获取登陆者的生产单元 /// /// public List GetMineType(string minType = null) { List listResult = new List(); if (minType == null) { minType = APT.Infrastructure.Api.AppContext.CurrentSession.MineType; } try { if (string.IsNullOrEmpty(minType)) { } else if (minType.Contains(",")) { var listMine = minType.Split(",", StringSplitOptions.RemoveEmptyEntries); if (listMine != null && listMine.Any()) { listMine.ForEach(x => listResult.Add(int.Parse(x))); } } else { listResult.Add(int.Parse(minType)); } } catch { } return listResult; } /// /// 获取登陆者的生产单元 /// /// public List GetDepmentMineType() { List listResult = new List(); string minType = APT.Infrastructure.Api.AppContext.CurrentSession.MineType; if (string.IsNullOrEmpty(minType)) { } else if (minType.Contains(",")) { var listMine = minType.Split(",", StringSplitOptions.RemoveEmptyEntries); if (listMine != null && listMine.Any()) { listMine.ForEach(x => listResult.Add(x)); } } else { listResult.Add(minType); } return listResult; } #endregion /// /// 获取特定岗位的人 /// /// /// /// public T_FM_USER GetPostUser(ref string Msg, string postName = "人事专员") { var post = GetEntity(e => e.NAME.Contains(postName)); if (post == null) { Msg = "未找到岗位【" + postName + "】"; return null; } T_FM_USER user = GetEntity(e => e.Nav_Person.POST_ID == post.ID, new string[] { "Nav_Person" }); if (user == null) { Msg = "系统未配置【" + postName + "】岗位人员"; } return user; } /// /// 获取某个(部门)审批角色对应人 /// /// /// /// /// FMDepartmentType 部门=0, 车间=1, 班组=2, 公司=3 /// public T_FM_USER GetRoleUser(ref string Msg, string RoleName, Guid? DEPARTMENT_ID, int? DEPARTMENT_TYPE) { T_FM_USER result = null; var approveRole = GetEntity(e => e.NAME.Contains(RoleName)); if (approveRole != null) { Expression> expression = e => e.APPROVE_ROLE_ID == approveRole.ID; if (DEPARTMENT_ID.HasValue && DEPARTMENT_ID != Guid.Empty) { if (DEPARTMENT_TYPE.HasValue) { again: var dep = GetEntity(e => e.ID == DEPARTMENT_ID.Value, new string[] { "Nav_Parent" }); if (dep == null) { Msg = "获取部门失败"; return result; } else { if (dep.DEPARTMENT_TYPE == DEPARTMENT_TYPE) { DEPARTMENT_ID = dep.ID; } else if (dep.Nav_Parent != null && dep.Nav_Parent.DEPARTMENT_TYPE == DEPARTMENT_TYPE) { DEPARTMENT_ID = dep.PARENT_ID; } else { if (dep.PARENT_ID.HasValue) { DEPARTMENT_ID = dep.PARENT_ID; goto again; } else { Msg = "获取部门失败"; return result; } } } } expression = expression.And(e => e.DEPARTMENT_ID.HasValue && e.DEPARTMENT_ID == DEPARTMENT_ID); } result = GetEntity(expression); } else { Msg = "未找到审批角色【" + RoleName + "】"; } return result; } /// /// 获取部门岗位人员 /// /// /// /// /// 只返回一个人 /// public List GetDepPostUser(ref string Msg, Guid DEPARTMENT_ID, Guid POST_ID, bool IsOnly) { if (DEPARTMENT_ID == Guid.Empty || POST_ID == Guid.Empty) { Msg = "入参有误"; return null; } var listPerson = GetEntities(e => e.DEPARTMENT_ID.HasValue && e.DEPARTMENT_ID.Value == DEPARTMENT_ID && e.POST_ID.HasValue && e.POST_ID.Value == POST_ID); if (listPerson == null || !listPerson.Any()) { Msg = "后勤部门岗位人员信息失败"; } Expression> expression = e => !e.IS_DELETED && e.PERSON_ID.HasValue && e.ENABLE_STATUS == 0; var listPersonID = listPerson.Select(e => e.ID); if (IsOnly || listPersonID.Count() == 1) { Guid personID = listPersonID.ToList()[0]; expression = expression.And(e => e.PERSON_ID.Value == personID); } else { expression = expression.And(e => listPersonID.Contains(e.PERSON_ID.Value)); } return GetEntities(expression).ToList(); } } }