RepositorieSQLite.cs 3.5 KB

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