|
|
@@ -106,8 +106,8 @@ namespace HealthMonitor.Service.Resolver |
|
|
|
|
|
|
|
if (isFetalHeartEnable) |
|
|
|
{ |
|
|
|
// 高频心率采样间隔 |
|
|
|
var highFreqSampleInterval = (int)watchConfig!["highFreqSampleInterval"]!; |
|
|
|
// 高频心率采样间隔 highFreqSampleInterval = highFreqSampleInterval+5,增加5秒兼容 |
|
|
|
var highFreqSampleInterval = (int)watchConfig!["highFreqSampleInterval"]!+5; |
|
|
|
// 触发高频监测的心率上限值 |
|
|
|
var triggerHighFreqHigh = (int)watchConfig["triggerHighFreqHigh"]!; |
|
|
|
// 触发高频监测的心率下限值 |
|
|
@@ -135,7 +135,7 @@ namespace HealthMonitor.Service.Resolver |
|
|
|
if (commonPHR == null) |
|
|
|
{ |
|
|
|
// 处理孕妇业务,计算一般心率并下发 |
|
|
|
commonPHR = await _serviceTDengine.InitPregnancyCommonHeartRateModeAsync(heartRate.Serialno); |
|
|
|
commonPHR = await _serviceTDengine.InitPregnancyCommonHeartRateModeAsync(heartRate.Serialno,highFreqSampleInterval: highFreqSampleInterval); |
|
|
|
// 建模完成 |
|
|
|
var flag = await _serviceIotApi.SetFetalConfig(heartRate.Serialno, 1, commonPHR!.MaxValue, commonPHR!.MinValue); |
|
|
|
_logger.LogInformation($"{heartRate.Serialno} 记录数量足够,建模完成"); |
|
|
@@ -152,8 +152,8 @@ namespace HealthMonitor.Service.Resolver |
|
|
|
// 如果需要,将时间差转换为秒 |
|
|
|
var timeDiffInSeconds = timeDiff.TotalSeconds; |
|
|
|
|
|
|
|
// 高频心率启动,highFreqSampleInterval = highFreqSampleInterval+5,增加5秒兼容 |
|
|
|
if (timeDiffInSeconds <= (highFreqSampleInterval+5)) |
|
|
|
// 高频心率启动 |
|
|
|
if (timeDiffInSeconds <= highFreqSampleInterval) |
|
|
|
{ |
|
|
|
|
|
|
|
var phrFreqstatus = await _deviceCacheMgr.GetPregnancyHeartRateFreqStatusAsync(heartRate.Serialno); |
|
|
@@ -177,7 +177,9 @@ namespace HealthMonitor.Service.Resolver |
|
|
|
{ |
|
|
|
var avgPhr = lastPhr.Select(i => i.PregnancyHeartRate).Average(); |
|
|
|
// 计算一般心率得到胎心系数 |
|
|
|
await SaveAndPushFreqFetalHeartRateAsync(heartRate, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString()); |
|
|
|
//await SaveAndPushFreqFetalHeartRateAsync(heartRate, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString()); |
|
|
|
// 高频数据不建模 |
|
|
|
await SaveAndPushFreqFetalHeartRateAsync(heartRate, commonPHR, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString()); |
|
|
|
|
|
|
|
} |
|
|
|
#endregion |
|
|
@@ -200,7 +202,9 @@ namespace HealthMonitor.Service.Resolver |
|
|
|
// 推送胎心数据到 api/v1/open/OpenIot/SetFetalHeartRateConfig |
|
|
|
// 计算一般心率得到胎心系数 |
|
|
|
//await SaveAndPushFetalHeartRateAsync(heartRate, upperAlarmThreshold, lowerAlarmThreshold, avgPhr); |
|
|
|
await SaveAndPushFreqFetalHeartRateAsync(heartRate, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString()); |
|
|
|
//await SaveAndPushFreqFetalHeartRateAsync(heartRate, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString()); |
|
|
|
// 高频数据不建模 |
|
|
|
await SaveAndPushFreqFetalHeartRateAsync(heartRate, commonPHR, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
@@ -217,7 +221,10 @@ namespace HealthMonitor.Service.Resolver |
|
|
|
// 推送胎心数据到 api/v1/open/OpenIot/SetFetalHeartRateConfig |
|
|
|
// 计算一般心率得到胎心系数 |
|
|
|
//await SaveAndPushFetalHeartRateAsync(heartRate, upperAlarmThreshold, lowerAlarmThreshold, avgPhr); |
|
|
|
await SaveAndPushFreqFetalHeartRateAsync(heartRate, upperAlarmThreshold, lowerAlarmThreshold, avgPhr, DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString()); |
|
|
|
//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()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
@@ -701,7 +708,107 @@ namespace HealthMonitor.Service.Resolver |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private async Task SaveAndPushFetalHeartRateAsync(HisGpsHeartRate heartRate, int upperAlarmThreshold, int lowerAlarmThreshold, double avgPhr) |
|
|
|
//private async Task SaveAndPushFetalHeartRateAsync(HisGpsHeartRate heartRate, int upperAlarmThreshold, int lowerAlarmThreshold, double avgPhr) |
|
|
|
//{ |
|
|
|
// var commonPHR = await _serviceTDengine.InitPregnancyCommonHeartRateModeAsync(heartRate.Serialno); |
|
|
|
// if (commonPHR != null) |
|
|
|
// { |
|
|
|
// // 保存到TDengine数据库 |
|
|
|
// await _serviceTDengine.InsertAsync<PregnancyCommonHeartRateModel>("hm_pchr", commonPHR); |
|
|
|
// // 计算胎心=孕妇心率*系数 |
|
|
|
// var fetalHeartRate = SafeType.SafeInt(avgPhr * commonPHR?.StatModeAvgFprCoefficient!); |
|
|
|
// var sampleTime = DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString(); |
|
|
|
// var isAbnormal = fetalHeartRate > upperAlarmThreshold ? 1 : (fetalHeartRate < lowerAlarmThreshold ? 2 : 0); |
|
|
|
|
|
|
|
// // 保存到 数据服务 MySQL 数据库 |
|
|
|
// HisGpsFetalHeartRate gpsFetalHeartRate = new () |
|
|
|
// { |
|
|
|
// FetalHeartRateId = Guid.NewGuid().ToString("D"), |
|
|
|
// PersonId = commonPHR!.PersonId, |
|
|
|
// Serialno = heartRate.Serialno, |
|
|
|
// HeartRate = fetalHeartRate, |
|
|
|
// SampleTime = sampleTime.Length > 10 ? sampleTime.Substring(0, 10) : sampleTime, |
|
|
|
// IsAbnormal = isAbnormal, |
|
|
|
// StatStartTime = commonPHR.StatStartTime, |
|
|
|
// StatEndTime = commonPHR.StatEndTime, |
|
|
|
// CreateTime = DateTime.Now, |
|
|
|
// Method = 1, |
|
|
|
// IsDisplay = 1, |
|
|
|
// DeviceKey = commonPHR!.DeviceKey |
|
|
|
// }; |
|
|
|
// await _hisFetalHeartApiClient.AddAsync(gpsFetalHeartRate).ConfigureAwait(false); |
|
|
|
|
|
|
|
// // 推送到api/v1/open/OpenIot/SetFetalHeartRateConfig |
|
|
|
// await _serviceIotApi.SetFetalHeartRateConfig(heartRate.Serialno, fetalHeartRate, sampleTime, isAbnormal); |
|
|
|
|
|
|
|
// // 推送到微信 |
|
|
|
// var device = await _deviceCacheMgr.GetDeviceBySerialNoAsync(heartRate.Serialno).ConfigureAwait(false); |
|
|
|
|
|
|
|
// var deviceId = device?.DeviceId; |
|
|
|
// var msg = new |
|
|
|
// { |
|
|
|
// messageId = "", |
|
|
|
// topic = "topic.push.wx", |
|
|
|
// time="" |
|
|
|
// }; |
|
|
|
// } |
|
|
|
//} |
|
|
|
|
|
|
|
private async Task SaveAndPushFreqFetalHeartRateAsync(HisGpsHeartRate heartRate, PregnancyCommonHeartRateModel commonPHR, int upperAlarmThreshold, int lowerAlarmThreshold, double avgPhr,string sampleTime) |
|
|
|
{ |
|
|
|
// 计算胎心=孕妇心率*系数 |
|
|
|
var fetalHeartRate = SafeType.SafeInt(avgPhr * commonPHR?.StatModeAvgFprCoefficient!); |
|
|
|
var isAbnormal = fetalHeartRate > upperAlarmThreshold ? 1 : (fetalHeartRate < lowerAlarmThreshold ? 2 : 0); |
|
|
|
|
|
|
|
// 保存到 数据服务 MySQL 数据库 |
|
|
|
HisGpsFetalHeartRate gpsFetalHeartRate = new() |
|
|
|
{ |
|
|
|
FetalHeartRateId = Guid.NewGuid().ToString("D"), |
|
|
|
PersonId = commonPHR!.PersonId, |
|
|
|
Serialno = heartRate.Serialno, |
|
|
|
HeartRate = fetalHeartRate, |
|
|
|
SampleTime = sampleTime.Length > 10 ? sampleTime.Substring(0, 10) : sampleTime, |
|
|
|
IsAbnormal = isAbnormal, |
|
|
|
StatStartTime = commonPHR.StatStartTime, |
|
|
|
StatEndTime = commonPHR.StatEndTime, |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
Method = 1, |
|
|
|
IsDisplay = 1, |
|
|
|
DeviceKey = commonPHR!.DeviceKey |
|
|
|
}; |
|
|
|
await _hisFetalHeartApiClient.AddAsync(gpsFetalHeartRate).ConfigureAwait(false); |
|
|
|
|
|
|
|
// 推送到api/v1/open/OpenIot/SetFetalHeartRateConfig |
|
|
|
await _serviceIotApi.SetFetalHeartRateConfig(heartRate.Serialno, fetalHeartRate, sampleTime, isAbnormal); |
|
|
|
|
|
|
|
// 推送到微信 |
|
|
|
if (isAbnormal != 0) |
|
|
|
{ |
|
|
|
var device = await _deviceCacheMgr.GetDeviceBySerialNoAsync(heartRate.Serialno).ConfigureAwait(false); |
|
|
|
var fhrMsgId = $"{heartRate.Serialno}-{sampleTime}-{Guid.NewGuid().ToString("D")[^3..]}"; |
|
|
|
var topic = "topic.push.wx"; |
|
|
|
var fhrMsg = new |
|
|
|
{ |
|
|
|
messageId = fhrMsgId, |
|
|
|
topic = topic, |
|
|
|
time = DateTimeUtil.GetDateTimeFromUnixTimeMilliseconds(long.Parse(sampleTime.Length < 13 ? sampleTime.PadRight(13, '0') : sampleTime)).ToString("yyyy-MM-dd HH:mm:ss"), |
|
|
|
data = new |
|
|
|
{ |
|
|
|
deviceId = device?.DeviceId, |
|
|
|
imei = heartRate.Serialno, |
|
|
|
alarmTypeId = 12, |
|
|
|
alarmDeviceName = heartRate.Serialno, |
|
|
|
alarmRemarks = JsonConvert.SerializeObject(new { fetalHeartValue = fetalHeartRate, isAbnormal = isAbnormal }), |
|
|
|
address = string.Empty, |
|
|
|
deviceKey = device?.DeviceId |
|
|
|
} |
|
|
|
}; |
|
|
|
await _serviceMqProcess.ProcessIMEIEventMessageAsync(fhrMsgId, topic, fhrMsg).ConfigureAwait(false); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private async Task SaveAndPushFreqFetalHeartRateAsync(HisGpsHeartRate heartRate, int upperAlarmThreshold, int lowerAlarmThreshold, double avgPhr, string sampleTime) |
|
|
|
{ |
|
|
|
var commonPHR = await _serviceTDengine.InitPregnancyCommonHeartRateModeAsync(heartRate.Serialno); |
|
|
|
if (commonPHR != null) |
|
|
@@ -710,11 +817,10 @@ namespace HealthMonitor.Service.Resolver |
|
|
|
await _serviceTDengine.InsertAsync<PregnancyCommonHeartRateModel>("hm_pchr", commonPHR); |
|
|
|
// 计算胎心=孕妇心率*系数 |
|
|
|
var fetalHeartRate = SafeType.SafeInt(avgPhr * commonPHR?.StatModeAvgFprCoefficient!); |
|
|
|
var sampleTime = DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString(); |
|
|
|
var isAbnormal = fetalHeartRate > upperAlarmThreshold ? 1 : (fetalHeartRate < lowerAlarmThreshold ? 2 : 0); |
|
|
|
|
|
|
|
// 保存到 数据服务 MySQL 数据库 |
|
|
|
HisGpsFetalHeartRate gpsFetalHeartRate = new () |
|
|
|
HisGpsFetalHeartRate gpsFetalHeartRate = new() |
|
|
|
{ |
|
|
|
FetalHeartRateId = Guid.NewGuid().ToString("D"), |
|
|
|
PersonId = commonPHR!.PersonId, |
|
|
@@ -735,25 +841,51 @@ namespace HealthMonitor.Service.Resolver |
|
|
|
await _serviceIotApi.SetFetalHeartRateConfig(heartRate.Serialno, fetalHeartRate, sampleTime, isAbnormal); |
|
|
|
|
|
|
|
// 推送到微信 |
|
|
|
var device = await _deviceCacheMgr.GetDeviceBySerialNoAsync(heartRate.Serialno).ConfigureAwait(false); |
|
|
|
|
|
|
|
var deviceId = device?.DeviceId; |
|
|
|
var msg = new |
|
|
|
if (isAbnormal != 0) |
|
|
|
{ |
|
|
|
messageId = "", |
|
|
|
topic = "topic.push.wx", |
|
|
|
time="" |
|
|
|
}; |
|
|
|
var device = await _deviceCacheMgr.GetDeviceBySerialNoAsync(heartRate.Serialno).ConfigureAwait(false); |
|
|
|
var fhrMsgId = $"{heartRate.Serialno}-{sampleTime}-{Guid.NewGuid().ToString("D")[^3..]}"; |
|
|
|
var topic = "topic.push.wx"; |
|
|
|
var fhrMsg = new |
|
|
|
{ |
|
|
|
messageId = fhrMsgId, |
|
|
|
topic = topic, |
|
|
|
time = DateTimeUtil.GetDateTimeFromUnixTimeMilliseconds(long.Parse(sampleTime.Length < 13 ? sampleTime.PadRight(13, '0') : sampleTime)).ToString("yyyy-MM-dd HH:mm:ss"), |
|
|
|
data = new |
|
|
|
{ |
|
|
|
deviceId = device?.DeviceId, |
|
|
|
imei = heartRate.Serialno, |
|
|
|
alarmTypeId = 12, |
|
|
|
alarmDeviceName = heartRate.Serialno, |
|
|
|
alarmRemarks = JsonConvert.SerializeObject(new { fetalHeartValue = fetalHeartRate, isAbnormal = isAbnormal }), |
|
|
|
address = string.Empty, |
|
|
|
deviceKey = device?.DeviceId |
|
|
|
} |
|
|
|
}; |
|
|
|
await _serviceMqProcess.ProcessIMEIEventMessageAsync(fhrMsgId, topic, fhrMsg).ConfigureAwait(false); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private async Task SaveAndPushFreqFetalHeartRateAsync(HisGpsHeartRate heartRate, int upperAlarmThreshold, int lowerAlarmThreshold, double avgPhr,string sampleTime) |
|
|
|
/// <summary> |
|
|
|
/// |
|
|
|
/// </summary> |
|
|
|
/// <param name="heartRate"></param> |
|
|
|
/// <param name="upperAlarmThreshold"></param> |
|
|
|
/// <param name="lowerAlarmThreshold"></param> |
|
|
|
/// <param name="avgPhr"></param> |
|
|
|
/// <param name="sampleTime"></param> |
|
|
|
/// <returns></returns> |
|
|
|
private async Task SaveAndPushFreqFetalHeartRate2Async(HisGpsHeartRate heartRate, int upperAlarmThreshold, int lowerAlarmThreshold, double avgPhr, string sampleTime) |
|
|
|
{ |
|
|
|
var commonPHR = await _serviceTDengine.InitPregnancyCommonHeartRateModeAsync(heartRate.Serialno); |
|
|
|
var commonPHR = await _serviceTDengine.GetLastAsync<PregnancyCommonHeartRateModel>(heartRate.Serialno); |
|
|
|
if (commonPHR != null) |
|
|
|
{ |
|
|
|
// 保存到TDengine数据库 |
|
|
|
await _serviceTDengine.InsertAsync<PregnancyCommonHeartRateModel>("hm_pchr", commonPHR); |
|
|
|
//await _serviceTDengine.InsertAsync<PregnancyCommonHeartRateModel>("hm_pchr", commonPHR); |
|
|
|
// 计算胎心=孕妇心率*系数 |
|
|
|
var fetalHeartRate = SafeType.SafeInt(avgPhr * commonPHR?.StatModeAvgFprCoefficient!); |
|
|
|
var isAbnormal = fetalHeartRate > upperAlarmThreshold ? 1 : (fetalHeartRate < lowerAlarmThreshold ? 2 : 0); |
|
|
@@ -780,7 +912,7 @@ namespace HealthMonitor.Service.Resolver |
|
|
|
await _serviceIotApi.SetFetalHeartRateConfig(heartRate.Serialno, fetalHeartRate, sampleTime, isAbnormal); |
|
|
|
|
|
|
|
// 推送到微信 |
|
|
|
if (isAbnormal!=0) |
|
|
|
if (isAbnormal != 0) |
|
|
|
{ |
|
|
|
var device = await _deviceCacheMgr.GetDeviceBySerialNoAsync(heartRate.Serialno).ConfigureAwait(false); |
|
|
|
var fhrMsgId = $"{heartRate.Serialno}-{sampleTime}-{Guid.NewGuid().ToString("D")[^3..]}"; |
|
|
@@ -808,6 +940,7 @@ namespace HealthMonitor.Service.Resolver |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private async Task SetIntervalTriggerAsync(string key,string imei, long interval) |
|
|
|
{ |
|
|
|
// var key = $"health_monitor/schedule_push/{type}/imei/{imei}"; |
|
|
|