Преглед на файлове

胎心计算在佩戴期间每15钟计算一次

datasub12_fetal_heart_rate_0
H Vs преди 7 месеца
родител
ревизия
fae0692736
променени са 2 файла, в които са добавени 51 реда и са изтрити 50 реда
  1. +23
    -20
      HealthMonitor.Service/Resolver/PregnancyHeartRateResolver.cs
  2. +28
    -30
      HealthMonitor.WebApi/Worker.cs

+ 23
- 20
HealthMonitor.Service/Resolver/PregnancyHeartRateResolver.cs Целия файл

@@ -199,30 +199,33 @@ namespace HealthMonitor.Service.Resolver
#endregion

#region 定时计算胎心数据触发器 {interval} 秒后
var fetalKey = $"health_monitor/schedule_push/cal_fetal_heart_rate/imei/{heartRate.Serialno}";
await SetIntervalTriggerAsync(fetalKey, heartRate.Serialno, 60 * 15);
//var fetalKey = $"health_monitor/schedule_push/cal_fetal_heart_rate/imei/{heartRate.Serialno}";
//await SetIntervalTriggerAsync(fetalKey, heartRate.Serialno, 60 * 15);
#endregion

//var scheduleFetalPush = await _serviceEtcd.GetValAsync(fetalKey).ConfigureAwait(false);
//if (string.IsNullOrWhiteSpace(scheduleFetalPush))
//{
// //var fetalInterval = (int)watchConfig["interval"]!;
// var fetalInterval = 60 * 15;
// var fetalNow= DateTime.Now;
// var fetalTimeNextRun = fetalNow.Add(TimeSpan.FromSeconds(fetalInterval));
// var fetalTTL = fetalInterval;
// var data = new
// {
// imei = heartRate.Serialno,
// create_time = fetalNow.ToString("yyyy-MM-dd HH:mm:ss"),
// fetalTTL,
// next_run_time = fetalTimeNextRun.ToString("yyyy-MM-dd HH:mm:ss")
// };
// var result = JsonConvert.SerializeObject(data);
// await _serviceEtcd.PutValAsync(fetalKey, result, fetalTTL, false).ConfigureAwait(false);
//}
#region 定时计算胎心数据触发器下一刻钟后
// 获取当前时间
DateTime nowQuarter = DateTime.Now;

// 计算下一个15分钟的刻钟
int minutesToAdd = 15 - (nowQuarter.Minute % 15);
if (minutesToAdd == 15)
{
minutesToAdd = 0; // 如果已经是刻钟,则不需要增加分钟
}
// 计算下一刻钟的时间
DateTime nextQuarter = nowQuarter.AddMinutes(minutesToAdd)
.AddSeconds(-nowQuarter.Second)
.AddMilliseconds(-nowQuarter.Millisecond);

// 计算时间差
TimeSpan timeDifference = nextQuarter - nowQuarter;

var fetalKey = $"health_monitor/schedule_push/cal_fetal_heart_rate/imei/{heartRate.Serialno}";
await SetIntervalTriggerAsync(fetalKey, heartRate.Serialno, (long)timeDifference.TotalSeconds);
#endregion


#region 定时计算胎动数据触发器 0 点开始
var fetalMovementKey = $"health_monitor/schedule_push/cal_fetal_movement/imei/{heartRate.Serialno}";
/// 计算 0 点秒数


+ 28
- 30
HealthMonitor.WebApi/Worker.cs Целия файл

