ソースを参照

只下发标定值,不计算增量值,保存数据库(修改个人信息)

datasub12_previous
H Vs 1年前
コミット
d69d794601
3個のファイルの変更22行の追加421行の削除
  1. +0
    -413
      HealthMonitor.Service/Resolver/BloodpressResolver.cs
  2. +9
    -0
      HealthMonitor.WebApi/Controllers/HealthMonitor/HmBloodPressConfigManualCalibrationController.cs
  3. +13
    -8
      HealthMonitor.WebApi/Model/Request/BloodPressManualCalibration.cs

+ 0
- 413
HealthMonitor.Service/Resolver/BloodpressResolver.cs ファイルの表示

@@ -152,14 +152,12 @@ namespace HealthMonitor.Service.Resolver

#endregion


#region 初始化常规血压标定值标定值
var bpRef = await _bpRefValCacheManager.GetBloodPressReferenceValueAsync(age, gender, isHypertension);
systolicRefValue = bpRef!.Systolic;//?
diastolicRefValue = bpRef!.Diastolic;//?
#endregion


if (string.IsNullOrWhiteSpace(person?.Person.Remarks))
{
#region 初始化计算增量值(个人血压信息)
@@ -479,417 +477,6 @@ namespace HealthMonitor.Service.Resolver

_logger.LogError($"解析血压出错, {ex.Message}\n{ex.StackTrace}");
}
}


// public async Task ExecuteMessageAsync0()
// {
// var messageId = _messageId.Value;
// var bp = _msgData.Value!;

// #region 获取个人信息

// var person = await _personCacheMgr.GetDeviceGpsPersonCacheBySerialNoAsync(bp.MessageId, bp.Serialno).ConfigureAwait(false);
// //验证这个信息是否存在
// if (person == null || person?.Person.BornDate == null)
// {
// _logger.LogWarning("验证个人信息,找不到个人信息,跳过此消息");
// return;
// }
// // 验证年龄是否在范围 (2 - 120)
// var age = SafeType.SafeInt(DateTime.Today.Year - person?.Person.BornDate!.Value.Year!);
// if (age < 1 || age > 120)
// {
// _logger.LogWarning("验证年龄,不在范围 (2 - 120)岁,跳过此消息");
// return;
// }
// #endregion

// var gender = person?.Person.Gender == true ? 1 : 2;
// var isHypertension = SafeType.SafeBool(person?.Person.Ishypertension!);
// var height = SafeType.SafeDouble(person?.Person.Height!);
// var weight = SafeType.SafeDouble(person?.Person.Weight!);

// #region 计算增量值

// var bpRef = await _bpRefValCacheManager.GetBloodPressReferenceValueAsync(age, gender, isHypertension);

// var lastPush = await _serviceTDengine.GetLastAsync("stb_hm_bp_push_ref_inc_value", $"serialno='{bp.Serialno}' order by ts desc");
// //var ts = last?[0];
// var systolicRefValue = bpRef?.Systolic;//?
// var diastolicRefValue = bpRef?.Diastolic;//?
// long duration = 7 * 24 * 3600 * 1000;

// int systolicInc;
// int diastolicInc;
// string sql = string.Empty;

// var remarkFlag = false;

// // 曾经有下发记录
// if (lastPush?.Count != 0)
// {
// // 重置设备,取正常值标定值
// if (
// (int)lastPush![2] == 0
// && (int)lastPush![3] == 0
// && (int)lastPush![4] == 0
// && (int)lastPush![5] == 0
// )
// {
// systolicRefValue = bpRef?.Systolic;//?
// diastolicRefValue = bpRef?.Diastolic;//?
// }
// // 取最后一条下推的标定值
// else
// {
// systolicRefValue = (int)lastPush?[2]!;
// diastolicRefValue = (int)lastPush?[3]!;
// }

// if (DateTime.TryParse(lastPush?[0]!.ToString(), out DateTime newTs))
// {
// duration = SafeType.SafeInt64(((DateTime)bp.LastUpdate! - newTs).TotalMilliseconds);
// }

