using APT.BaseData.Domain.ApiModel.Platform; using APT.BaseData.Domain.Entities.OP; using APT.BaseData.Domain.Enums; using APT.BaseData.Domain.Enums.PF; using APT.Infrastructure.Api.Redis; using APT.Infrastructure.Core; using APT.Migrations; using APT.Utility; using Microsoft.AspNetCore.Mvc; using System.Collections; using System.Collections.Generic; using System.Linq; using APT.Infrastructure.Api; using System; using APT.BaseData.Domain.Enums.OP; namespace APT.BD.WebApi.Controllers.Api { /// /// /// [Route("api/OP/TenantInfo")] public partial class TenantInfoController : CommonApiController { /// /// 根据域名获取组织数据 /// /// /// [HttpPost, Route("GetOrgList")] public JsonActionResult GetOrgList([FromBody] KeywordFilter filter) { return SafeExecute(() => { dynamic ret = new System.Dynamic.ExpandoObject(); if (!string.IsNullOrEmpty(filter.Parameter10)) { var baseFilter = new BaseFilter(); baseFilter.IgnoreOrgRule = true; // baseFilter.SelectField = new string[] { "TENANT_ID", "Nav_Tenant.Nav_TenantDB.CODE", //"Nav_Tenant.Nav_TenantDB.DB_CONN", "Nav_Tenant.Nav_TenantDB.DB_CONN_WAN" }; var tenantDomain = this.GetEntity(i => i.DOMAIN_NAME == filter.Parameter10, "Nav_Tenant.Nav_TenantDB"); if (tenantDomain == null) ThrowError("020027", filter.Parameter10); if (tenantDomain.Nav_Tenant == null) ThrowError("020026"); string conn = string.Empty; T_OP_TENANT_DB_CONN srcDB = tenantDomain.Nav_Tenant.Nav_TenantDB; if (srcDB != null) { conn = srcDB.DB_CONN; if (ConfigurationManager.AppSettings["Env"] == ((int)EnvType.外网).ToString()) { conn = srcDB.DB_CONN_WAN; } } if (int.Parse(filter.Parameter11) == (int)PFPlatformTypeEnum.应用平台) { IEnumerable> orgTree = null; List reslist; baseFilter.SelectField = new string[] { "CODE", "TENANT_CODE", "NAME", "PARENT_ID", "ORG_ID", "ID" }; using (var context = new MigrationContext(conn)) { orgTree = context.GetTreeOrderEntities(x => x.ORG_ID == tenantDomain.TENANT_ID, baseFilter, null, out reslist); } ret.Data = orgTree.Where(x => x.Node.ID == tenantDomain.TENANT_ID); // ret.Data = this.GetTreeOrderEntities(i => i.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 //&& i.ID == tenant.ID, filter); } else { //企业平台 ---- var orgTree = this.GetTreeOrderEntities(null, baseFilter); ret.Data = orgTree.Where(x => x.Node.ID == tenantDomain.TENANT_ID); // ret.Data = this.GetOrderEntities(i => i.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 //&& i.ID == tenant.ID, filter); //递归获取子集 //ret.Data = this.GetTreeOrderEntities(i => i.ENABLE_STATUS == (int)FMEnableStatusEnum.启用 //, filter).Where(i=>i.Node.ID==tenant.ID); } ret.Tenant = tenantDomain.Nav_Tenant.CODE; } return ret; }); } /// /// 根据域名获取组织数据 /// /// /// [HttpPost, Route("Entities")] public JsonActionResult> Entities([FromBody] KeywordFilter filter) { return SafeExecute>(() => { return this.GetEntitiesByRedis(i => i.ENABLE_STATUS == (int)FMEnableStatusEnum.启用, filter); }); } /// /// 根据租户名称获取数据库地址 /// /// 租户编码 /// Des Key /// Redis key /// [HttpGet, Route("GetDbConn")] public JsonActionResult GetDbConn(string code, string deskey, string tenantKey) { return SafeExecute(() => { var baseFilter = new BaseFilter(); //baseFilter.SelectField = new string[] { "Nav_TenantDB.DB_CONN", "ID" }; baseFilter.IgnoreOrgRule = true; var ret = string.Empty; // var tenant = this.GetEntityByRedis(code, Guid.Empty); var tenant = this.GetEntity(t=>t.CODE==code); if (tenant != null && !string.IsNullOrEmpty(deskey)) { var tenantDb = this.GetEntity(tenant.DB_CONN_ID.ToString()); ret = EncryptHelper.AesEncrypt(tenantDb?.DB_CONN, deskey); if (ConfigurationManager.AppSettings["Env"] == ((int)EnvType.外网).ToString()) { ret = EncryptHelper.AesEncrypt(tenantDb?.DB_CONN_WAN, deskey); } var tenantConnKey = tenantKey + code + "_" + ConfigurationManager.AppSettings["Env"]; CsRedisManager.StringSetAsync(tenantConnKey, ret).Wait(); } return ret; }); } /// /// 获取所有的数据库连接 /// /// [HttpGet, Route("GetAllDbConn")] public JsonActionResult> GetAllDbConn(string deskey) { return SafeExecute>(() => { var baseFilter = new BaseFilter(); baseFilter.SelectField = new string[] { "DB_CONN", "DB_CONN_WAN" }; baseFilter.IgnoreOrgRule = true; var ret = new List(); var dbs = this.GetEntities(null, baseFilter); if (dbs != null && dbs.Any()) { ret = dbs.Select(i => EncryptHelper.AesEncrypt(i.DB_CONN, deskey)).ToList(); if (ConfigurationManager.AppSettings["Env"] == ((int)EnvType.外网).ToString()) { ret = dbs.Select(i => EncryptHelper.AesEncrypt(i.DB_CONN_WAN, deskey)).ToList(); } var tenantConnKey = ConfigurationManager.AppSettings["TenantConnKey"] + "_All_" + ConfigurationManager.AppSettings["Env"]; CsRedisManager.StringSetAsync(tenantConnKey, ret).Wait(); } return ret; }); } } }