AppConfigDbItem.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. using Azylee.Core.AppUtils.AppConfigUtils.AppConfigInterfaces;
  2. using Azylee.Core.DataUtils.CollectionUtils;
  3. using Azylee.Core.DataUtils.EncryptUtils;
  4. using Azylee.Core.DataUtils.StringUtils;
  5. using Azylee.Core.DbUtils;
  6. using Azylee.Core.DbUtils.DbModels;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. namespace Azylee.Core.AppUtils.AppConfigUtils.AppConfigModels
  12. {
  13. /// <summary>
  14. /// 数据库配置信息
  15. /// </summary>
  16. public class AppConfigDbItem : IAppConfigItemModel
  17. {
  18. private string PASSWORD_ENC_SIGN = "ENC:::";
  19. private string PASSWORD_ENC_PWD = "app.db.pwd.20211202";
  20. /// <summary>
  21. /// 序号
  22. /// </summary>
  23. public int Number { get; set; }
  24. /// <summary>
  25. /// 唯一名称
  26. /// </summary>
  27. public string Name { get; set; }
  28. /// <summary>
  29. /// 服务器IP地址
  30. /// </summary>
  31. public string Server { get; set; }
  32. /// <summary>
  33. /// 服务器端口号
  34. /// </summary>
  35. public string Port { get; set; }
  36. /// <summary>
  37. /// 登录用户ID
  38. /// </summary>
  39. public string UserId { get; set; }
  40. /// <summary>
  41. /// 登录用户密码
  42. /// </summary>
  43. public string Password { get; set; }
  44. public void SetPasswordEnc(string value)
  45. {
  46. if (Str.Ok(value) && !value.StartsWith(PASSWORD_ENC_SIGN))
  47. {
  48. Password = PASSWORD_ENC_SIGN + AesTool.Encrypt(value, PASSWORD_ENC_PWD);
  49. }
  50. else
  51. {
  52. Password = value ?? "";
  53. }
  54. }
  55. public string GetPasswordEnc()
  56. {
  57. if (Str.Ok(Password) && Password.StartsWith(PASSWORD_ENC_SIGN))
  58. {
  59. return AesTool.Decrypt(Password.Substring(PASSWORD_ENC_SIGN.Length), PASSWORD_ENC_PWD);
  60. }
  61. else
  62. {
  63. return Password;
  64. }
  65. }
  66. /// <summary>
  67. /// 数据库类型
  68. /// </summary>
  69. public string Type { get; set; }
  70. /// <summary>
  71. /// 默认数据库
  72. /// </summary>
  73. public string Database { get; set; }
  74. /// <summary>
  75. /// SQL执行超时时间
  76. /// </summary>
  77. public int CommandTimeout { get; set; }
  78. /// <summary>
  79. /// 系统保留扩展链接字符
  80. /// </summary>
  81. public string JoinConnectString { get; set; }
  82. /// <summary>
  83. /// 扩展连接字符串
  84. /// </summary>
  85. public string ExtConnectString { get; set; }
  86. /// <summary>
  87. /// 自定义替换参数
  88. /// </summary>
  89. public List<string> CustRepList { get; set; }
  90. /// <summary>
  91. /// 描述信息
  92. /// </summary>
  93. public string Desc { get; set; }
  94. /// <summary>
  95. /// 全参数构造函数
  96. /// </summary>
  97. /// <param name="number"></param>
  98. /// <param name="type"></param>
  99. /// <param name="name"></param>
  100. /// <param name="server"></param>
  101. /// <param name="port"></param>
  102. /// <param name="userid"></param>
  103. /// <param name="password"></param>
  104. /// <param name="database"></param>
  105. /// <param name="extConnectString"></param>
  106. /// <param name="desc"></param>
  107. /// <param name="commandTimeout"></param>
  108. public AppConfigDbItem(int number, string type, string name, string server, string port, string userid, string password, string database, string extConnectString, List<string> custRep, string desc, int commandTimeout)
  109. {
  110. Number = number;
  111. Type = type;
  112. Name = name;
  113. Server = server;
  114. Port = port;
  115. UserId = userid;
  116. SetPasswordEnc(password);
  117. Database = database;
  118. ExtConnectString = extConnectString;
  119. CustRepList = custRep;
  120. Desc = desc;
  121. CommandTimeout = commandTimeout;
  122. }
  123. /// <summary>
  124. /// 获取用户自定义替换参数的对照信息
  125. /// 示例:{{$HI.CUSREP=>USER.ACCOUNT1}} 1
  126. /// </summary>
  127. /// <returns></returns>
  128. public Dictionary<string, string> GetCustRepParams()
  129. {
  130. if (!Ls.ok(CustRepList)) return null;
  131. Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
  132. foreach (var item in CustRepList)
  133. {
  134. string begSign = "{{$HI.CUSREP=>";
  135. string endSign = "}}";
  136. int endPos = item.IndexOf(endSign);
  137. if (item.StartsWith(begSign) && endPos > -1)
  138. {
  139. string key = item.Substring(0, endPos);
  140. if (key.Ok()) key = key + endSign;
  141. string val = item.Substring(endPos + endSign.Length);
  142. if (val.Ok()) val = val.Trim();
  143. keyValuePairs[key] = val;
  144. }
  145. }
  146. return keyValuePairs;
  147. }
  148. public DatabaseType DbType()
  149. {
  150. switch (Type.ToLower())
  151. {
  152. case "pg":
  153. case "postgresql": return DatabaseType.PostgreSQL;
  154. case "ddm": return DatabaseType.DDM;
  155. case "starrocks": return DatabaseType.StarRocks;
  156. case "mysql":
  157. default:
  158. return DatabaseType.Mysql;
  159. }
  160. }
  161. /// <summary>
  162. /// 连接字符串
  163. /// </summary>
  164. /// <param name="database">执行连接库</param>
  165. /// <returns></returns>
  166. public string ConnectionString(string database = null)
  167. {
  168. if (!Str.Ok(database)) database = Database;
  169. switch (DbType())
  170. {
  171. case DatabaseType.PostgreSQL:
  172. {
  173. return $"Server = {Server}; Port = {(Str.Ok(Port) ? Port : "3306")}; User Id = {UserId}; Password = {GetPasswordEnc()}; Database = {database}; {JoinConnectString} {ExtConnectString}";
  174. }
  175. case DatabaseType.DDM:
  176. {
  177. return $"server = {Server}; port = {(Str.Ok(Port) ? Port : "3306")}; userid = {UserId}; password = {GetPasswordEnc()}; database = {database}; persistsecurityinfo = True; {JoinConnectString} {ExtConnectString}";
  178. }
  179. case DatabaseType.StarRocks:
  180. {
  181. return $"server = {Server}; port = {(Str.Ok(Port) ? Port : "9030")}; userid = {UserId}; password = {GetPasswordEnc()}; database = {database}; persistsecurityinfo = True; {JoinConnectString} {ExtConnectString}";
  182. }
  183. case DatabaseType.Mysql:
  184. default:
  185. {
  186. return $"server = {Server}; port = {(Str.Ok(Port) ? Port : "3306")}; userid = {UserId}; password = {GetPasswordEnc()}; database = {database}; persistsecurityinfo = True; {JoinConnectString} {ExtConnectString}";
  187. }
  188. }
  189. }
  190. /// <summary>
  191. /// 表空间配置库
  192. /// </summary>
  193. /// <returns></returns>
  194. public string SchemaDatabase()
  195. {
  196. switch (DbType())
  197. {
  198. case DatabaseType.PostgreSQL:
  199. {
  200. return "";
  201. }
  202. case DatabaseType.DDM:
  203. {
  204. return "";
  205. }
  206. case DatabaseType.Mysql:
  207. default:
  208. {
  209. return "information_schema";
  210. }
  211. }
  212. }
  213. /// <summary>
  214. /// 测试连接查询语句
  215. /// </summary>
  216. /// <returns></returns>
  217. public string ValidationQuery()
  218. {
  219. switch (DbType())
  220. {
  221. case DatabaseType.PostgreSQL:
  222. case DatabaseType.DDM:
  223. case DatabaseType.Mysql:
  224. default:
  225. {
  226. return "select now()";
  227. }
  228. }
  229. }
  230. /// <summary>
  231. /// 表空间查询语句
  232. /// </summary>
  233. /// <returns></returns>
  234. public string SchemaQuery()
  235. {
  236. switch (DbType())
  237. {
  238. case DatabaseType.PostgreSQL:
  239. return "SELECT datname AS schema_name FROM pg_database";
  240. case DatabaseType.DDM: return "SHOW DATABASES";
  241. case DatabaseType.Mysql:
  242. default:
  243. return "SELECT schema_name FROM `SCHEMATA`";
  244. }
  245. }
  246. /// <summary>
  247. /// 排序序号
  248. /// </summary>
  249. /// <returns></returns>
  250. public int GetOrderNumber()
  251. {
  252. return this.Number;
  253. }
  254. /// <summary>
  255. /// 唯一名称
  256. /// </summary>
  257. /// <returns></returns>
  258. public string GetUniqueName()
  259. {
  260. return this.Name;
  261. }
  262. }
  263. }