using HealthMonitor.Common; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TelpoDataService.Util.Clients; using TelpoDataService.Util.Entities.GpsLocationHistory; using TelpoDataService.Util.Models; using TelpoDataService.Util.QueryObjects; namespace HealthMonitor.Service.Cache { public class FetalHeartRateCacheManager { private readonly ILogger _logger; private readonly GpsLocationHistoryAccessorClient _hisFetalHeartRateApiClient; private const string CACHE_KEY_FETALHEARTRATE = "FHR_"; public FetalHeartRateCacheManager(ILogger logger, GpsLocationHistoryAccessorClient hisFetalHeartRateApiClient) { _logger = logger; _hisFetalHeartRateApiClient = hisFetalHeartRateApiClient; } public async Task SetFetalHeartRateAsync(string serialNo, string sampleTime) { try { var key = $"{CACHE_KEY_FETALHEARTRATE}_{serialNo}_{sampleTime}"; var time = long.Parse(sampleTime.Length < 13 ? sampleTime.PadRight(13, '0') : sampleTime); var value = DateTimeUtil.GetDateTimeFromUnixTimeMilliseconds(time).ToString("yyyy-MM-dd HH:mm:ss"); await RedisHelper.SetAsync(key, value, 7200).ConfigureAwait(false); } catch (Exception ex) { _logger.LogWarning($"Redis 发生异常:{ex.Message}, {ex.StackTrace}"); } } public async Task FetalHeartRateIsExistedAsync(string serialNo, string sampleTime) { try { var key = $"{CACHE_KEY_FETALHEARTRATE}_{serialNo}_{sampleTime}"; var res = await RedisHelper.GetAsync(key).ConfigureAwait(false); if (string.IsNullOrEmpty(res)) { GeneralParam param = new() { Filters = new List { new () { Key=nameof(HisGpsFetalHeartRate.Serialno), Value=serialNo, ValueType=QueryValueTypeEnum.String, Operator=QueryOperatorEnum.Equal }, new () { Key=nameof(HisGpsFetalHeartRate.SampleTime), Value=sampleTime, ValueType=QueryValueTypeEnum.String, Operator=QueryOperatorEnum.Equal }, } }; var isFetalMovementExist = await _hisFetalHeartRateApiClient.GetFirstAsync(param, serialNo[^2..], null, new RequestHeader { RequestId = Guid.NewGuid().ToString("D") }); if (isFetalMovementExist != null) { await SetFetalHeartRateAsync(serialNo, sampleTime); return true; } } else { return true; } } catch (Exception ex) { _logger.LogWarning($"Redis 发生异常:{ex.Message}, {ex.StackTrace}"); } return false; } } }