diff --git a/HealthMonitor.Service/Biz/db/TDengineService.cs b/HealthMonitor.Service/Biz/db/TDengineService.cs
index c77ec6b..f0dd7dc 100644
--- a/HealthMonitor.Service/Biz/db/TDengineService.cs
+++ b/HealthMonitor.Service/Biz/db/TDengineService.cs
@@ -1023,7 +1023,7 @@ namespace HealthMonitor.Service.Biz.db
// _logger.LogInformation($"{serialNo} 心率数据不足,无法计算其众数");
// return null;
//}
- _logger.LogInformation($"{serialNo} 去除高频数据后的数据集: " + string.Join(", ", filteredCollection));
+ _logger.LogInformation($"{serialNo} 去除高频数据后的数据集: " + string.Join(", ", res));
#region 计算众数
var mode = res.GroupBy(n => n)
diff --git a/HealthMonitor.Service/Resolver/PregnancyHeartRateResolver.cs b/HealthMonitor.Service/Resolver/PregnancyHeartRateResolver.cs
index 574c8e5..8cc894e 100644
--- a/HealthMonitor.Service/Resolver/PregnancyHeartRateResolver.cs
+++ b/HealthMonitor.Service/Resolver/PregnancyHeartRateResolver.cs
@@ -151,7 +151,9 @@ namespace HealthMonitor.Service.Resolver
// 如果需要,将时间差转换为秒
var timeDiffInSeconds = timeDiff.TotalSeconds;
-
+
+ // 高频统计结束时间
+ var FreqStatsEnd = DateTime.Now;
// 高频心率启动
if (timeDiffInSeconds <= highFreqSampleInterval)
{
@@ -179,8 +181,10 @@ namespace HealthMonitor.Service.Resolver
// 计算一般心率得到胎心系数
//await SaveAndPushFreqFetalHeartRateAsync(heartRate, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString());
// 高频数据不建模
- await SaveAndPushFreqFetalHeartRateAsync(heartRate, commonPHR, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString());
-
+ FreqStatsEnd = (DateTime)heartRate.LastUpdate!;
+ _logger.LogInformation($"{heartRate.Serialno} 高频状态已经持续{(FreqStatsEnd- phrFreqstatus!.LastUpdate).TotalSeconds} 秒,连续 {stopHighFreqSampleCount} 次采样心率正常,将下发指令");
+ await SaveAndPushFreqFetalHeartRateAsync(heartRate, commonPHR, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(phrFreqstatus!.LastUpdate).ToString());
+
}
#endregion
}
@@ -204,7 +208,10 @@ namespace HealthMonitor.Service.Resolver
//await SaveAndPushFetalHeartRateAsync(heartRate, upperAlarmThreshold, lowerAlarmThreshold, avgPhr);
//await SaveAndPushFreqFetalHeartRateAsync(heartRate, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString());
// 高频数据不建模
- await SaveAndPushFreqFetalHeartRateAsync(heartRate, commonPHR, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString());
+ FreqStatsEnd = firstTwoPhr[1];
+ _logger.LogInformation($"{heartRate.Serialno} 高频状态已经持续{(FreqStatsEnd - phrFreqstatus!.LastUpdate).TotalSeconds} 秒,highFreqSampleTimes={highFreqSampleTimes}秒,即将结束高频状态,将下发指令");
+
+ await SaveAndPushFreqFetalHeartRateAsync(heartRate, commonPHR, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(phrFreqstatus!.LastUpdate).ToString());
}
@@ -224,15 +231,16 @@ namespace HealthMonitor.Service.Resolver
//await SaveAndPushFreqFetalHeartRateAsync(heartRate, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString());
//await SaveAndPushFreqFetalHeartRateAsync(heartRate, commonPHR, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString());
// 高频数据不建模
- await SaveAndPushFreqFetalHeartRateAsync(heartRate, commonPHR, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString());
+ FreqStatsEnd = firstTwoPhr[1];
+ _logger.LogInformation($"{heartRate.Serialno} 高频状态已经持续{(FreqStatsEnd - phrFreqstatus!.LastUpdate).TotalSeconds} 秒,超过规定的 {highFreqSampleTimes} 秒,即将结束高频状态,将下发指令");
+ await SaveAndPushFreqFetalHeartRateAsync(heartRate, commonPHR, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(phrFreqstatus!.LastUpdate).ToString());
}
// 删除高频状态的首条记录
await _deviceCacheMgr.DelPregnancyHeartRateFreqStatusAsync(heartRate.Serialno);
- /// 设置高频状态
- _logger.LogInformation($"{heartRate.Serialno} 结束高频心率状态 timeDiffInSeconds {timeDiffInSeconds},highFreqSampleInterval:{highFreqSampleInterval}");
+ _logger.LogInformation($"{heartRate.Serialno} 结束高频心率状态 timeDiffInSeconds {timeDiffInSeconds},highFreqSampleInterval:{highFreqSampleInterval},高频状态持续{(firstTwoPhr[1] - phrFreqstatus!.LastUpdate).TotalSeconds} 秒");
}
// 正常心率
else
@@ -242,23 +250,23 @@ namespace HealthMonitor.Service.Resolver
// 获取当前时间
DateTime nowInterval = (DateTime)heartRate.LastUpdate!;
- // 计算last_update到上一刻钟的分钟数
+ // 计算last_update到上一间隔的分钟数
int minutesToSubtract = nowInterval.Minute % intervalFHR;
- // 计算上一刻钟的时间
+ // 计算上一间隔的时间
DateTime previousInterval = nowInterval.AddMinutes(-minutesToSubtract).AddSeconds(-nowInterval.Second).AddMilliseconds(-nowInterval.Millisecond);
// 使用 last_update 上一刻
var sampleTimeFHR = DateTimeUtil.ConvertToTimeStamp(previousInterval).ToString();
- // 计算last_update到下一刻钟的分钟数
+ // 计算last_update到下一间隔的分钟数
int minutesToAdd = intervalFHR - (nowInterval.Minute % intervalFHR);
if (minutesToAdd == intervalFHR)
{
- minutesToAdd = 0; // 如果已经是刻钟,则不需要增加分钟
+ minutesToAdd = 0; // 如果已经是间隔,则不需要增加分钟
}
- // 计算下一刻钟的时间
+ // 计算下一间隔的时间
DateTime nextInterval = nowInterval.AddMinutes(minutesToAdd)
.AddSeconds(-nowInterval.Second)
.AddMilliseconds(-nowInterval.Millisecond);
@@ -289,7 +297,7 @@ namespace HealthMonitor.Service.Resolver
fetalHeartRateIsAbnormal = fetalHeartRate > upperAlarmThreshold ? 1 : (fetalHeartRate < lowerAlarmThreshold ? 2 : 0);
fetalHeartRateIsAbnormal = 0;// 不是高频数据,按正常值
- HisGpsFetalHeartRate gpsFetalHeartRate = new()
+ /* HisGpsFetalHeartRate gpsFetalHeartRate = new()
{
FetalHeartRateId = Guid.NewGuid().ToString("D"),
PersonId = commonPHR!.PersonId,
@@ -334,6 +342,11 @@ namespace HealthMonitor.Service.Resolver
};
await _serviceMqProcess.ProcessIMEIEventMessageAsync(fhrMsgId, topic, fhrMsg).ConfigureAwait(false);
}
+
+ */
+ await SaveAndPushFreqFetalHeartRateAsync(heartRate, commonPHR!, upperAlarmThreshold, lowerAlarmThreshold, phrValue, sampleTimeFHR,false);
+
+
}
}
@@ -510,17 +523,17 @@ namespace HealthMonitor.Service.Resolver
//await SetIntervalTriggerAsync(fetalKey, heartRate.Serialno, 60 * 15);
#endregion
- #region 定时计算胎心数据触发器下一刻钟后
+ #region 定时计算胎心数据触发器下一间隔后
//// 获取当前时间
//DateTime nowInterval = DateTime.Now;
- //// 计算下一个15分钟的刻钟
+ //// 计算下一个15分钟的间隔
//int minutesToAdd = 15 - (nowInterval.Minute % 15);
//if (minutesToAdd == 15)
//{
- // minutesToAdd = 0; // 如果已经是刻钟,则不需要增加分钟
+ // minutesToAdd = 0; // 如果已经是间隔,则不需要增加分钟
//}
- //// 计算下一刻钟的时间
+ //// 计算下一间隔的时间
//DateTime nextInterval = nowInterval.AddMinutes(minutesToAdd)
// .AddSeconds(-nowInterval.Second)
// .AddMilliseconds(-nowInterval.Millisecond);
@@ -722,12 +735,23 @@ namespace HealthMonitor.Service.Resolver
// }
//}
- private async Task SaveAndPushFreqFetalHeartRateAsync(HisGpsHeartRate heartRate, PregnancyCommonHeartRateModel commonPHR, int upperAlarmThreshold, int lowerAlarmThreshold, double avgPhr,string sampleTime)
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// 使用高频心率的首条last_update
+ ///
+ ///
+ private async Task SaveAndPushFreqFetalHeartRateAsync(HisGpsHeartRate heartRate, PregnancyCommonHeartRateModel commonPHR, int upperAlarmThreshold, int lowerAlarmThreshold, double phr,string sampleTime,bool isFreq = true)
{
// 计算胎心=孕妇心率*系数
- var fetalHeartRate = SafeType.SafeInt(avgPhr * commonPHR?.StatModeAvgFprCoefficient!);
+ var fetalHeartRate = SafeType.SafeInt(phr * commonPHR?.StatModeAvgFprCoefficient!);
var isAbnormal = fetalHeartRate > upperAlarmThreshold ? 1 : (fetalHeartRate < lowerAlarmThreshold ? 2 : 0);
-
+ if (!isFreq) isAbnormal = 0;
// 保存到 数据服务 MySQL 数据库
HisGpsFetalHeartRate gpsFetalHeartRate = new()
{