// }


// TimeSpan ts = TimeSpan.FromMilliseconds(duration);
// // 获取历史数据
// ////DateTime now = DateTime.Now;
// //DateTime now = (DateTime)bp.LastUpdate!; //测试
// //DateTime startTime = now.AddDays(-duration);
// //DateTime endTime = now;

// DateTime endTime = (DateTime)bp.LastUpdate!; //测试
// DateTime startTime = endTime - ts;


// // 如果hm_bp_config_manual_calibration存在数据,使用最新数据

// //
// var systolicAggregate = await _serviceTDengine.GetAggregateValueAsync("systolic_value", "stb_hm_bloodpress", $"ts>='{startTime:yyyy-MM-dd HH:mm:ss.fff}' and ts <='{endTime:yyyy-MM-dd HH:mm:ss.fff}' and serialno='{bp.Serialno}'");
// var diastolicAggregate = await _serviceTDengine.GetAggregateValueAsync("diastolic_value", "stb_hm_bloodpress", $"ts>='{startTime:yyyy-MM-dd HH:mm:ss.fff}' and ts <='{endTime:yyyy-MM-dd HH:mm:ss.fff}' and serialno='{bp.Serialno}'");
// //var systolicAggregate = _serviceTDengine.GetAggregateValue("systolic_value", "hm_bloodpress", $"ts>='{startTime:yyyy-MM-dd HH:mm:ss.fff}' and ts <='{endTime:yyyy-MM-dd HH:mm:ss.fff}' and serialno='{bp.Serialno}'");
// //var diastolicAggregate = _serviceTDengine.GetAggregateValue("diastolic_value", "hm_bloodpress", $"ts>='{startTime:yyyy-MM-dd HH:mm:ss.fff}' and ts <='{endTime:yyyy-MM-dd HH:mm:ss.fff}' and serialno='{bp.Serialno}'");

// // 最大值
// var systolicMax = systolicAggregate.Max;
// var diastolicMax = diastolicAggregate.Max;
// // 最小值
// var systolicMin = systolicAggregate.Min;
// var diastolicMin = diastolicAggregate.Min;
// // 偏移参数
// var avgOffset = 0.25M;
// var systolicAvgOffset = avgOffset;
// var diastolicAvgOffset = avgOffset;


// // 计算去除最大值和最小值和异常值的平均值
// var systolicAvg = await _serviceTDengine.GetAvgExceptMaxMinValueAsync("systolic_value", "stb_hm_bloodpress", $"ts>='{startTime:yyyy-MM-dd HH:mm:ss.fff}' and ts <='{endTime:yyyy-MM-dd HH:mm:ss.fff}' and serialno='{bp.Serialno}' and systolic_value < {systolicRefValue} ");
// var diastolicAvg = await _serviceTDengine.GetAvgExceptMaxMinValueAsync("diastolic_value", "stb_hm_bloodpress", $"ts>='{startTime:yyyy-MM-dd HH:mm:ss.fff}' and ts <='{endTime:yyyy-MM-dd HH:mm:ss.fff}' and serialno='{bp.Serialno}' and diastolic_value < {diastolicRefValue}");

// //
// if (systolicAvg.Equals(0) || diastolicAvg.Equals(0))
// {
// _logger.LogWarning($"{bp.Serialno} 历史数据{startTime}---{endTime}除最大值和最小值和异常值的平均值为0,使用测试量当做平均值");
// systolicAvg = bp.SystolicValue;
// diastolicAvg = bp.DiastolicValue;
// //systolicInc = (int)((systolicRefValue - systolicAvg) * systolicAvgOffset)! > 0? (int)((systolicRefValue - systolicAvg) * systolicAvgOffset)!:0;
// //diastolicInc = (int)((diastolicRefValue - diastolicAvg) * diastolicAvgOffset)! >0? (int)((diastolicRefValue - diastolicAvg) * diastolicAvgOffset)!:0;

