using APT.BaseData.Domain.ApiModel.FM; using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Entities.BD; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Entities.NW; using APT.BaseData.Domain.Entities.PF; using APT.BaseData.Domain.Enums; using APT.Infrastructure.Core; using APT.Utility; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace APT.NW.WebApi.Controllers.Api { [Route("api/NW/EnterpriseRole")] public class EnterpriseRoleController : AuthorizeApiController { [HttpPost, Route("Update")] public JsonActionResult Update([FromBody] T_FM_ORGANIZATION tenant) { return SafeExecute(() => { #region 授权数据 var orgFilter = new BaseFilter(); orgFilter.IgnoreOrgRule = true; var permOPMenu = this.GetEntities(x => x.ENTERPRISE_ID == tenant.ID, orgFilter).ToList();//企业权限 var permPFMenu = this.GetEntities(x => x.ORG_ID == tenant.ID, orgFilter).ToList();//企业菜单 var permPFForm = this.GetEntities(x => x.ORG_ID == tenant.ID, orgFilter).ToList();//企业表单 var deletePermOPMenu = new List(); var deletePermPFMenu = new List(); List dicCheckKeys = new List(); var saveDataPerm = new List(); var deleteDataPerm = new List(); #endregion #region 增加权限 var savePermOPMenu = new List(); var savePermPFMenu = new List(); //var savePermPFForm = new List(); var saveParamItems = new List(); var addParamItems = new List(); var saveParamSchemes = new List(); var addParamSchemes = new List(); var saveParamSchemeDetails = new List(); var addParamSchemeDetails = new List(); var addCodeRules = new List(); var addSyncTasks = new List(); var saveVersions = new List(); List addEnumType = new List(); List addEnum = new List(); List addPicture = new List(); List addDataFrequency = new List(); List addEnumItem = new List(); var saveUser = new List(); var saveRole = new List(); var saveUserBelongRole = new List(); #endregion Dictionary relationMenu = new Dictionary();//id.pid Dictionary newRelationMenu = new Dictionary();//id.newid Dictionary MenuFormRelation = new Dictionary();//id.newid Dictionary newItems = new Dictionary();//id.newid Dictionary newSchemes = new Dictionary();//id.newid Dictionary newSchemeDetails = new Dictionary();//id.newid Dictionary newTablePanels = new Dictionary();//id.newid Dictionary newCodeRules = new Dictionary();//id.newid Dictionary newEditPanels = new Dictionary(); var dicMenu = new Dictionary(); #region OPT信息 var orgs = this.GetEntities(x => x.ENABLE_STATUS == (int)FMEnableStatusEnum.启用, orgFilter); var root = new T_FM_ORGANIZATION(); if (tenant.PARENT_ID == null) { root = orgs.Where(x => x.ID == tenant.ID).FirstOrDefault(); } else { var org = orgs.Where(x => x.ID == tenant.PARENT_ID).FirstOrDefault(); root = selectRoot(orgs, org); } var filter = new BaseFilter(root.ID);//当前企业根企业菜单,表单等 filter.Level = -1; filter.IsParentData = true; #region 表单配置信息 //var optForms = this.GetEntities(x => x.ORG_ID == filter.OrgId, filter); var optMenusTree = this.GetTreeOrderEntities(x => x.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && x.ORG_ID == filter.OrgId, filter); var optMenus = this.GetEntities(x => x.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && x.ORG_ID == filter.OrgId, filter); List srcParamItems = null; List srcParamSchemes = null; List srcParamSchemeDetails = null; List srcVersionManages = null; List srcCodeRules = null; List srcSyncTasks = null; List srcEnumType = null; List srcEnum = null; List srcPicture = null; List srcDataFrequency = null; List srcEnumItem = null; srcParamItems = this.GetEntities(null, filter).ToList(); srcParamSchemes = this.GetEntities(null, filter).ToList(); srcParamSchemeDetails = this.GetEntities(null, filter).ToList(); srcVersionManages = this.GetEntities(null, filter).ToList(); srcCodeRules = this.GetEntities(null, filter).ToList(); srcSyncTasks = this.GetEntities(null, filter).ToList(); srcEnumType = this.GetEntities(null, filter).ToList(); srcEnum = this.GetEntities(null, filter).ToList(); srcPicture = this.GetEntities(null, filter).ToList(); srcDataFrequency = this.GetEntities(null, filter).ToList(); srcEnumItem = this.GetEntities(null, filter).ToList(); #endregion #endregion List existForm = new List(); List existTable = new List(); List existPermForm = new List(); if (tenant.CheckKeys.Count > 0) { var tenantFilter = new BaseFilter(tenant.ID);//当前企业 var perOPMenu = this.GetEntities(x => x.ENTERPRISE_ID == tenant.ID, orgFilter); var tenantMenus = this.GetEntities(x => x.ORG_ID == tenantFilter.OrgId, tenantFilter); List tenantParamItems = null; List tenantParamSchemes = null; List tenantParamSchemeDetails = null; List tenantVersionManages = null; List tenantCodeRules = null; List tenantSyncTasks = null; List tenantEnumType = null;//枚举类别 List tenantEnum = null;//枚举管理 List tenantEnumItem = null; List tenantPicture = null;//图片管理 List tenantDataFrequency = null;//数据采集频率 tenantParamItems = this.GetEntities(null, tenantFilter).ToList(); tenantParamSchemes = this.GetEntities(null, tenantFilter).ToList(); tenantParamSchemeDetails = this.GetEntities(null, tenantFilter).ToList(); tenantVersionManages = this.GetEntities(null, tenantFilter).ToList(); tenantCodeRules = this.GetEntities(null, tenantFilter).ToList(); tenantSyncTasks = this.GetEntities(null, tenantFilter).ToList(); tenantEnumType = this.GetEntities(null, tenantFilter).ToList(); tenantEnum = this.GetEntities(null, tenantFilter).ToList(); tenantEnumItem = this.GetEntities(null, tenantFilter).ToList(); tenantPicture = this.GetEntities(null, tenantFilter).ToList(); tenantDataFrequency = this.GetEntities(null, tenantFilter).ToList(); #region 系统参数模板 if (!tenantParamItems.Any(x => x.ORG_ID == tenant.ID) && !tenantParamSchemes.Any(x => x.ORG_ID == tenant.ID) && !tenantParamSchemeDetails.Any(x => x.SRC_ID == tenant.ID)) { foreach (var item in srcParamItems) { T_PF_PARAM_ITEM parmItem = item; var newItemID = Guid.NewGuid(); var oldItenID = parmItem.ID; parmItem.SRC_ID = parmItem.ID; parmItem.ID = newItemID; parmItem.ORG_ID = tenant.ID; newItems.Add(oldItenID, newItemID); addParamItems.Add(parmItem); } foreach (var item in srcParamSchemes) { T_PF_PARAM_SCHEME paramScheme = item; var newSchemesID = Guid.NewGuid(); var oldSchemeID = paramScheme.ID; paramScheme.SRC_ID = paramScheme.ID; paramScheme.ID = newSchemesID; paramScheme.ORG_ID = tenant.ID; newSchemes.Add(oldSchemeID, newSchemesID); addParamSchemes.Add(paramScheme); } foreach (var item in srcParamSchemeDetails) { T_PF_PARAM_SCHEME_DETAIL paramSchemeDetail = item; var newSchemeDetailID = Guid.NewGuid(); var oldSchemeDetailID = paramSchemeDetail.ID; var scheneId = newSchemes[item.PARAM_SCHEME_ID]; var ItemId = newItems[item.PARAM_ITEM_ID]; paramSchemeDetail.SRC_ID = paramSchemeDetail.ID; paramSchemeDetail.ID = newSchemeDetailID; paramSchemeDetail.ORG_ID = tenant.ID; paramSchemeDetail.PARAM_SCHEME_ID = scheneId; paramSchemeDetail.PARAM_ITEM_ID = ItemId; newSchemeDetails.Add(oldSchemeDetailID, newSchemeDetailID); addParamSchemeDetails.Add(paramSchemeDetail); } } #endregion #region 编码规则表 if (!tenantCodeRules.Any(x => x.ORG_ID == tenant.ID)) { foreach (var item in srcCodeRules) { T_PF_CODE_RULE codeRule = item; var newCodeRuleID = Guid.NewGuid(); var oldCodeRuleID = item.ID; codeRule.SRC_ID = codeRule.ID; codeRule.ID = newCodeRuleID; codeRule.ORG_ID = tenant.ID; newCodeRules.Add(oldCodeRuleID, newCodeRuleID); addCodeRules.Add(codeRule); } } #endregion #region T_FM_SYNC_TASK if (!tenantSyncTasks.Any(x => x.ORG_ID == tenant.ID)) { foreach (var item in srcSyncTasks) { T_FM_SYNC_TASK syncTask = item; var newSyncTaskID = Guid.NewGuid(); var oldCodeRuleID = item.ID; syncTask.SRC_ID = syncTask.ID; syncTask.ID = newSyncTaskID; syncTask.ORG_ID = tenant.ID; addSyncTasks.Add(syncTask);//添加到对应租户 } } #endregion #region T_PF_VERSION_MANAGE 版本 if (!tenantVersionManages.Any(x => x.ORG_ID == tenant.ID)) { foreach (var item in srcVersionManages) { T_PF_VERSION_MANAGE version = item; var newCodeRuleID = Guid.NewGuid(); //var oldCodeRuleID = item.ID; version.ID = newCodeRuleID; version.ORG_ID = tenant.ID; //newCodeRules.Add(oldCodeRuleID, newCodeRuleID); saveVersions.Add(version);//添加到对应租户 } } #endregion #region 基础参数下发 Dictionary dicEnumType = new Dictionary(); Dictionary dicEnum = new Dictionary(); Dictionary dicEnumItem = new Dictionary(); Dictionary dicEnergyType = new Dictionary(); Dictionary dicReductionFactor = new Dictionary(); Dictionary dicPicture = new Dictionary(); if (!tenantEnumType.Any(x => x.ORG_ID == tenant.ID))//枚举类别(枚举管理) { foreach (var item in srcEnumType) { T_FM_ENUM_TYPE enumType = item; var newID = Guid.NewGuid(); dicEnumType.Add(enumType.ID, newID); enumType.ID = newID; enumType.ORG_ID = tenant.ID; addEnumType.Add(enumType);//添加到对应租户 } } if (!tenantEnum.Any(x => x.ORG_ID == tenant.ID))//枚举管理 { foreach (var item in srcEnum) { T_FM_ENUM enumInfo = item; var newID = Guid.NewGuid(); dicEnum.Add(enumInfo.ID, newID); enumInfo.ID = newID; enumInfo.ORG_ID = tenant.ID; enumInfo.ENUM_TYPE_ID = dicEnumType[enumInfo.ENUM_TYPE_ID]; addEnum.Add(enumInfo);//添加到对应租户 } } if (!tenantEnumItem.Any(x => x.ORG_ID == tenant.ID))//枚举管理 { foreach (var item in srcEnumItem) { T_FM_ENUM_ITEM enumItem = item; var newID = Guid.NewGuid(); dicEnumItem.Add(enumItem.ID, newID); enumItem.ID = newID; enumItem.ORG_ID = tenant.ID; enumItem.ENUM_ID = dicEnum[enumItem.ENUM_ID]; addEnumItem.Add(enumItem);//添加到对应租户 } } if (!tenantPicture.Any(x => x.ORG_ID == tenant.ID))//图片资源 { foreach (var item in srcPicture) { T_BD_PICTURE picture = item; var newID = Guid.NewGuid(); dicPicture.Add(picture.ID, newID); picture.ID = newID; picture.ORG_ID = tenant.ID; if (picture.ENUM_ID != null) { picture.ENUM_ID = dicEnum[(Guid)picture.ENUM_ID]; } if (picture.ENUM_ITEM_ID != null) { picture.ENUM_ITEM_ID = dicEnumItem[(Guid)picture.ENUM_ITEM_ID]; } addPicture.Add(picture);//添加到对应租户 } } if (!tenantDataFrequency.Any(x => x.ORG_ID == tenant.ID))//数据采集频率 { foreach (var item in srcDataFrequency) { T_PF_DATA_FREQUENCY dataFrequency = item; var newCodeRuleID = Guid.NewGuid(); dataFrequency.ID = newCodeRuleID; dataFrequency.ORG_ID = tenant.ID; addDataFrequency.Add(dataFrequency);//添加到对应租户 } } #endregion #region 添加租户管理员 var tenantUser = this.GetEntities(x => x.ORG_ID == tenantFilter.OrgId, tenantFilter); var tenantRole = this.GetEntities(x => x.ORG_ID == tenantFilter.OrgId, tenantFilter); var tenantUserBelongRole = this.GetEntities(x => x.ORG_ID == tenantFilter.OrgId, tenantFilter); if (!tenantUser.Any(x => x.ORG_ID == tenant.ID) && !tenantRole.Any(x => x.ORG_ID == tenant.ID) && !tenantUserBelongRole.Any(x => x.ORG_ID == tenant.ID)) { T_FM_USER user = new T_FM_USER(); user.ID = Guid.NewGuid(); user.IS_DELETED = false; user.ORG_ID = tenant.ID; user.NAME = "管理员"; user.CODE = "admin"; user.PASSWORD = "E10ADC3949BA59ABBE56E057F20F883E"; user.ENTITY_ORG_TPYE = 0; user.FLOW_STATUS = 0; user.FLOW_SEND_STATUS = 0; user.ENABLE_STATUS = 0; T_FM_ROLE role = new T_FM_ROLE(); role.ID = Guid.NewGuid(); role.IS_DELETED = false; role.ORG_ID = tenant.ID; role.NAME = "管理员"; role.CODE = "admin"; role.ENTITY_ORG_TPYE = 0; role.FLOW_STATUS = 0; role.FLOW_SEND_STATUS = 0; role.ENABLE_STATUS = 0; role.ROLE_TYPE = 99; role.PLATFORM_TYPE = 0; T_FM_USER_BELONG_ROLE userBelongRole = new T_FM_USER_BELONG_ROLE(); userBelongRole.ID = Guid.NewGuid(); userBelongRole.IS_DELETED = false; userBelongRole.ORG_ID = tenant.ID; userBelongRole.ENTITY_ORG_TPYE = 0; userBelongRole.FLOW_STATUS = 0; userBelongRole.FLOW_SEND_STATUS = 0; userBelongRole.USER_ID = user.ID; userBelongRole.BELONG_ROLE_ID = role.ID; saveUser.Add(user); saveRole.Add(role); saveUserBelongRole.Add(userBelongRole); } #endregion foreach (var CheckKey in tenant.CheckKeys) { var checkMenu = optMenusTree.FirstOrDefault(x => x.Node.ID == new Guid(CheckKey)); if (checkMenu == null) { foreach (var item in optMenusTree) { checkMenu = selectNode(item, CheckKey); if (checkMenu != null) break; } } if (checkMenu != null && checkMenu.Node.IS_PERMISSION_SUB == (int)FMSubPermEnum.子企业可见) { if (checkMenu.IsLeaf && checkMenu.Node.MENU_FORM_ID != null)//叶子节点 { dicMenu.Add(new Guid(CheckKey), checkMenu.Node.MENU_FORM_ID); // T_PF_FORM t_PF_FORM = this.GetEntities(x=>x.ORG_ID==filter.OrgId, filter).FirstOrDefault(x => x.ID == checkMenu.Node.MENU_FORM_ID);//OPT T_PF_MENU t_PF_MENU = this.GetEntities(x => x.ORG_ID == filter.OrgId, filter).Where(x => x.ID == new Guid(CheckKey)).FirstOrDefault(); if (tenantMenus.Any(x => x.SRC_ID == new Guid(CheckKey)))//菜单存在 { #region 生成菜单 var tenantMenu = tenantMenus.FirstOrDefault(x => x.SRC_ID == new Guid(CheckKey)); if (!perOPMenu.Any(x => x.MENU_ID == new Guid(CheckKey)))//未授权 { savePermOPMenu.Add(new T_NW_ROLE_MENU() { ENTERPRISE_ID = tenant.ID, MENU_ID = new Guid(CheckKey), ENTERPRISE_MENU_ID = tenantMenu.ID, ORG_ID = tenant.ID });//菜单授权 } t_PF_MENU.SRC_ID = new Guid(CheckKey); t_PF_MENU.ID = tenantMenu.ID; t_PF_MENU.ORG_ID = tenant.ID; t_PF_MENU.IS_PERMISSION_MENU = true; relationMenu.Add(checkMenu.Node.ID.ToString(), checkMenu.Node.PARENT_ID); newRelationMenu.Add(checkMenu.Node.ID.ToString(), tenantMenu.ID.ToString()); #endregion } else { #region 菜单授权 var newMenuID = Guid.NewGuid(); savePermOPMenu.Add(new T_NW_ROLE_MENU() { ENTERPRISE_ID = tenant.ID, MENU_ID = new Guid(CheckKey), ENTERPRISE_MENU_ID = newMenuID, ORG_ID = tenant.ID });//菜单授权 #endregion #region 生成菜单 t_PF_MENU.SRC_ID = checkMenu.Node.ID; t_PF_MENU.ID = newMenuID; t_PF_MENU.ORG_ID = tenant.ID; t_PF_MENU.IS_PERMISSION_MENU = true; relationMenu.Add(checkMenu.Node.ID.ToString(), checkMenu.Node.PARENT_ID); newRelationMenu.Add(checkMenu.Node.ID.ToString(), newMenuID.ToString()); #endregion } //savePermPFForm.Add(t_PF_FORM);//添加表单到对应租户 savePermPFMenu.Add(t_PF_MENU);//添加菜单到对应租户 } else { dicMenu.Add(new Guid(CheckKey), null); T_PF_MENU t_PF_MENU = this.GetEntities(x => x.ORG_ID == filter.OrgId, filter).Where(x => x.ID == new Guid(CheckKey)).FirstOrDefault(); if (tenantMenus.Any(x => x.SRC_ID == new Guid(CheckKey)))//菜单存在 { var tenantMenu = tenantMenus.FirstOrDefault(x => x.SRC_ID == new Guid(CheckKey)); if (!perOPMenu.Any(x => x.MENU_ID == new Guid(CheckKey)))//未授权 { savePermOPMenu.Add(new T_NW_ROLE_MENU() { ENTERPRISE_ID = tenant.ID, MENU_ID = new Guid(CheckKey), ENTERPRISE_MENU_ID = tenantMenu.ID, ORG_ID = tenant.ID });//菜单授权 } t_PF_MENU.SRC_ID = checkMenu.Node.ID; t_PF_MENU.ID = tenantMenu.ID; t_PF_MENU.ORG_ID = tenantMenu.ORG_ID; t_PF_MENU.IS_PERMISSION_MENU = true; relationMenu.Add(checkMenu.Node.ID.ToString(), checkMenu.Node.PARENT_ID); newRelationMenu.Add(checkMenu.Node.ID.ToString(), tenantMenu.ID.ToString()); } else { var newMenuID = Guid.NewGuid(); savePermOPMenu.Add(new T_NW_ROLE_MENU() { ENTERPRISE_ID = tenant.ID, MENU_ID = new Guid(CheckKey), ENTERPRISE_MENU_ID = newMenuID, ORG_ID = tenant.ID });//菜单授权 t_PF_MENU.SRC_ID = checkMenu.Node.ID; t_PF_MENU.ID = newMenuID; t_PF_MENU.ORG_ID = tenant.ID; t_PF_MENU.IS_PERMISSION_MENU = true; relationMenu.Add(checkMenu.Node.ID.ToString(), checkMenu.Node.PARENT_ID); newRelationMenu.Add(checkMenu.Node.ID.ToString(), newMenuID.ToString()); } savePermPFMenu.Add(t_PF_MENU);//添加菜单到对应租户 } } } var deleteFilter = new BaseFilter(tenant.ID);//OPT创建的菜单,表单等 deleteFilter.Level = -1; deleteFilter.IsParentData = true; var tenantMenusTree = this.GetTreeOrderEntities(x => x.ENABLE_STATUS == (int)FMEnableStatusEnum.启用, deleteFilter); foreach (var item in permOPMenu) { if (!dicMenu.Keys.Contains(item.MENU_ID)) { var deleteMenu = tenantMenusTree.FirstOrDefault(x => x.Node.ID == item.ENTERPRISE_MENU_ID); if (deleteMenu == null) { foreach (var tenantMenu in tenantMenusTree) { deleteMenu = selectNode(tenantMenu, item.ENTERPRISE_MENU_ID.ToString()); if (deleteMenu != null) break; } } if (deleteMenu != null) { var cancelMenu = this.GetEntities(x => x.ID == deleteMenu.Node.ID, orgFilter).FirstOrDefault(); cancelMenu.IS_PERMISSION_MENU = false; deletePermPFMenu.Add(cancelMenu); deletePermOPMenu.Add(item.ID); } } } #region 菜单节点关系 foreach (var item in relationMenu) { if (item.Value != null) { var newMenuID = newRelationMenu[item.Key];//需要更新父ID savePermPFMenu.Where(x => x.ID == new Guid(newMenuID)).FirstOrDefault().PARENT_ID = new Guid(newRelationMenu[item.Value.ToString()]); } } #endregion #region 数据权限 var permissionOrg = this.GetEntities(x => x.ENTERPRISE_ID == tenant.ID, orgFilter).ToList(); if (tenant.OrgCheckKeys.Count > 0) { foreach (var item in tenant.OrgCheckKeys) { dicCheckKeys.Add(new Guid(item)); if (!permissionOrg.Any(x => x.PREM_ENTERPRISE_ID == new Guid(item))) { saveDataPerm.Add(new T_NW_ROLE_DATA_PERM() { ORG_ID = tenant.ORG_ID, PREM_ENTERPRISE_ID = new Guid(item), ENTERPRISE_ID = tenant.ID }); } } foreach (var item in permissionOrg) { if (!dicCheckKeys.Contains(item.PREM_ENTERPRISE_ID)) { deleteDataPerm.Add(item.ID); } } } else { foreach (var item in permissionOrg) { deleteDataPerm.Add(item.ID); } } #endregion UnifiedCommit(() => { tenant.CheckKeys = null; tenant.OrgCheckKeys = null; this.UpdateEntity(tenant); if (deletePermOPMenu.Count > 0) this.BantchDeleteEntityNoCommit(deletePermOPMenu); if (deletePermPFMenu != null && deletePermPFMenu.Any()) this.BantchSaveEntityNoCommit(deletePermPFMenu); if (savePermOPMenu != null && savePermOPMenu.Any()) this.BantchSaveEntityNoCommit(savePermOPMenu); if (savePermPFMenu != null && savePermPFMenu.Any()) this.BantchSaveEntityNoCommit(savePermPFMenu); if (saveUser != null && saveUser.Any()) this.BantchSaveEntityNoCommit(saveUser); if (saveRole != null && saveRole.Any()) this.BantchSaveEntityNoCommit(saveRole); if (saveUserBelongRole != null && saveUserBelongRole.Any()) this.BantchSaveEntityNoCommit(saveUserBelongRole); if (addCodeRules != null && addCodeRules.Any()) this.BantchSaveEntityNoCommit(addCodeRules); if (addSyncTasks != null && addSyncTasks.Any()) this.BantchSaveEntityNoCommit(addSyncTasks); if (saveVersions != null && saveVersions.Any()) this.BantchSaveEntityNoCommit(saveVersions); if (addEnumType != null && addEnumType.Any()) this.BantchSaveEntityNoCommit(addEnumType); if (addEnum != null && addEnum.Any()) this.BantchSaveEntityNoCommit(addEnum); if (addEnumItem != null && addEnumItem.Any()) this.BantchSaveEntityNoCommit(addEnumItem); if (addPicture != null && addPicture.Any()) this.BantchSaveEntityNoCommit(addPicture); if (addDataFrequency != null && addDataFrequency.Any()) this.BantchSaveEntityNoCommit(addDataFrequency); if (saveDataPerm != null && saveDataPerm.Any()) this.BantchSaveEntityNoCommit(saveDataPerm); if (deleteDataPerm != null && deleteDataPerm.Any()) this.BantchDeleteEntityNoCommit(deleteDataPerm); }); } else { if (permOPMenu.Count > 0) { deletePermOPMenu.AddRange(permOPMenu.Select(x => x.ID).ToList()); } if (tenant.PARENT_ID != null) { if (permPFMenu.Count > 0) { foreach (var item in permPFMenu) { item.IS_PERMISSION_MENU = false; deletePermPFMenu.Add(item); } } } #region 数据权限 var permissionOrg = this.GetEntities(x => x.ENTERPRISE_ID == tenant.ID, orgFilter).ToList(); if (tenant.OrgCheckKeys.Count > 0) { foreach (var item in tenant.OrgCheckKeys) { dicCheckKeys.Add(new Guid(item)); if (!permissionOrg.Any(x => x.PREM_ENTERPRISE_ID == new Guid(item))) { saveDataPerm.Add(new T_NW_ROLE_DATA_PERM() { ORG_ID = tenant.ORG_ID, PREM_ENTERPRISE_ID = new Guid(item), ENTERPRISE_ID = tenant.ID }); } } foreach (var item in permissionOrg) { if (!dicCheckKeys.Contains(item.PREM_ENTERPRISE_ID)) { deleteDataPerm.Add(item.ID); } } } else { foreach (var item in permissionOrg) { deleteDataPerm.Add(item.ID); } } #endregion UnifiedCommit(() => { tenant.CheckKeys = null; tenant.OrgCheckKeys = null; this.UpdateEntityNoCommit(tenant); if (deletePermOPMenu.Count > 0) this.BantchDeleteEntityNoCommit(deletePermOPMenu); if (deletePermPFMenu != null && deletePermPFMenu.Any()) this.BantchSaveEntityNoCommit(deletePermPFMenu); if (saveDataPerm != null && saveDataPerm.Any()) this.BantchSaveEntityNoCommit(saveDataPerm); if (deleteDataPerm != null && deleteDataPerm.Any()) this.BantchDeleteEntityNoCommit(deleteDataPerm); }); } return true; }); } public T_FM_ORGANIZATION selectRoot(IEnumerable orgs, T_FM_ORGANIZATION org) { if (org.PARENT_ID == null) { return org; } else { T_FM_ORGANIZATION checkRoot = null; T_FM_ORGANIZATION pOrg = orgs.Where(x => x.ID == org.PARENT_ID).FirstOrDefault(); checkRoot = selectRoot(orgs, pOrg); if (checkRoot != null) { return checkRoot; } return checkRoot; } } public TreeNode selectNode(TreeNode treeNode, string checkKey) { if (treeNode.Node.ID == new Guid(checkKey)) { return treeNode; } else { TreeNode checkNode = null; foreach (var item in treeNode.Children) { checkNode = selectNode(item, checkKey); if (checkNode != null) { return checkNode; } } return checkNode; } } /// /// 树形授权 /// /// /// [HttpPost, Route("GetTreePermissionForms")] public JsonActionResult GetTreePermissionForms([FromBody] KeywordPageFilter pageFilter) { return SafeExecute(() => { List result = new List();//最终返回树结果 var orgfilter = new BaseFilter(); orgfilter.IgnoreOrgRule = true; var org = this.GetEntities(x => x.ID == new Guid(pageFilter.Keyword), orgfilter).FirstOrDefault(); bool isRoot = org.PARENT_ID == null ? true : false; var filter = new BaseFilter(pageFilter.OrgId);//OPT OrgId filter.Level = -1; filter.IsParentData = true; string tenantId = pageFilter.Keyword;//租户ID List permissionMenu = null; var menuTree = this.GetTreeOrderEntities(x => x.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && x.PLATFORM_CATEGORY == 0, filter); if (!string.IsNullOrEmpty(tenantId)) { permissionMenu = this.GetEntities(x => x.ENTERPRISE_ID == new Guid(tenantId), orgfilter).ToList(); } List formInfos = new List(); List orgInfos = new List(); List checks = new List(); List checkLastKey = new List(); List orgChecks = new List(); List orgCheckLastKey = new List(); foreach (var menu in menuTree) { AddChildren(menu, permissionMenu, formInfos); } result = RolePermissionTreeModel.GetRolePermissionTree(formInfos); result = result[0].children; foreach (var item in result) { SelectCheck(item, checks, checkLastKey); } #region 数据授权 var orgFilter = new BaseFilter(); orgFilter.IgnoreOrgRule = true; var orgs = this.GetTreeOrderEntities(x => x.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 && x.ORG_ID == pageFilter.OrgId, orgFilter); var permissionOrg = this.GetEntities(x => x.ENTERPRISE_ID == new Guid(tenantId), filter).ToList(); foreach (var item in orgs) { AddOrgChildren(item, permissionOrg, orgInfos); } List orgResult = new List();//最终返回树结果 orgResult = RolePermissionTreeModel.GetRolePermissionTree(orgInfos); orgResult = orgResult[0].children; foreach (var item in orgResult) { SelectCheck(item, orgChecks, orgCheckLastKey); } #endregion var rlt = new RolePermissionResul() { checks = checks, checkLastKey = checkLastKey, rolePermissionTreeModels = result, isRoot = isRoot, orgChecks = orgChecks, orgCheckLastKey = orgCheckLastKey, orgRolePermissionTreeModels = orgResult }; return rlt; }); } public void AddChildren(TreeNode treeNode, IEnumerable permissionMenu, List formInfos) { var permission = false; if (!treeNode.Node.IS_LEAF) { permission = permissionMenu == null ? false : permissionMenu.Any(x => x.MENU_ID == treeNode.Node.ID); formInfos.Add(new FormInfo() { Code = treeNode.Node.ID.ToString(), Title = treeNode.Node.NAME, ParentCode = treeNode.Node.PARENT_ID.ToString(), IsCheck = permission }); foreach (var item in treeNode.Children) { AddChildren(item, permissionMenu, formInfos); } } else { permission = permissionMenu == null ? false : permissionMenu.Any(x => x.MENU_ID == treeNode.Node.ID); formInfos.Add(new FormInfo() { Code = treeNode.Node.ID.ToString(), Title = treeNode.Node.NAME, ParentCode = treeNode.Node.PARENT_ID.ToString(), IsCheck = permission }); } } public void AddOrgChildren(TreeNode treeNode, IEnumerable permissionOrg, List orgInfos) { var permission = false; if (!treeNode.Node.IS_LEAF) { permission = permissionOrg == null ? false : permissionOrg.Any(x => x.PREM_ENTERPRISE_ID == treeNode.Node.ID); orgInfos.Add(new FormInfo() { Code = treeNode.Node.ID.ToString(), Title = treeNode.Node.NAME, ParentCode = treeNode.Node.PARENT_ID.ToString(), IsCheck = permission }); foreach (var item in treeNode.Children) { AddOrgChildren(item, permissionOrg, orgInfos); } } else { permission = permissionOrg == null ? false : permissionOrg.Any(x => x.PREM_ENTERPRISE_ID == treeNode.Node.ID); orgInfos.Add(new FormInfo() { Code = treeNode.Node.ID.ToString(), Title = treeNode.Node.NAME, ParentCode = treeNode.Node.PARENT_ID.ToString(), IsCheck = permission }); } } public void SelectCheck(RolePermissionTreeModel RolePermissions, List checks, List checkLastKey) { if (RolePermissions.IsCheck) { checks.Add(RolePermissions.key); } if (RolePermissions.children.Count == 0 && RolePermissions.IsCheck) { checkLastKey.Add(RolePermissions.key); } if (RolePermissions.children.Count > 0) { foreach (var item in RolePermissions.children) { SelectCheck(item, checks, checkLastKey); } } } } }