@@ -256,16 +256,37 @@ namespace HealthMonitor.WebApi
var commonPHR = await _serviceTDengine.InitPregnancyCommonHeartRateModeAsync(imeiDel);
if (commonPHR != null)
{
# region 计算胎心数据
# region 计算上刻钟的胎心数据
// 告警上限阀值
var upperAlarmThreshold = (int)watchConfig!["upperAlarmThreshold"]!;
// 告警下限阀值
var lowerAlarmThreshold = (int)watchConfig["lowerAlarmThreshold"]!;

var lastPhr = await _serviceTDengine.GetLastAsync<PregnancyHeartRateModel>();
//var lastPhr = await _serviceTDengine.GetLastAsync<PregnancyHeartRateModel>();
// 计算胎心=孕妇心率*系数
var fetalHeartRate = SafeType.SafeInt(lastPhr.PregnancyHeartRate * commonPHR?.StatModeAvgFprCoefficient!);
//var fetalHeartRate = SafeType.SafeInt(lastPhr.PregnancyHeartRate * commonPHR?.StatModeAvgFprCoefficient!);

// 上15分钟的数据
// 获取当前时间
DateTime now = DateTime.Now;

// 计算当前时间到上一刻钟的分钟数
int minutesToSubtract = now.Minute % 15;

// 计算上一刻钟的时间
DateTime previousQuarter = now.AddMinutes(-minutesToSubtract).AddSeconds(-now.Second).AddMilliseconds(-now.Millisecond);

var lastQuarterPhr = await _serviceTDengine.GetBySerialNoAsync<PregnancyHeartRateModel>(imeiDel, 1);

var filteredPhr = lastQuarterPhr
.Where(i => i.LastUpdate <= previousQuarter && i.LastUpdate >= previousQuarter.AddMinutes(-15))
.ToList();

var lastQuarterPhrValue = filteredPhr.Count == 1
? filteredPhr.First().PregnancyHeartRate
: filteredPhr.Average(i => i.PregnancyHeartRate);

var fetalHeartRate = SafeType.SafeInt(lastQuarterPhrValue * commonPHR?.StatModeAvgFprCoefficient!);
var sampleTime = DateTimeUtil.ConvertToTimeStamp(DateTime.Now).ToString();
var isAbnormal = fetalHeartRate > upperAlarmThreshold ? 1 : (fetalHeartRate < lowerAlarmThreshold ? 2 : 0);
@@ -278,8 +299,8 @@ namespace HealthMonitor.WebApi
HeartRate = fetalHeartRate,
SampleTime = sampleTime,
IsAbnormal = isAbnormal,
StatStartTime = commonPHR.StatStartTime,
StatEndTime = commonPHR.StatEndTime,
StatStartTime = filteredPhr.OrderByDescending(i=>i.LastUpdate).First().LastUpdate,
StatEndTime = filteredPhr.OrderByDescending(i => i.LastUpdate).Last().LastUpdate,
CreateTime = DateTime.Now,
Method = 1,
IsDisplay = 1,
@@ -293,30 +314,7 @@ namespace HealthMonitor.WebApi
#endregion

#region 注册定时计算胎心数据触发器 {interval} 秒后
//var fetalKey = $"health_monitor/schedule_push/cal_fetal_heart_rate/imei/{imeiDel}";
//var fetalKey = key;
//var scheduleFetalPush = await _serviceEtcd.GetValAsync(fetalKey).ConfigureAwait(false);
//if (string.IsNullOrWhiteSpace(scheduleFetalPush))
//{
// // var fetalInterval = (int)watchConfig!["interval"]!;
// var fetalInterval = 60 * 15;

// var fetalNow = DateTime.Now;
// var fetalTimeNextRun = fetalNow.Add(TimeSpan.FromSeconds(fetalInterval));
// var fetalTTL = fetalInterval;
// var data = new
// {
// imei = imeiDel,
// create_time = fetalNow.ToString("yyyy-MM-dd HH:mm:ss"),
// fetalTTL,
// next_run_time = fetalTimeNextRun.ToString("yyyy-MM-dd HH:mm:ss")
// };
// var result = JsonConvert.SerializeObject(data);
// await _serviceEtcd.PutValAsync(fetalKey, result, fetalTTL, false).ConfigureAwait(false);
//}

await SetIntervalTriggerAsync(key, imeiDel, 60 * 15);

//await SetIntervalTriggerAsync(key, imeiDel, 60 * 15);
#endregion
}
}


Loading…
Отказ
Запис