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.

99 lines
3.8KB

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