AppConfigDbItem.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. using Azylee.Core.AppUtils.AppConfigUtils.AppConfigInterfaces;
  2. using Azylee.Core.DataUtils.EncryptUtils;
  3. using Azylee.Core.DataUtils.StringUtils;
  4. using Azylee.Core.DbUtils;
  5. using Azylee.Core.DbUtils.DbModels;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. namespace Azylee.Core.AppUtils.AppConfigUtils.AppConfigModels
  11. {
  12. /// <summary>
  13. /// 数据库配置信息
  14. /// </summary>
  15. public class AppConfigDbItem : IAppConfigItemModel
  16. {
  17. private string PASSWORD_ENC_SIGN = "ENC:::";
  18. private string PASSWORD_ENC_PWD = "app.db.pwd.20211202";
  19. /// <summary>
  20. /// 序号
  21. /// </summary>
  22. public int Number { get; set; }
  23. /// <summary>
  24. /// 唯一名称
  25. /// </summary>
  26. public string Name { get; set; }
  27. /// <summary>
  28. /// 服务器IP地址
  29. /// </summary>
  30. public string Server { get; set; }
  31. /// <summary>
  32. /// 服务器端口号
  33. /// </summary>
  34. public string Port { get; set; }
  35. /// <summary>
  36. /// 登录用户ID
  37. /// </summary>
  38. public string UserId { get; set; }
  39. /// <summary>
  40. /// 登录用户密码
  41. /// </summary>
  42. public string Password { get; set; }
  43. public void SetPasswordEnc(string value)
  44. {
  45. if (Str.Ok(value) && !value.StartsWith(PASSWORD_ENC_SIGN))
  46. {
  47. Password = PASSWORD_ENC_SIGN + AesTool.Encrypt(value, PASSWORD_ENC_PWD);
  48. }
  49. else
  50. {
  51. Password = value ?? "";
  52. }
  53. }
  54. public string GetPasswordEnc()
  55. {
  56. if (Str.Ok(Password) && Password.StartsWith(PASSWORD_ENC_SIGN))
  57. {
  58. return AesTool.Decrypt(Password.Substring(PASSWORD_ENC_SIGN.Length), PASSWORD_ENC_PWD);
  59. }
  60. else
  61. {
  62. return Password;
  63. }
  64. }
  65. /// <summary>
  66. /// 数据库类型
  67. /// </summary>
  68. public string Type { get; set; }
  69. /// <summary>
  70. /// 默认数据库
  71. /// </summary>
  72. public string Database { get; set; }
  73. /// <summary>
  74. /// 扩展连接字符串
  75. /// </summary>
  76. public string ExtConnectString { get; set; }
  77. /// <summary>
  78. /// 描述信息
  79. /// </summary>
  80. public string Desc { get; set; }
  81. /// <summary>
  82. /// 全参数构造函数
  83. /// </summary>
  84. /// <param name="number"></param>
  85. /// <param name="type"></param>
  86. /// <param name="name"></param>
  87. /// <param name="server"></param>
  88. /// <param name="port"></param>
  89. /// <param name="userid"></param>
  90. /// <param name="password"></param>
  91. /// <param name="database"></param>
  92. /// <param name="extConnectString"></param>
  93. /// <param name="desc"></param>
  94. public AppConfigDbItem(int number, string type, string name, string server, string port, string userid, string password, string database, string extConnectString, string desc)
  95. {
  96. Number = number;
  97. Type = type;
  98. Name = name;
  99. Server = server;
  100. Port = port;
  101. UserId = userid;
  102. SetPasswordEnc(password);
  103. Database = database;
  104. ExtConnectString = extConnectString;
  105. Desc = desc;
  106. }
  107. public DatabaseType DbType()
  108. {
  109. switch (Type.ToLower())
  110. {
  111. case "pg":
  112. case "postgresql": return DatabaseType.PostgreSQL;
  113. case "mysql":
  114. default:
  115. return DatabaseType.Mysql;
  116. }
  117. }
  118. /// <summary>
  119. /// 连接字符串
  120. /// </summary>
  121. /// <param name="database">执行连接库</param>
  122. /// <returns></returns>
  123. public string ConnectionString(string database = null)
  124. {
  125. if (!Str.Ok(database)) database = Database;
  126. switch (DbType())
  127. {
  128. case DatabaseType.PostgreSQL:
  129. {
  130. return $"Server = {Server}; Port = {(Str.Ok(Port) ? Port : "3306")}; User Id = {UserId}; Password = {GetPasswordEnc()}; Database = {database}; {ExtConnectString}";
  131. }
  132. case DatabaseType.Mysql:
  133. default:
  134. {
  135. return $"server = {Server}; port = {(Str.Ok(Port) ? Port : "3306")}; userid = {UserId}; password = {GetPasswordEnc()}; database = {database}; persistsecurityinfo = True; {ExtConnectString}";
  136. }
  137. }
  138. }
  139. /// <summary>
  140. /// 表空间配置库
  141. /// </summary>
  142. /// <returns></returns>
  143. public string SchemaDatabase()
  144. {
  145. switch (DbType())
  146. {
  147. case DatabaseType.PostgreSQL:
  148. {
  149. return "";
  150. }
  151. case DatabaseType.Mysql:
  152. default:
  153. {
  154. return "information_schema";
  155. }
  156. }
  157. }
  158. /// <summary>
  159. /// 测试连接查询语句
  160. /// </summary>
  161. /// <returns></returns>
  162. public string ValidationQuery()
  163. {
  164. switch (DbType())
  165. {
  166. case DatabaseType.PostgreSQL:
  167. case DatabaseType.Mysql:
  168. default:
  169. {
  170. return "select now()";
  171. }
  172. }
  173. }
  174. /// <summary>
  175. /// 表空间查询语句
  176. /// </summary>
  177. /// <returns></returns>
  178. public string SchemaQuery()
  179. {
  180. switch (DbType())
  181. {
  182. case DatabaseType.PostgreSQL:
  183. return "SELECT datname AS schema_name FROM pg_database";
  184. case DatabaseType.Mysql:
  185. default:
  186. return "SELECT schema_name FROM `SCHEMATA`";
  187. }
  188. }
  189. /// <summary>
  190. /// 排序序号
  191. /// </summary>
  192. /// <returns></returns>
  193. public int GetOrderNumber()
  194. {
  195. return this.Number;
  196. }
  197. /// <summary>
  198. /// 唯一名称
  199. /// </summary>
  200. /// <returns></returns>
  201. public string GetUniqueName()
  202. {
  203. return this.Name;
  204. }
  205. }
  206. }