// //// 初始化 remark
// //remarkFlag = await _serviceIotWebApi.UpdatePersonRemarksAsync(bp.Serialno, (int)systolicRefValue!, (int)diastolicRefValue!, systolicInc, diastolicInc).ConfigureAwait(false);
// //if (remarkFlag)
// //{
// // // 下推
// // BloodPressCalibrationConfigModel bpIncData = new()
// // {
// // Imei = bp.Serialno,
// // SystolicRefValue = (int)systolicRefValue!, //收缩压标定值,值为0 表示不生效
// // DiastolicRefValue = (int)diastolicRefValue!, //舒张压标定值,值为0表示不生效
// // SystolicIncValue = systolicInc, //收缩压显示增量,值为0 表示不生效
// // DiastolicIncValue = diastolicInc //舒张压显示增量,值为0 表示不生效
// // };
// // // 下发 IOT 增量值
// // var flagIot = await _serviceIotWebApi.SetBloodPressCalibrationConfigAsync(bpIncData).ConfigureAwait(false);
// // if (flagIot)
// // {
// // #region 保存下推记录 stb_hm_bp_push_ref_inc_value
// // sql = $"INSERT INTO health_monitor.hm_bp_push_ref_inc_value_{bp.Serialno.Substring(bp.Serialno.Length - 2)} " +
// // $"USING health_monitor.stb_hm_bp_push_ref_inc_value " +
// // $"TAGS ('{bp.Serialno.Substring(bp.Serialno.Length - 2)}') " +
// // $"VALUES(" +
// // $"'{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}'," +
// // $"'{bp.Serialno}'," +
// // $"{systolicRefValue}," +
// // $"{diastolicRefValue}," +
// // $"{systolicInc}," +
// // $"{diastolicInc}," +
// // $"{true})";

// // _serviceTDengine.ExecuteInsertSQL(sql);
// // #endregion
// // }
// //}

// //return;
// }
// //var systolicAvg = _serviceTDengine.GetAvgExceptMaxMinValue("systolic_value", "hm_bloodpress", $"ts>='{startTime:yyyy-MM-dd HH:mm:ss.fff}' and ts <='{endTime:yyyy-MM-dd HH:mm:ss.fff}' and serialno='{bp.Serialno}' and systolic_value < {systolicRefValue} ");
// //var diastolicAvg = _serviceTDengine.GetAvgExceptMaxMinValue("diastolic_value", "hm_bloodpress", $"ts>='{startTime:yyyy-MM-dd HH:mm:ss.fff}' and ts <='{endTime:yyyy-MM-dd HH:mm:ss.fff}' and serialno='{bp.Serialno}' and diastolic_value < {diastolicRefValue}");

// // 增量值=(标定值-平均值)* 0.25
// systolicInc = (int)((systolicRefValue - systolicAvg) * systolicAvgOffset)!;
// diastolicInc = (int)((diastolicRefValue - diastolicAvg) * diastolicAvgOffset)!;

// #endregion

// #region 插入BP增量值 hm_bloodpress_stats_inc
// // 自动建表
// sql = $"INSERT INTO health_monitor.hm_bp_stats_inc_{bp.Serialno.Substring(bp.Serialno.Length - 2)} " +
// $"USING health_monitor.stb_hm_bloodpress_stats_inc " +
// $"TAGS ('{bp.Serialno.Substring(bp.Serialno.Length - 2)}') " +
// $"VALUES(" +
// $"'{bp.LastUpdate:yyyy-MM-dd HH:mm:ss.fff}'," +
// $"'{bp.BloodPressId}'," +
// $"'{bp.MessageId}'," +
// $"'{bp.Serialno}'," +
// $"{bp.SystolicValue}," +
// $"{systolicRefValue}," +
// $"{systolicAvg}," +
// $"{systolicMax}," +
// $"{systolicMin}," +
// $"{systolicAvgOffset}," +
// $"{systolicInc}," +
// $"{bp.DiastolicValue}," +
// $"{diastolicRefValue}," +
// $"{diastolicAvg}," +
// $"{diastolicMax}," +
// $"{diastolicMin}," +
// $"{diastolicAvgOffset}," +
// $"{diastolicInc}," +
// $"{gender}," +
// $"{age}," +
// $"{height}," +
// $"{weight}," +
// $"'{bp.LastUpdate:yyyy-MM-dd HH:mm:ss.fff}'," +
// $"{duration}," +
// $"'{startTime:yyyy-MM-dd HH:mm:ss.fff}'," +
// $"'{endTime:yyyy-MM-dd HH:mm:ss.fff}'," +
// $"'{string.Empty}'," +
// $"{isHypertension})";

