diff --git a/HealthMonitor.WebApi/Worker.cs b/HealthMonitor.WebApi/Worker.cs index 5214c65..ca1198b 100644 --- a/HealthMonitor.WebApi/Worker.cs +++ b/HealthMonitor.WebApi/Worker.cs @@ -924,12 +924,14 @@ namespace HealthMonitor.WebApi */ #endregion - #region 胎动延时计算(再延时) + #region 胎动延时计算(使用线程再延时) using (_logger.BeginScope(new Dictionary { ["RequestId"] = $"FM-{imeiDel}-{DateTime.Now.ToString("yyyyMMddHHmmss")}" })) { var watchConfig = await _deviceCacheMgr.GetGpsDeviceWatchConfigCacheObjectBySerialNoAsync(imeiDel, "0067"); _logger.LogInformation($"触发胎动计算,设备配置{JsonConvert.SerializeObject(watchConfig)}"); var isFetalHeartEnable = watchConfig != null && (int)watchConfig["enabled"]! == 1; + var highFreqSampleInterval = (int)watchConfig!["highFreqSampleInterval"]! >= 60 ? (int)watchConfig!["highFreqSampleInterval"]! : 60; + if (isFetalHeartEnable) { var edoc = DateTimeUtil.ToDateTime(watchConfig!["EDOC"]!.ToString()); @@ -951,195 +953,214 @@ namespace HealthMonitor.WebApi // 统计结束时间 var statEndTime = fmNowSubtract; - // 最后一条 - PregnancyHeartRateModel lastPhr = await _serviceTDengine.GetLastAsync(imeiDel); - Thread thread = new(async () => { - - - }); - - thread.Start(); - - - var isFetalMovementExisted = await _deviceCacheMgr.FetalMovementIsExistedAsync(imeiDel, fetalMovementSampleTime); - _logger.LogInformation($"{imeiDel} 胎动记录{isFetalMovementExisted},数据采样时间:{fetalMovementSampleTime}|{fmNowSubtract.ToString("yyyy-MM-dd HH:mm:ss")}, 周期:{statStartTime}-{statEndTime} 开始"); - - if (!isFetalMovementExisted) - { - /// 开始计算 - var phrRange = phr.Where(i => i.LastUpdate >= statStartTime && i.LastUpdate <= statEndTime) - .OrderByDescending(i => i.LastUpdate) - .Select(i => i.LastUpdate) - .ToList(); - // 判断是否有持续佩戴 - if (phrRange.Count >= 2) + + Thread thread = new(async () => { + try { - // 读取胎心数据 - GeneralParam param = new() + #region 休眠65分钟 + var startTime = DateTime.Now; + //var highFreqSampleInterval2 = (int)watchConfig!["highFreqSampleInterval"]!+5; + var highFreqSampleInterval2 = 65*60; + var during = TimeSpan.FromSeconds(highFreqSampleInterval2); + while (true) { - Filters = new List + if (DateTime.Now - startTime > during) { - new () - { - Key=nameof(HisGpsFetalHeartRate.Serialno), - Value=imeiDel, - ValueType=QueryValueTypeEnum.String, - Operator=QueryOperatorEnum.Equal - }, - //new () - //{ - // Key=nameof(HisGpsFetalHeartRate.SampleTime), - // Value=sampleTime, - // ValueType=QueryValueTypeEnum.String, - // Operator=QueryOperatorEnum.GreaterEqual - //}, - }, - OrderBys = new List - { - new (){ - IsDesc=true, - Key=nameof(HisGpsFetalHeartRate.SampleTime) - } + break; } - }; - var fetalHeartRateIsAbnormal = 0; - var fhr = await _hisFetalHeartApiClient.GetFirstAsync(param, imeiDel[^2..], null, new RequestHeader { RequestId = Guid.NewGuid().ToString("D") }); - - // 胎心数据时间与胎动时间一致 - var time = long.Parse(fhr.SampleTime.Length < 13 ? fhr.SampleTime.PadRight(13, '0') : fhr.SampleTime); - var fhrSampleTime = DateTimeUtil.GetDateTimeFromUnixTimeMilliseconds(time); - - // 胎心数据时间与胎动时间一致,最后一条胎心数据与胎动数据的小时差不大于2 - if ((DateTime.Now.Hour - fhrSampleTime.Hour) <= 2) + await Task.Delay(TimeSpan.FromSeconds(1)); + } + #endregion + + + //var daysPhr = await _serviceTDengine.GetBySerialNoAsync(imeiDel,1); + //// 去除高频 + //var normalPhr = GetNonFreqPregnancyHeartRate(daysPhr, highFreqSampleInterval).OrderByDescending(i => i.LastUpdate); + //// 常规最后一条 + //var lastNormalPhr = normalPhr.First(); + //statEndTime = lastNormalPhr.LastUpdate; + PregnancyHeartRateModel lastPhr = await _serviceTDengine.GetLastAsync(imeiDel); + statEndTime = lastPhr.LastUpdate; + #region 计算 + var isFetalMovementExisted = await _deviceCacheMgr.FetalMovementIsExistedAsync(imeiDel, fetalMovementSampleTime); + _logger.LogInformation($"{imeiDel} 胎动记录{isFetalMovementExisted},数据采样时间:{fetalMovementSampleTime}|{fmNowSubtract.ToString("yyyy-MM-dd HH:mm:ss")}, 周期:{statStartTime}-{statEndTime} 开始"); + + if (!isFetalMovementExisted) { - var duringMins = Math.Abs((phrRange.First() - phrRange.Last()).TotalMinutes); - //在餐后时间段(8:00~10:00,12:00~14:00,18:00~20:00,22:00~24:00)取中间值。其他时间段取正常起始值 - bool isInTimeRanges = IsLastUpdateInTimeRanges(phrRange.First()); - - int pregnancyWeeks = (DateTime.Now - edoc.AddDays(-280)).Days / 7; - if (pregnancyWeeks >= 12 && pregnancyWeeks <= 50) + /// 开始计算 + var phrRange = phr.Where(i => i.LastUpdate >= statStartTime && i.LastUpdate <= statEndTime) + .OrderByDescending(i => i.LastUpdate) + .Select(i => i.LastUpdate) + .ToList(); + // 判断是否有持续佩戴 + if (phrRange.Count >= 2) { - var fetalMovementMap = _mgrFetalMovementNormalValueRangeCache.GetFetalMovements(); - - var fetalMovementMapValue = isInTimeRanges ? fetalMovementMap - .Where(i => - i.PregnancyPeriod![0] <= pregnancyWeeks && - i.PregnancyPeriod[1] >= pregnancyWeeks) - .Select(i => i.MedianMovement) - .FirstOrDefault() - : - fetalMovementMap - .Where(i => - i.PregnancyPeriod![0] <= pregnancyWeeks && - i.PregnancyPeriod[1] >= pregnancyWeeks) - .Select(i => i.InitialMovement) - .FirstOrDefault() - ; - - var fetalMovementValue = (fetalMovementMapValue * duringMins * 2) / 120; - // 四舍五入 - var fetalMovement = (int)Math.Round(fetalMovementValue, 0, MidpointRounding.AwayFromZero); - // _logger.LogInformation($"{imeiDel} segmentCountFMIndex: {i} -- fetalMovementSampleTime:{fetalMovementSampleTime}|{midNight.AddHours(2 * i).ToString("yyyy-MM-dd HH:mm:ss")} -- statStartTime: {statStartTime} -- statEndTime: {statEndTime}-- isFetalMovementExisted: {isFetalMovementExisted} "); - - #region 生理健康与胎动的关系 - /// (步数)运动步数超过1500步则加1; - /// (体温)低烧则胎动减1,高烧胎动减2;低烧是37.3~38.5,38.6以上是高烧。 - /// (血压)血压收缩压大于160则加1。 - /// (心理)心理压力高加2,压力中加1; - - var fetalMovementStepVar = 0; - var fetalMovementTempVar = 0; - var fetalMovementBpVar = 0; - var fetalMovementPpVar = 0; - var fetalMovementFhrVar = 0; - // 步数 - if (true) + // 读取胎心数据 + GeneralParam param = new() { - var step = await _personCacheMgr.GetStepPeriodicityAsync(imeiDel); - if (step != null) - { - if (DateTime.Now.Hour - ((DateTime)step?.LastUpdate!).Hour <= 2) - { - if (step.Steps > 1500) fetalMovementStepVar = 1; - } - else - { - _logger.LogWarning($"{imeiDel} 周期步数 时间无效"); - } - } - else + Filters = new List { - _logger.LogWarning($"{imeiDel} 周期步数无数据"); - } + new () + { + Key=nameof(HisGpsFetalHeartRate.Serialno), + Value=imeiDel, + ValueType=QueryValueTypeEnum.String, + Operator=QueryOperatorEnum.Equal + }, + //new () + //{ + // Key=nameof(HisGpsFetalHeartRate.SampleTime), + // Value=sampleTime, + // ValueType=QueryValueTypeEnum.String, + // Operator=QueryOperatorEnum.GreaterEqual + //}, + }, + OrderBys = new List + { + new (){ + IsDesc=true, + Key=nameof(HisGpsFetalHeartRate.SampleTime) + } + } + }; + var fetalHeartRateIsAbnormal = 0; + var fhr = await _hisFetalHeartApiClient.GetFirstAsync(param, imeiDel[^2..], null, new RequestHeader { RequestId = Guid.NewGuid().ToString("D") }); - } + // 胎心数据时间与胎动时间一致 + var time = long.Parse(fhr.SampleTime.Length < 13 ? fhr.SampleTime.PadRight(13, '0') : fhr.SampleTime); + var fhrSampleTime = DateTimeUtil.GetDateTimeFromUnixTimeMilliseconds(time); - // 体温 - if (true) + // 胎心数据时间与胎动时间一致,最后一条胎心数据与胎动数据的小时差不大于2 + if ((DateTime.Now.Hour - fhrSampleTime.Hour) <= 4) { - var temp = await _personCacheMgr.GetTemperaturePeriodicityAsync(imeiDel); - if (temp != null) + var duringMins = Math.Abs((phrRange.First() - phrRange.Last()).TotalMinutes); + //在餐后时间段(8:00~10:00,12:00~14:00,18:00~20:00,22:00~24:00)取中间值。其他时间段取正常起始值 + bool isInTimeRanges = IsLastUpdateInTimeRanges(phrRange.First()); + + int pregnancyWeeks = (DateTime.Now - edoc.AddDays(-280)).Days / 7; + if (pregnancyWeeks >= 12 && pregnancyWeeks <= 50) { - if (DateTime.Now.Hour - ((DateTime)temp?.LastUpdate!).Hour <= 2) + var fetalMovementMap = _mgrFetalMovementNormalValueRangeCache.GetFetalMovements(); + + var fetalMovementMapValue = isInTimeRanges ? fetalMovementMap + .Where(i => + i.PregnancyPeriod![0] <= pregnancyWeeks && + i.PregnancyPeriod[1] >= pregnancyWeeks) + .Select(i => i.MedianMovement) + .FirstOrDefault() + : + fetalMovementMap + .Where(i => + i.PregnancyPeriod![0] <= pregnancyWeeks && + i.PregnancyPeriod[1] >= pregnancyWeeks) + .Select(i => i.InitialMovement) + .FirstOrDefault() + ; + + var fetalMovementValue = (fetalMovementMapValue * duringMins * 2) / 120; + // 四舍五入 + var fetalMovement = (int)Math.Round(fetalMovementValue, 0, MidpointRounding.AwayFromZero); + // _logger.LogInformation($"{imeiDel} segmentCountFMIndex: {i} -- fetalMovementSampleTime:{fetalMovementSampleTime}|{midNight.AddHours(2 * i).ToString("yyyy-MM-dd HH:mm:ss")} -- statStartTime: {statStartTime} -- statEndTime: {statEndTime}-- isFetalMovementExisted: {isFetalMovementExisted} "); + + #region 生理健康与胎动的关系 + /// (步数)运动步数超过1500步则加1; + /// (体温)低烧则胎动减1,高烧胎动减2;低烧是37.3~38.5,38.6以上是高烧。 + /// (血压)血压收缩压大于160则加1。 + /// (心理)心理压力高加2,压力中加1; + + var fetalMovementStepVar = 0; + var fetalMovementTempVar = 0; + var fetalMovementBpVar = 0; + var fetalMovementPpVar = 0; + var fetalMovementFhrVar = 0; + // 步数 + if (true) { - // 中烧 - if (temp.Temperature >= 37.3M && temp.Temperature <= 38.5M) + var step = await _personCacheMgr.GetStepPeriodicityAsync(imeiDel); + if (step != null) { - fetalMovementTempVar = -1; + if (DateTime.Now.Hour - ((DateTime)step?.LastUpdate!).Hour <= 2) + { + if (step.Steps > 1500) fetalMovementStepVar = 1; + } + else + { + _logger.LogWarning($"{imeiDel} 周期步数 时间无效"); + } } - // 高烧 - if (temp.Temperature >= 38.6M) + else { - fetalMovementTempVar = -2; + _logger.LogWarning($"{imeiDel} 周期步数无数据"); } + } - else + + // 体温 + if (true) { - _logger.LogWarning($"{imeiDel} 周期体温 时间无效"); - } - } - else - { - _logger.LogWarning($"{imeiDel} 周期体温无数据"); - } + var temp = await _personCacheMgr.GetTemperaturePeriodicityAsync(imeiDel); + if (temp != null) + { + if (DateTime.Now.Hour - ((DateTime)temp?.LastUpdate!).Hour <= 2) + { + // 中烧 + if (temp.Temperature >= 37.3M && temp.Temperature <= 38.5M) + { + fetalMovementTempVar = -1; + } + // 高烧 + if (temp.Temperature >= 38.6M) + { + fetalMovementTempVar = -2; + } + } + else + { + _logger.LogWarning($"{imeiDel} 周期体温 时间无效"); + } + } + else + { + _logger.LogWarning($"{imeiDel} 周期体温无数据"); + } - } + } - // 血压 - if (true) - { - var bp = await _personCacheMgr.GetBloodPressPeriodicityAsync(imeiDel); - if (bp != null) - { - if (DateTime.Now.Hour - ((DateTime)bp?.LastUpdate!).Hour <= 2) + // 血压 + if (true) { - if (bp.SystolicValue > 160) + var bp = await _personCacheMgr.GetBloodPressPeriodicityAsync(imeiDel); + if (bp != null) { - fetalMovementBpVar = 1; + if (DateTime.Now.Hour - ((DateTime)bp?.LastUpdate!).Hour <= 2) + { + if (bp.SystolicValue > 160) + { + fetalMovementBpVar = 1; + } + } + else + { + _logger.LogWarning($"{imeiDel} 周期血压 时间无效"); + } + } + else + { + _logger.LogWarning($"{imeiDel} 周期血压无数据"); } + } - else + // 心理 + if (true) { - _logger.LogWarning($"{imeiDel} 周期血压 时间无效"); - } - } - else - { - _logger.LogWarning($"{imeiDel} 周期血压无数据"); - } - - } - // 心理 - if (true) - { - //-1 不处理, - //0 正常, - //1 轻度, - //2 中度; - //3 重度; - GeneralParam psychResultParam = new() - { - Filters = new List + //-1 不处理, + //0 正常, + //1 轻度, + //2 中度; + //3 重度; + GeneralParam psychResultParam = new() + { + Filters = new List { new () { @@ -1156,154 +1177,167 @@ namespace HealthMonitor.WebApi // Operator=QueryOperatorEnum.GreaterEqual //}, }, - OrderBys = new List + OrderBys = new List { new (){ IsDesc=true, Key=nameof(HisGpsPsychResult.Serialno) } } - }; - var psych = await _hisPsychResultApiClient.GetFirstAsync(psychResultParam, imeiDel[^2..], null, new RequestHeader { RequestId = Guid.NewGuid().ToString("D") }); - if (psych != null) - { - if (psych?.StressScore == 2) - { - fetalMovementPpVar = 1; - } + }; + var psych = await _hisPsychResultApiClient.GetFirstAsync(psychResultParam, imeiDel[^2..], null, new RequestHeader { RequestId = Guid.NewGuid().ToString("D") }); + if (psych != null) + { + if (psych?.StressScore == 2) + { + fetalMovementPpVar = 1; + } + + if (psych?.StressScore == 3) + { + fetalMovementPpVar = 2; + } + } + else + { + _logger.LogWarning($"{imeiDel} 周期心理压力无数据"); + } - if (psych?.StressScore == 3) - { - fetalMovementPpVar = 2; } - } - else - { - _logger.LogWarning($"{imeiDel} 周期心理压力无数据"); - } - } + #endregion - #endregion + #region 胎心与胎动的关系 + /// 胎心值过缓时,则胎动数量减1;胎心值过速时,则胎动也加1。 + /// 此值允许在上限值上继续增加,在下限值上继续减少,最小值为0。 + /// 告警上限阀值 - #region 胎心与胎动的关系 - /// 胎心值过缓时,则胎动数量减1;胎心值过速时,则胎动也加1。 - /// 此值允许在上限值上继续增加,在下限值上继续减少,最小值为0。 - /// 告警上限阀值 + //1表示偏高;2表示偏低 + if (true) + { + if (fhr.IsAbnormal == 2) + { + fetalMovementPpVar = -1; + } - //1表示偏高;2表示偏低 - if (true) - { - if (fhr.IsAbnormal == 2) - { - fetalMovementPpVar = -1; - } + if (fhr.IsAbnormal == 1) + { + fetalMovementPpVar = 1; + } + } - if (fhr.IsAbnormal == 1) - { - fetalMovementPpVar = 1; - } - } + #endregion - #endregion + _logger.LogInformation($"{imeiDel} 原始胎动值:{fetalMovementValue}, 步数参数变动值:{fetalMovementStepVar},体温参数变动值:{fetalMovementTempVar},血压参数变动值:{fetalMovementBpVar},心理压力参数变动值:{fetalMovementPpVar},胎心参数变动值:{fetalMovementFhrVar}"); - _logger.LogInformation($"{imeiDel} 原始胎动值:{fetalMovementValue}, 步数参数变动值:{fetalMovementStepVar},体温参数变动值:{fetalMovementTempVar},血压参数变动值:{fetalMovementBpVar},心理压力参数变动值:{fetalMovementPpVar},胎心参数变动值:{fetalMovementFhrVar}"); + fetalMovementValue = fetalMovementValue + fetalMovementStepVar + fetalMovementTempVar + fetalMovementBpVar + fetalMovementPpVar + fetalMovementFhrVar; - fetalMovementValue = fetalMovementValue + fetalMovementStepVar + fetalMovementTempVar + fetalMovementBpVar + fetalMovementPpVar + fetalMovementFhrVar; + _logger.LogInformation($"{imeiDel} 孕周:{pregnancyWeeks},胎动数据采样时间:{fetalMovementSampleTime}|{fmNowSubtract.ToString("yyyy-MM-dd HH:mm:ss")}, 采样周期:{statStartTime}-{statEndTime}, 原始胎动值:{fetalMovementMapValue}, 佩戴时间 :{duringMins}|{phrRange.Last()}-{phrRange.First()}, 胎动计算值:{fetalMovementValue}, 胎动最终值:{fetalMovement} 已完成."); - _logger.LogInformation($"{imeiDel} 孕周:{pregnancyWeeks},胎动数据采样时间:{fetalMovementSampleTime}|{fmNowSubtract.ToString("yyyy-MM-dd HH:mm:ss")}, 采样周期:{statStartTime}-{statEndTime}, 原始胎动值:{fetalMovementMapValue}, 佩戴时间 :{duringMins}|{phrRange.Last()}-{phrRange.First()}, 胎动计算值:{fetalMovementValue}, 胎动最终值:{fetalMovement} 已完成."); + // 获取胎心数据状态与胎动数据状态一致 + //etalHeartRateIsAbnormal= fhr.IsAbnormal; + var feltalMovementIsAbnormal = fetalHeartRateIsAbnormal; - // 获取胎心数据状态与胎动数据状态一致 - //etalHeartRateIsAbnormal= fhr.IsAbnormal; - var feltalMovementIsAbnormal = fetalHeartRateIsAbnormal; + await _serviceIotApi.SetFetalMovementConfig(imeiDel, fetalMovement, fetalMovementSampleTime, feltalMovementIsAbnormal); - await _serviceIotApi.SetFetalMovementConfig(imeiDel, fetalMovement, fetalMovementSampleTime, feltalMovementIsAbnormal); + // 保存到MySQL数据库 + HisGpsFetalMovement fm = new() + { + FetalMovementId = Guid.NewGuid().ToString("D"), + PersonId = commonPHR!.PersonId, + Serialno = imeiDel, + CreateTime = DateTime.Now, + IsAbnormal = feltalMovementIsAbnormal, + FetalMovementValue = fetalMovement, + SampleTime = fetalMovementSampleTime, + Method = 1, + IsDisplay = 1, + DeviceKey = commonPHR!.DeviceKey + }; + await _hisFetalMovementApiClient.AddAsync(fm).ConfigureAwait(false); + + var device = await _deviceCacheMgr.GetDeviceBySerialNoAsync(imeiDel).ConfigureAwait(false); + var fmMsgId = $"{imeiDel}-{fetalMovementSampleTime}-{Guid.NewGuid().ToString("D")[^3..]}"; + var fmMsgTime = DateTimeUtil.GetDateTimeFromUnixTimeMilliseconds(long.Parse(fetalMovementSampleTime.Length < 13 ? fetalMovementSampleTime.PadRight(13, '0') : fetalMovementSampleTime)).ToString("yyyy-MM-dd HH:mm:ss"); + // 胎动数据推送到第三方 + var topic = "topic.push.third"; + var fmThridMsg = new + { + messageId = fmMsgId, + topic = topic, + time = fmMsgTime, + data = new + { + imei = imeiDel, + value = fetalMovement, + isAbnormal = feltalMovementIsAbnormal, + type = "fetalMovement" + } + }; + await _serviceMqProcess.ProcessIMEIEventMessageAsync(fmMsgId, topic, 31, fmThridMsg).ConfigureAwait(false); - // 保存到MySQL数据库 - HisGpsFetalMovement fm = new() - { - FetalMovementId = Guid.NewGuid().ToString("D"), - PersonId = commonPHR!.PersonId, - Serialno = imeiDel, - CreateTime = DateTime.Now, - IsAbnormal = feltalMovementIsAbnormal, - FetalMovementValue = fetalMovement, - SampleTime = fetalMovementSampleTime, - Method = 1, - IsDisplay = 1, - DeviceKey = commonPHR!.DeviceKey - }; - await _hisFetalMovementApiClient.AddAsync(fm).ConfigureAwait(false); + // 胎动数据推送到微信 + if (feltalMovementIsAbnormal != 0) + { + topic = "topic.push.wx"; + var fmMsg = new + { + messageId = Guid.NewGuid().ToString("D"), + topic = topic, + time = DateTimeUtil.GetDateTimeFromUnixTimeMilliseconds(long.Parse(fetalMovementSampleTime.Length < 13 ? fetalMovementSampleTime.PadRight(13, '0') : fetalMovementSampleTime)).ToString("yyyy-MM-dd HH:mm:ss"), + data = new + { + deviceId = device?.DeviceId, + imei = imeiDel, + alarmTypeId = 12, + alarmDeviceName = imeiDel, + alarmRemarks = JsonConvert.SerializeObject(new { fetalMovementValue = fetalMovement, isAbnormal = feltalMovementIsAbnormal }), + address = string.Empty, + deviceKey = device?.DeviceId + } + }; + await _serviceMqProcess.ProcessIMEIEventMessageAsync(fmMsgId, topic, fmMsg).ConfigureAwait(false); + } + // 设置入库缓存记录 + await _deviceCacheMgr.SetFetalMovementAsync(imeiDel, fetalMovementSampleTime, fm); - var device = await _deviceCacheMgr.GetDeviceBySerialNoAsync(imeiDel).ConfigureAwait(false); - var fmMsgId = $"{imeiDel}-{fetalMovementSampleTime}-{Guid.NewGuid().ToString("D")[^3..]}"; - var fmMsgTime = DateTimeUtil.GetDateTimeFromUnixTimeMilliseconds(long.Parse(fetalMovementSampleTime.Length < 13 ? fetalMovementSampleTime.PadRight(13, '0') : fetalMovementSampleTime)).ToString("yyyy-MM-dd HH:mm:ss"); - // 胎动数据推送到第三方 - var topic = "topic.push.third"; - var fmThridMsg = new - { - messageId = fmMsgId, - topic = topic, - time = fmMsgTime, - data = new + + } + else { - imei = imeiDel, - value = fetalMovement, - isAbnormal = feltalMovementIsAbnormal, - type = "fetalMovement" + _logger.LogWarning($"{imeiDel} 孕周 {pregnancyWeeks},超出胎动计算范围"); } - }; - await _serviceMqProcess.ProcessIMEIEventMessageAsync(fmMsgId, topic, 31, fmThridMsg).ConfigureAwait(false); - - // 胎动数据推送到微信 - if (feltalMovementIsAbnormal != 0) + } + else { - topic = "topic.push.wx"; - var fmMsg = new - { - messageId = Guid.NewGuid().ToString("D"), - topic = topic, - time = DateTimeUtil.GetDateTimeFromUnixTimeMilliseconds(long.Parse(fetalMovementSampleTime.Length < 13 ? fetalMovementSampleTime.PadRight(13, '0') : fetalMovementSampleTime)).ToString("yyyy-MM-dd HH:mm:ss"), - data = new - { - deviceId = device?.DeviceId, - imei = imeiDel, - alarmTypeId = 12, - alarmDeviceName = imeiDel, - alarmRemarks = JsonConvert.SerializeObject(new { fetalMovementValue = fetalMovement, isAbnormal = feltalMovementIsAbnormal }), - address = string.Empty, - deviceKey = device?.DeviceId - } - }; - await _serviceMqProcess.ProcessIMEIEventMessageAsync(fmMsgId, topic, fmMsg).ConfigureAwait(false); + _logger.LogWarning($"{imeiDel} 最后一条胎心数据与胎动数据的小时差大于2,不计算胎动数据"); } - // 设置入库缓存记录 - await _deviceCacheMgr.SetFetalMovementAsync(imeiDel, fetalMovementSampleTime, fm); - - } else { - _logger.LogWarning($"{imeiDel} 孕周 {pregnancyWeeks},超出胎动计算范围"); + _logger.LogInformation($"{imeiDel} 胎动记录{isFetalMovementExisted},数据采样时间:{fetalMovementSampleTime}|{fmNowSubtract.ToString("yyyy-MM-dd HH:mm:ss")}, 周期:{statStartTime}-{statEndTime} 不足两条,不能判断是否持续佩戴"); + } } else { - _logger.LogWarning($"{imeiDel} 最后一条胎心数据与胎动数据的小时差大于2,不计算胎动数据"); + _logger.LogInformation($"{imeiDel} 胎动记录{isFetalMovementExisted},数据采样时间:{fetalMovementSampleTime}|{fmNowSubtract.ToString("yyyy-MM-dd HH:mm:ss")}, 周期:{statStartTime}-{statEndTime} 已处理"); } + + #endregion + } - else + catch (Exception ex) { - _logger.LogInformation($"{imeiDel} 胎动记录{isFetalMovementExisted},数据采样时间:{fetalMovementSampleTime}|{fmNowSubtract.ToString("yyyy-MM-dd HH:mm:ss")}, 周期:{statStartTime}-{statEndTime} 不足两条,不能判断是否持续佩戴"); + _logger.LogError($"处理延时计算胎动数据异常:{ex.Message}, {ex.StackTrace}"); } - } - else - { - _logger.LogInformation($"{imeiDel} 胎动记录{isFetalMovementExisted},数据采样时间:{fetalMovementSampleTime}|{fmNowSubtract.ToString("yyyy-MM-dd HH:mm:ss")}, 周期:{statStartTime}-{statEndTime} 已处理"); - } + + }); + + thread.Start(); } @@ -2185,10 +2219,11 @@ namespace HealthMonitor.WebApi { _logger.LogInformation($"{heartRate.Serialno},统计周期:{statStartTime.ToString("yyyy-MM-dd HH:mm:ss")}----{statEndTime.ToString("yyyy-MM-dd HH:mm:ss")} ,胎心已处理"); } - + await Task.Delay(TimeSpan.FromSeconds(1)); // 跳出循环 if (statEndTime == boundaryStatEndTime) { + _logger.LogInformation($"{heartRate.Serialno} 迭代完成跳出循环 "); break; } }