AppConfigDbItem.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  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. /// SQL执行超时时间
  75. /// </summary>
  76. public int CommandTimeout { get; set; }
  77. /// <summary>
  78. /// 系统保留扩展链接字符
  79. /// </summary>
  80. public string JoinConnectString { get; set; }
  81. /// <summary>
  82. /// 扩展连接字符串
  83. /// </summary>
  84. public string ExtConnectString { get; set; }
  85. /// <summary>
  86. /// 描述信息
  87. /// </summary>
  88. public string Desc { get; set; }
  89. /// <summary>
  90. /// 全参数构造函数
  91. /// </summary>
  92. /// <param name="number"></param>
  93. /// <param name="type"></param>
  94. /// <param name="name"></param>
  95. /// <param name="server"></param>
  96. /// <param name="port"></param>
  97. /// <param name="userid"></param>
  98. /// <param name="password"></param>
  99. /// <param name="database"></param>
  100. /// <param name="extConnectString"></param>
  101. /// <param name="desc"></param>
  102. /// <param name="commandTimeout"></param>
  103. public AppConfigDbItem(int number, string type, string name, string server, string port, string userid, string password, string database, string extConnectString, string desc, int commandTimeout)
  104. {
  105. Number = number;
  106. Type = type;
  107. Name = name;
  108. Server = server;
  109. Port = port;
  110. UserId = userid;
  111. SetPasswordEnc(password);
  112. Database = database;
  113. ExtConnectString = extConnectString;
  114. Desc = desc;
  115. CommandTimeout = commandTimeout;
  116. }
  117. public DatabaseType DbType()
  118. {
  119. switch (Type.ToLower())
  120. {
  121. case "pg":
  122. case "postgresql": return DatabaseType.PostgreSQL;
  123. case "mysql":
  124. default:
  125. return DatabaseType.Mysql;
  126. }
  127. }
  128. /// <summary>
  129. /// 连接字符串
  130. /// </summary>
  131. /// <param name="database">执行连接库</param>
  132. /// <returns></returns>
  133. public string ConnectionString(string database = null)
  134. {
  135. if (!Str.Ok(database)) database = Database;
  136. switch (DbType())
  137. {
  138. case DatabaseType.PostgreSQL:
  139. {
  140. return $"Server = {Server}; Port = {(Str.Ok(Port) ? Port : "3306")}; User Id = {UserId}; Password = {GetPasswordEnc()}; Database = {database}; {JoinConnectString} {ExtConnectString}";
  141. }
  142. case DatabaseType.Mysql:
  143. default:
  144. {
  145. return $"server = {Server}; port = {(Str.Ok(Port) ? Port : "3306")}; userid = {UserId}; password = {GetPasswordEnc()}; database = {database}; persistsecurityinfo = True; {JoinConnectString} {ExtConnectString}";
  146. }
  147. }
  148. }
  149. /// <summary>
  150. /// 表空间配置库
  151. /// </summary>
  152. /// <returns></returns>
  153. public string SchemaDatabase()
  154. {
  155. switch (DbType())
  156. {
  157. case DatabaseType.PostgreSQL:
  158. {
  159. return "";
  160. }
  161. case DatabaseType.Mysql:
  162. default:
  163. {
  164. return "information_schema";
  165. }
  166. }
  167. }
  168. /// <summary>
  169. /// 测试连接查询语句
  170. /// </summary>
  171. /// <returns></returns>
  172. public string ValidationQuery()
  173. {
  174. switch (DbType())
  175. {
  176. case DatabaseType.PostgreSQL:
  177. case DatabaseType.Mysql:
  178. default:
  179. {
  180. return "select now()";
  181. }
  182. }
  183. }
  184. /// <summary>
  185. /// 表空间查询语句
  186. /// </summary>
  187. /// <returns></returns>
  188. public string SchemaQuery()
  189. {
  190. switch (DbType())
  191. {
  192. case DatabaseType.PostgreSQL:
  193. return "SELECT datname AS schema_name FROM pg_database";
  194. case DatabaseType.Mysql:
  195. default:
  196. return "SELECT schema_name FROM `SCHEMATA`";
  197. }
  198. }
  199. /// <summary>
  200. /// 排序序号
  201. /// </summary>
  202. /// <returns></returns>
  203. public int GetOrderNumber()
  204. {
  205. return this.Number;
  206. }
  207. /// <summary>
  208. /// 唯一名称
  209. /// </summary>
  210. /// <returns></returns>
  211. public string GetUniqueName()
  212. {
  213. return this.Name;
  214. }
  215. }
  216. }