// _serviceTDengine.ExecuteInsertSQL(sql);
// // 发送到 设置设备血压标定参数

// #endregion


// #region 更新 gps_persoon remarks
// // 更新
// remarkFlag = await _serviceIotWebApi.UpdatePersonRemarksAsync(bp.Serialno, (int)systolicRefValue!, (int)diastolicRefValue!, systolicInc, diastolicInc).ConfigureAwait(false);
// if (remarkFlag)
// {
// Console.WriteLine($"{nameof(BloodpressResolver)} 开启血压标定值下发: {_configBoodPressResolver.EnableBPRefPush}");
// // 启血压标定值下发开关
// if (_configBoodPressResolver.EnableBPRefPush)
// {
// // 下推
// BloodPressCalibrationConfigModel bpIncData = new()
// {

// Imei = bp.Serialno,
// SystolicRefValue = (int)systolicRefValue!, //收缩压标定值,值为0 表示不生效
// DiastolicRefValue = (int)diastolicRefValue!, //舒张压标定值,值为0表示不生效
// SystolicIncValue = systolicInc, //收缩压显示增量,值为0 表示不生效
// DiastolicIncValue = diastolicInc //舒张压显示增量,值为0 表示不生效
// };
// // 下发 IOT 增量值
// var flagIot = await _serviceIotWebApi.SetBloodPressCalibrationConfigAsync(bpIncData).ConfigureAwait(false);

// if (flagIot)
// {
// #region 保存下推记录 stb_hm_bp_push_ref_inc_value
// sql = $"INSERT INTO health_monitor.hm_bp_push_ref_inc_value_{bp.Serialno.Substring(bp.Serialno.Length - 2)} " +
// $"USING health_monitor.stb_hm_bp_push_ref_inc_value " +
// $"TAGS ('{bp.Serialno.Substring(bp.Serialno.Length - 2)}') " +
// $"VALUES(" +
// $"'{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}'," +
// $"'{bp.Serialno}'," +
// $"{systolicRefValue}," +
// $"{diastolicRefValue}," +
// $"{systolicInc}," +
// $"{diastolicInc}," +
// $"{true})";

// _serviceTDengine.ExecuteInsertSQL(sql);
// #endregion
// }
// }

// }

// #endregion


// /** 取消
// // 注册定时下发事件
// // 获取当前时间
// //DateTime sNow = DateTime.Now;

// //// 计算距离明天12点的时间间隔
// //TimeSpan timeUntil = new DateTime(sNow.Year, sNow.Month, sNow.Day, 12, 0, 0) - sNow;

// //// 如果当前时间已经超过了12点,将等待到明天
// //if (timeUntil < TimeSpan.Zero)
// //{
// // timeUntil = timeUntil.Add(TimeSpan.FromHours(24));
// //}
// //var data = new
// //{
// // imei = bp.Serialno,
// // systolicCalibrationValue = systolicRefValue, //收缩压标定值,值为0 表示不生效
// // diastolicCalibrationValue = diastolicRefValue, //舒张压标定值,值为0表示不生效
// // systolicIncValue = systolicInc, //收缩压显示增量,值为0 表示不生效
// // diastolicIncValue = diastolicInc //舒张压显示增量,值为0 表示不生效
// //};

