using Azylee.Core.AppUtils.AppConfigUtils.AppConfigInterfaces;
using Azylee.Core.DataUtils.EncryptUtils;
using Azylee.Core.DataUtils.StringUtils;
using Azylee.Core.DbUtils;
using Azylee.Core.DbUtils.DbModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Azylee.Core.AppUtils.AppConfigUtils.AppConfigModels
{
///
/// 数据库配置信息
///
public class AppConfigDbItem : IAppConfigItemModel
{
private string PASSWORD_ENC_SIGN = "ENC:::";
private string PASSWORD_ENC_PWD = "app.db.pwd.20211202";
///
/// 序号
///
public int Number { get; set; }
///
/// 唯一名称
///
public string Name { get; set; }
///
/// 服务器IP地址
///
public string Server { get; set; }
///
/// 服务器端口号
///
public string Port { get; set; }
///
/// 登录用户ID
///
public string UserId { get; set; }
///
/// 登录用户密码
///
public string Password { get; set; }
public void SetPasswordEnc(string value)
{
if (Str.Ok(value) && !value.StartsWith(PASSWORD_ENC_SIGN))
{
Password = PASSWORD_ENC_SIGN + AesTool.Encrypt(value, PASSWORD_ENC_PWD);
}
else
{
Password = value ?? "";
}
}
public string GetPasswordEnc()
{
if (Str.Ok(Password) && Password.StartsWith(PASSWORD_ENC_SIGN))
{
return AesTool.Decrypt(Password.Substring(PASSWORD_ENC_SIGN.Length), PASSWORD_ENC_PWD);
}
else
{
return Password;
}
}
///
/// 数据库类型
///
public string Type { get; set; }
///
/// 默认数据库
///
public string Database { get; set; }
///
/// 扩展连接字符串
///
public string ExtConnectString { get; set; }
///
/// 描述信息
///
public string Desc { get; set; }
///
/// 全参数构造函数
///
///
///
///
///
///
///
///
///
///
///
public AppConfigDbItem(int number, string type, string name, string server, string port, string userid, string password, string database, string extConnectString, string desc)
{
Number = number;
Type = type;
Name = name;
Server = server;
Port = port;
UserId = userid;
SetPasswordEnc(password);
Database = database;
ExtConnectString = extConnectString;
Desc = desc;
}
public DatabaseType DbType()
{
switch (Type.ToLower())
{
case "pg":
case "postgresql": return DatabaseType.PostgreSQL;
case "mysql":
default:
return DatabaseType.Mysql;
}
}
///
/// 连接字符串
///
/// 执行连接库
///
public string ConnectionString(string database = null)
{
if (!Str.Ok(database)) database = Database;
switch (DbType())
{
case DatabaseType.PostgreSQL:
{
return $"Server = {Server}; Port = {(Str.Ok(Port) ? Port : "3306")}; User Id = {UserId}; Password = {GetPasswordEnc()}; Database = {database}; {ExtConnectString}";
}
case DatabaseType.Mysql:
default:
{
return $"server = {Server}; port = {(Str.Ok(Port) ? Port : "3306")}; userid = {UserId}; password = {GetPasswordEnc()}; database = {database}; persistsecurityinfo = True; {ExtConnectString}";
}
}
}
///
/// 表空间配置库
///
///
public string SchemaDatabase()
{
switch (DbType())
{
case DatabaseType.PostgreSQL:
{
return "";
}
case DatabaseType.Mysql:
default:
{
return "information_schema";
}
}
}
///
/// 测试连接查询语句
///
///
public string ValidationQuery()
{
switch (DbType())
{
case DatabaseType.PostgreSQL:
case DatabaseType.Mysql:
default:
{
return "select now()";
}
}
}
///
/// 表空间查询语句
///
///
public string SchemaQuery()
{
switch (DbType())
{
case DatabaseType.PostgreSQL:
return "SELECT datname AS schema_name FROM pg_database";
case DatabaseType.Mysql:
default:
return "SELECT schema_name FROM `SCHEMATA`";
}
}
///
/// 排序序号
///
///
public int GetOrderNumber()
{
return this.Number;
}
///
/// 唯一名称
///
///
public string GetUniqueName()
{
return this.Name;
}
}
}