You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
3.6KB

  1. using HealthMonitor.Common;
  2. using Microsoft.Extensions.Logging;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using TelpoDataService.Util.Clients;
  9. using TelpoDataService.Util.Entities.GpsLocationHistory;
  10. using TelpoDataService.Util.Models;
  11. using TelpoDataService.Util.QueryObjects;
  12. namespace HealthMonitor.Service.Cache
  13. {
  14. public class FetalHeartRateCacheManager
  15. {
  16. private readonly ILogger<FetalHeartRateCacheManager> _logger;
  17. private readonly GpsLocationHistoryAccessorClient<HisGpsFetalHeartRate> _hisFetalHeartRateApiClient;
  18. private const string CACHE_KEY_FETALHEARTRATE = "FHR_";
  19. public FetalHeartRateCacheManager(ILogger<FetalHeartRateCacheManager> logger, GpsLocationHistoryAccessorClient<HisGpsFetalHeartRate> hisFetalHeartRateApiClient)
  20. {
  21. _logger = logger;
  22. _hisFetalHeartRateApiClient = hisFetalHeartRateApiClient;
  23. }
  24. public async Task SetFetalHeartRateAsync(string serialNo, string sampleTime)
  25. {
  26. try
  27. {
  28. var key = $"{CACHE_KEY_FETALHEARTRATE}_{serialNo}_{sampleTime}";
  29. var time = long.Parse(sampleTime.Length < 13 ? sampleTime.PadRight(13, '0') : sampleTime);
  30. var value = DateTimeUtil.GetDateTimeFromUnixTimeMilliseconds(time).ToString("yyyy-MM-dd HH:mm:ss");
  31. await RedisHelper.SetAsync(key, value, 7200).ConfigureAwait(false);
  32. }
  33. catch (Exception ex)
  34. {
  35. _logger.LogWarning($"Redis 发生异常:{ex.Message}, {ex.StackTrace}");
  36. }
  37. }
  38. public async Task<bool> FetalHeartRateIsExistedAsync(string serialNo, string sampleTime)
  39. {
  40. try
  41. {
  42. var key = $"{CACHE_KEY_FETALHEARTRATE}_{serialNo}_{sampleTime}";
  43. var res = await RedisHelper.GetAsync(key).ConfigureAwait(false);
  44. if (string.IsNullOrEmpty(res))
  45. {
  46. GeneralParam param = new()
  47. {
  48. Filters = new List<QueryFilterCondition>
  49. {
  50. new ()
  51. {
  52. Key=nameof(HisGpsFetalHeartRate.Serialno),
  53. Value=serialNo,
  54. ValueType=QueryValueTypeEnum.String,
  55. Operator=QueryOperatorEnum.Equal
  56. },
  57. new ()
  58. {
  59. Key=nameof(HisGpsFetalHeartRate.SampleTime),
  60. Value=sampleTime,
  61. ValueType=QueryValueTypeEnum.String,
  62. Operator=QueryOperatorEnum.Equal
  63. },
  64. }
  65. };
  66. var isFetalMovementExist = await _hisFetalHeartRateApiClient.GetFirstAsync(param, serialNo[^2..], null, new RequestHeader { RequestId = Guid.NewGuid().ToString("D") });
  67. if (isFetalMovementExist != null)
  68. {
  69. await SetFetalHeartRateAsync(serialNo, sampleTime);
  70. return true;
  71. }
  72. }
  73. else
  74. {
  75. return true;
  76. }
  77. }
  78. catch (Exception ex)
  79. {
  80. _logger.LogWarning($"Redis 发生异常:{ex.Message}, {ex.StackTrace}");
  81. }
  82. return false;
  83. }
  84. }
  85. }