// //var url = $"http://id.ssjlai.com/webapi/api/Command/SetBloodPressCalibrationConfig";
// //List<KeyValuePair<string, string>> headers = new()
// //{
// // new KeyValuePair<string, string>("AuthKey", "key1")
// //};

// //var data = new
// //{
// // imei = bp.Serialno,
// // systolicCalibrationValue = systolicRefValue, //收缩压标定值,值为0 表示不生效
// // diastolicCalibrationValue = diastolicRefValue, //舒张压标定值,值为0表示不生效
// // systolicIncValue = systolicInc, //收缩压显示增量,值为0 表示不生效
// // diastolicIncValue = diastolicInc //舒张压显示增量,值为0 表示不生效
// //};


// //var result = JsonConvert.SerializeObject(data);
// //var result = bp.Serialno;
// */

// #region 定时下发触发器
// var key = $"health_moniter/schedule_push/imei/{bp.Serialno}";
// var schedule_push = await _serviceEtcd.GetValAsync(key).ConfigureAwait(false);
// if (string.IsNullOrWhiteSpace(schedule_push))
// {
// // 注册首次下推
//#if DEBUG
// // await _serviceEtcd.PutValAsync(key, result, 60*1, false).ConfigureAwait(false);

// var interval = 0;
// // 获取当前时间
// DateTime now = DateTime.Now;

// // 计算距离下一个$interval天后的8点的时间间隔
// DateTime nextRunTime = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute + 1, 58).AddDays(interval);
// TimeSpan timeUntilNextRun = nextRunTime - now;

// // 如果当前时间已经超过了8点,将等待到明天后的8点
// if (timeUntilNextRun < TimeSpan.Zero)
// {
// timeUntilNextRun = timeUntilNextRun.Add(TimeSpan.FromMinutes(1));
// nextRunTime += timeUntilNextRun;
// }
// var ttl = (long)timeUntilNextRun.TotalSeconds;
// var data = new
// {
// imei = bp.Serialno,
// create_time = now.ToString("yyyy-MM-dd HH:mm:ss"),
// ttl,
// next_run_time = nextRunTime.ToString("yyyy-MM-dd HH:mm:ss")
// };
// var result = JsonConvert.SerializeObject(data);
// await _serviceEtcd.PutValAsync(key, result, ttl, false).ConfigureAwait(false);

//#else
// //DateTime sNow = DateTime.Now;

// //// 计算距离19:59:55点的时间间隔
// //TimeSpan timeUntil = new DateTime(sNow.Year, sNow.Month, sNow.Day, 19, 59, 55) - sNow;

// //// 如果当前时间已经超过了12点,将等待到明天
// //if (timeUntil < TimeSpan.Zero)
// //{
// // timeUntil = timeUntil.Add(TimeSpan.FromHours(24));
// //}
// //var ttl = (long)timeUntil.TotalSeconds;


// var interval = 0;
// // 获取当前时间
// DateTime now = DateTime.Now;

// // 计算距离下一个$interval天后的8点的时间间隔
// DateTime nextRunTime = new DateTime(now.Year, now.Month, now.Day, 19, 59, 58).AddDays(interval);
// TimeSpan timeUntilNextRun = nextRunTime - now;

// // 如果当前时间已经超过了8点,将等待到明天后的8点
// if (timeUntilNextRun < TimeSpan.Zero)
// {
// timeUntilNextRun = timeUntilNextRun.Add(TimeSpan.FromDays(1));
// nextRunTime += timeUntilNextRun;
// }

// var ttl =(long)timeUntilNextRun.TotalSeconds;
// var data = new
// {
// imei = bp.Serialno,
// create_time = now.ToString("yyyy-MM-dd HH:mm:ss"),
// ttl,
// next_run_time = nextRunTime.ToString("yyyy-MM-dd HH:mm:ss")
// };
// var result = JsonConvert.SerializeObject(data);
// await _serviceEtcd.PutValAsync(key, result,ttl, false).ConfigureAwait(false);
//#endif

