RepositoriePostgreSQL.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Dapper;
  2. using Host.Common;
  3. using Newtonsoft.Json.Linq;
  4. using Npgsql;
  5. using Quartz.Impl.AdoJobStore.Common;
  6. using System;
  7. using System.IO;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace Host.Repositories
  11. {
  12. public class RepositoriePostgreSQL : IRepositorie
  13. {
  14. private IDbProvider DBProvider { get; }
  15. public RepositoriePostgreSQL(IDbProvider dbProvider)
  16. {
  17. DBProvider = dbProvider;
  18. }
  19. public async Task<int> InitTable()
  20. {
  21. using (var connection = new NpgsqlConnection(DBProvider.ConnectionString))
  22. {
  23. var check_sql = @"SELECT
  24. COUNT (1)
  25. FROM
  26. pg_class
  27. WHERE
  28. relname IN (
  29. 'qrtz_blob_triggers',
  30. 'qrtz_calendars',
  31. 'qrtz_cron_triggers',
  32. 'qrtz_fired_triggers',
  33. 'qrtz_job_details',
  34. 'qrtz_locks',
  35. 'qrtz_paused_trigger_grps',
  36. 'qrtz_scheduler_state',
  37. 'qrtz_simple_triggers',
  38. 'qrtz_simprop_triggers',
  39. 'qrtz_triggers'
  40. );";
  41. var count = await connection.QueryFirstOrDefaultAsync<int>(check_sql);
  42. //初始化 建表
  43. if (count == 0)
  44. {
  45. string init_sql = await File.ReadAllTextAsync("Tables/tables_postgres.sql");
  46. return await connection.ExecuteAsync(init_sql);
  47. }
  48. }
  49. return 0;
  50. }
  51. public async Task<bool> RemoveErrLogAsync(string jobGroup, string jobName)
  52. {
  53. try
  54. {
  55. using (var connection = new NpgsqlConnection(DBProvider.ConnectionString))
  56. {
  57. string sql = $@"SELECT
  58. JOB_DATA
  59. FROM
  60. QRTZ_JOB_DETAILS
  61. WHERE
  62. JOB_NAME = @jobName
  63. AND JOB_GROUP = @jobGroup";
  64. var byteArray = await connection.ExecuteScalarAsync<byte[]>(sql, new { jobName, jobGroup });
  65. var jsonStr = Encoding.Default.GetString(byteArray);
  66. JObject source = JObject.Parse(jsonStr);
  67. source.Remove("Exception");//移除异常日志
  68. var modifySql = $@"UPDATE QRTZ_JOB_DETAILS
  69. SET JOB_DATA = @jobData
  70. WHERE
  71. JOB_NAME = @jobName
  72. AND JOB_GROUP = @jobGroup";
  73. await connection.ExecuteAsync(modifySql, new { jobName, jobGroup, jobData = Encoding.Default.GetBytes(source.ToString()) });
  74. }
  75. return true;
  76. }
  77. catch (Exception ex)
  78. {
  79. return false;
  80. }
  81. }
  82. }
  83. }