JobLoggerService.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using IMCS.CCS.Common.Redis;
  2. using IMCS.CCS.Entitys;
  3. using Newtonsoft.Json;
  4. using System;
  5. using System.Collections.Concurrent;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Threading.Tasks;
  9. namespace IMCS.CCS.Service.Impl
  10. {
  11. /// <summary>
  12. /// Job 运行 日志
  13. /// </summary>
  14. public class JobLoggerService : IJobLoggerService
  15. {
  16. private ConcurrentBag<JobLoggerInfo> jobLoggerInfos;
  17. private string JobLoggerKey = "HC.Quartz:JobLogger";
  18. private long ListMaxValue = 999999;//集合最大值
  19. private readonly IDataStorageConfigurationService _dataStorageConfigurationService;
  20. private readonly IRedisService _redisService;
  21. public JobLoggerService(IDataStorageConfigurationService dataStorageConfigurationService, IRedisService redisService)
  22. {
  23. if (!dataStorageConfigurationService.IsUseRedis())
  24. {
  25. jobLoggerInfos ??= new ConcurrentBag<JobLoggerInfo>();
  26. }
  27. _dataStorageConfigurationService = dataStorageConfigurationService;
  28. _redisService = redisService;
  29. }
  30. private IEnumerable<JobLoggerInfo> FindAll()
  31. {
  32. //if (_dataStorageConfigurationService.IsUseRedis())
  33. //{
  34. // var json = _redisService.Database.StringGet(JobLoggerKey);
  35. // return string.IsNullOrWhiteSpace(json) ? new ConcurrentBag<JobLoggerInfo>() : JsonConvert.DeserializeObject<List<JobLoggerInfo>>(json);
  36. //}
  37. return jobLoggerInfos ?? new ConcurrentBag<JobLoggerInfo>();
  38. }
  39. public IEnumerable<JobLoggerInfo> FindListById(Guid tasksId)
  40. {
  41. if (tasksId == Guid.Empty) return new ConcurrentBag<JobLoggerInfo>();
  42. if (_dataStorageConfigurationService.IsUseRedis())
  43. {
  44. var json = _redisService.Database.StringGet($"{JobLoggerKey}:{tasksId}");
  45. return string.IsNullOrWhiteSpace(json) ? new List<JobLoggerInfo>() : JsonConvert.DeserializeObject<List<JobLoggerInfo>>(json);
  46. }
  47. return FindAll().Where(w => w.TasksId == tasksId);
  48. }
  49. public void Write(JobLoggerInfo jobLoggerInfo)
  50. {
  51. if (jobLoggerInfo == null) return;
  52. var tasksId = jobLoggerInfo?.TasksId ?? Guid.Empty;
  53. if (_dataStorageConfigurationService.IsUseRedis())
  54. {
  55. var list = this.FindListById(tasksId)?.ToList() ?? new List<JobLoggerInfo>();
  56. if (list.Count > ListMaxValue)
  57. {
  58. list.Clear();
  59. list ??= new List<JobLoggerInfo>();
  60. }
  61. list.Add(jobLoggerInfo);
  62. _redisService.Database.StringSet($"{JobLoggerKey}:{tasksId}", JsonConvert.SerializeObject(list));
  63. }
  64. else
  65. {
  66. jobLoggerInfos ??= new ConcurrentBag<JobLoggerInfo>();
  67. jobLoggerInfos.Add(jobLoggerInfo);
  68. if (jobLoggerInfos.Count > ListMaxValue)
  69. {
  70. jobLoggerInfos.Clear();
  71. jobLoggerInfos ??= new ConcurrentBag<JobLoggerInfo>();
  72. }
  73. }
  74. }
  75. }
  76. }