// }

// #endregion


// /** 取消
// //// 生效
// //if (DateTime.Now.Hour == 1)
// //{
// // var data = new
// // {
// // imei = bp.Serialno,
// // systolicCalibrationValue = systolicRefValue, //收缩压标定值,值为0 表示不生效
// // diastolicCalibrationValue = diastolicRefValue, //舒张压标定值,值为0表示不生效
// // systolicIncValue = systolicInc, //收缩压显示增量,值为0 表示不生效
// // diastolicIncValue = diastolicInc //舒张压显示增量,值为0 表示不生效
// // };
// // var result = await _httpHelper.HttpToPostAsync(url, data, headers).ConfigureAwait(false);
// // _logger.LogInformation($"将 {JsonConvert.SerializeObject(data)}发送到 {url} 并且返回 {JsonConvert.SerializeObject(result)}");
// //}
// //// 不生效
// //else if (DateTime.Now.Hour == 3)
// //{
// // var data = new
// // {
// // imei = bp.Serialno,
// // systolicCalibrationValue = 0, //收缩压标定值,值为0 表示不生效
// // diastolicCalibrationValue = 0, //舒张压标定值,值为0表示不生效
// // systolicIncValue = 0, //收缩压显示增量,值为0 表示不生效
// // diastolicIncValue = 0 //舒张压显示增量,值为0 表示不生效
// // };
// // var result = await _httpHelper.HttpToPostAsync(url, data, headers).ConfigureAwait(false);
// // _logger.LogInformation($"将 {JsonConvert.SerializeObject(data)}发送到 {url} 并且返回 {JsonConvert.SerializeObject(result)}");
// //}

// */
// }

}
}

+ 9
- 0
HealthMonitor.WebApi/Controllers/HealthMonitor/HmBloodPressConfigManualCalibrationController.cs ファイルの表示

@@ -130,6 +130,15 @@ namespace HealthMonitor.WebApi.Controllers.HealthMonitor

#endregion

#region 只下发标定值,不计算增量值,保存数据库(修改个人信息)
if (model.IsPushRefOnly)
{
var statNow = DateTime.Now;
return await IotSetBloodPressCalibrationConfigResponseAsync(imei, model.ManualSystolicRefValue, model.ManualDiastolicRefValue, 0, 0, 0, 0, 0, 0, statNow, statNow).ConfigureAwait(false);
}

#endregion

#region 数据合法性
if (model.ManualSystolicRefValue.Equals(0) || model.ManualDiastolicRefValue.Equals(0))
{


+ 13
- 8
HealthMonitor.WebApi/Model/Request/BloodPressManualCalibration.cs ファイルの表示

@@ -11,14 +11,19 @@ namespace HealthMonitor.WebApi.Model.Request
public int ManualSystolicRefValue { set; get; }
// [JsonProperty(nameof(ManualDiastolicRefValue))]
public int ManualDiastolicRefValue { set; get; }
// [JsonProperty(nameof(Gender))]
// public int Gender { set; get; }
//// [JsonProperty(nameof(Height))]
// public float Height { set; get; }
//// [JsonProperty(nameof(Weight))]
// public float Weight { set; get; }
//// [JsonProperty(nameof(Hypertension))]
// public bool Hypertension { set; get; }

/// <summary>
/// 只下发标定值,不计算增量值
/// </summary>
public bool IsPushRefOnly { set; get; } = false;
// [JsonProperty(nameof(Gender))]
// public int Gender { set; get; }
//// [JsonProperty(nameof(Height))]
// public float Height { set; get; }
//// [JsonProperty(nameof(Weight))]
// public float Weight { set; get; }
//// [JsonProperty(nameof(Hypertension))]
// public bool Hypertension { set; get; }

// manual_systolic_ref_value INT,
//manual_diastolic_ref_value INT,


読み込み中…
キャンセル
保存