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