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