Browse Source

增加外部调用接口

datasub12_previous
H Vs 1 year ago
parent
commit
c8cf7b3c63
4 changed files with 147 additions and 205 deletions
  1. +1
    -1
      HealthMonitor.Service/Resolver/BloodpressResolver.cs
  2. +115
    -0
      HealthMonitor.WebApi/Controllers/HealthMonitor/HmBloodPressConfigManualCalibrationController.cs
  3. +0
    -204
      HealthMonitor.WebApi/Controllers/HealthMonitor/HmBloodPressController.cs
  4. +31
    -0
      HealthMonitor.WebApi/Model/Request/BloodPressManualCalibration.cs

+ 1
- 1
HealthMonitor.Service/Resolver/BloodpressResolver.cs View File

@@ -158,7 +158,7 @@ namespace HealthMonitor.Service.Resolver
// 增量值=(标定值-平均值)* 0.25
var systolicInc = systolicAvg.Equals(0M) ? 0 : (int)((systolicRefValue - systolicAvg) * systolicAvgOffset)!;
var diastolicInc = diastolicAvg.Equals(0M) ? 0 : (int)((diastolicRefValue - diastolicAvg) * diastolicAvgOffset)!;
#endregion




+ 115
- 0
HealthMonitor.WebApi/Controllers/HealthMonitor/HmBloodPressConfigManualCalibrationController.cs View File

@@ -0,0 +1,115 @@
using Google.Protobuf.WellKnownTypes;
using Grpc.Core;
using HealthMonitor.Common.helper;
using HealthMonitor.Core.Dal;
using HealthMonitor.Service.Biz.db;
using HealthMonitor.Service.Cache;
using HealthMonitor.Service.Etcd;
using HealthMonitor.Service.Resolver;
using HealthMonitor.Util.Entities.HealthMonitor;
using HealthMonitor.WebApi.Configs;
using HealthMonitor.WebApi.Model.Request;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.EntityFrameworkCore.Metadata;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace HealthMonitor.WebApi.Controllers.HealthMonitor
{
[ApiExplorerSettings(GroupName = AppConsts.SWAGGER_DOC_HealthMonitor)]
[Produces("application/json")]
[Route("api/HealthMonitor/[controller]/[action]")]
[ApiController]
public class HmBloodPressConfigManualCalibrationController : ControllerBase
{
private readonly ILogger<HmBloodPressConfigManualCalibrationController> _logger;
private readonly PersonCacheManager _personCacheMgr;
private readonly TDengineService _serviceTDengine;

public HmBloodPressConfigManualCalibrationController
(
TDengineService serviceDengine,
PersonCacheManager personCacheMgr,
ILogger<HmBloodPressConfigManualCalibrationController> logger
)
{
_serviceTDengine = serviceDengine;
_logger = logger;
_personCacheMgr = personCacheMgr;
}
[HttpPut]
public async Task<IActionResult> Put([FromBody] BloodPressManualCalibration model, [FromHeader] string requestId)
{
var imei = model.Imei;
// 计算增量值
var systolicRefValue = model.ManualSystolicRefValue;//?
var diastolicRefValue = model.ManualDiastolicRefValue;//?
int duration = 7;

DateTime endTime = DateTime.Now; //测试
DateTime startTime = endTime.AddDays(-duration);


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

//// 最大值
//var systolicMax = systolicAggregate.Max;
//var diastolicMax = diastolicAggregate.Max;
//// 最小值
//var systolicMin = systolicAggregate.Min;
//var diastolicMin = diastolicAggregate.Min;


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

if (systolicAvg.Equals(0) || diastolicAvg.Equals(0))
{
_logger.LogWarning("平均值为0不保存");
}
// 偏移参数
var avgOffset = 0.25M;

var systolicAvgOffset = avgOffset;
var diastolicAvgOffset = avgOffset;


// 增量值=(标定值-平均值)* 0.25
var systolicInc = systolicAvg.Equals(0M) ? 0 : (int)((systolicRefValue - systolicAvg) * systolicAvgOffset)!;
var diastolicInc = diastolicAvg.Equals(0M) ? 0 : (int)((diastolicRefValue - diastolicAvg) * diastolicAvgOffset)!;


// 返回结果
var res = new
{
//Timestamp= DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"),
data =new
{
imei = model.Imei,
systolicCalibrationValue = systolicRefValue, //收缩压标定值,值为0 表示不生效
diastolicCalibrationValue = diastolicRefValue, //舒张压标定值,值为0表示不生效
systolicIncValue = systolicInc, //收缩压显示增量,值为0 表示不生效
diastolicIncValue = diastolicInc //舒张压显示增量,值为0 表示不生效
},
result=new
{
status= "succeed",
code=200,
message="请求成功!"
}
};
return Ok(res);
}
}
}

+ 0
- 204
HealthMonitor.WebApi/Controllers/HealthMonitor/HmBloodPressController.cs View File

@@ -1,204 +0,0 @@
using HealthMonitor.Common;
using HealthMonitor.Core.Dal;
using HealthMonitor.Model.Cache;
using HealthMonitor.Service.Biz.db;
using HealthMonitor.Service.Cache;
using HealthMonitor.Util.Entities.HealthMonitor;
using HealthMonitor.WebApi.Configs;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using TelpoDataService.Util.Entities.GpsLocationHistory;

namespace HealthMonitor.WebApi.Controllers.HealthMonitor
{
//[ApiExplorerSettings(GroupName = AppConsts.SWAGGER_DOC_HealthMonitor)]
//[Produces("application/json")]
//[Route("api/HealthMonitor/[controller]/[action]")]
//[ApiController]
//public class HmBloodPressController:ControllerBase
//{

// protected readonly ILogger _logger;
// private readonly TDengineService _serviceTDengine;
// private readonly PersonCacheManager _personCacheMgr;
// private readonly BloodPressReferenceValueCacheManager _bpRefValCacheManager;
// protected readonly IHealthMonitorDataAccessor _dataAccessor;


// public HmBloodPressController
// (
// ILogger<HmBloodPressController> logger,
// TDengineService serviceDengine,
// PersonCacheManager personCacheMgr,
// BloodPressReferenceValueCacheManager bpRefValCacheManager,
// IHealthMonitorDataAccessor dataAccessor
// )
// {
// _logger = logger;
// _serviceTDengine = serviceDengine;
// _personCacheMgr = personCacheMgr;
// _dataAccessor = dataAccessor;
// _bpRefValCacheManager = bpRefValCacheManager;
// }

// [HttpPost]
// public async Task<IActionResult> AddAsync([FromHeader] string requestId,[FromBody] HisGpsBloodPress bp)
// {
// //
// //HisGpsBloodPress bp = new()
// //{
// // BloodPressId = "261850cb-ce91-4003-8c63-a1f8f50d6495",
// // MessageId = "1670682284342246914",
// // Serialno = "861281060083627",
// // SystolicValue = 114,
// // DiastolicValue = 79,
// // CreateTime = DateTime.Parse("2023-06-19 14:37:53"),
// // LastUpdate = DateTime.Parse("2023-06-19 14:26:52"),
// // Method = 1,
// // IsDisplay = 1
// //};

// //
// //861281060081969
// //HisGpsBloodPress bp = new()
// //{
// // BloodPressId = "7df62202-8d49-4f91-90da-25a4036c26fb",
// // MessageId = "1670992704491900929",
// // Serialno = "861281060081969",
// // SystolicValue = 110,
// // DiastolicValue = 72,
// // CreateTime = DateTime.Parse("2023-06-20 11:11:31"),
// // LastUpdate = DateTime.Parse("2023-06-20 10:20:40"),
// // Method = 1,
// // IsDisplay = 1
// //};

// // 861281060086380


// //var aggregate = await _serviceTDengine.GetAvgExceptMaxMinValueAsync("diastolic_value", "hm_bloodpress", $"ts>='{DateTime.Now.AddDays(-7):yyyy-MM-ddTHH:mm:ss.fffZ}' and ts <='{DateTime.Now:yyyy-MM-ddTHH:mm:ss.fffZ}' and serialno='861281060083627' and systolic_value < {120} and diastolic_value >{80}");

// //+++++++++++++++++++++++++++++++



// #region 获取个人信息

// var person = await _personCacheMgr.GetDeviceGpsPersonCacheBySerialNoAsync(bp.MessageId, bp.Serialno).ConfigureAwait(false);
// // 验证这个信息是否存在
// if (person == null || person?.Person.BornDate == null) return Ok(false);
// // 验证年龄是否在范围 (2 - 120)
// var age = SafeType.SafeInt(DateTime.Today.Year - person?.Person.BornDate!.Value.Year!);
// if (age < 1 || age > 120) return Ok(false);

// 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!);
// #endregion

// #region 插入当次BP数据
// // 保存到TDengine

// var bpSql = $"INSERT INTO health_monitor.hm_bloodpress VALUES(" +
// $"'{bp.LastUpdate:yyyy-MM-ddTHH:mm:ss.fffZ}'," +
// $"'{bp.BloodPressId}'," +
// $"'{bp.MessageId}'," +
// $"'{bp.Serialno}'," +
// $"{bp.SystolicValue}," +
// $"{bp.DiastolicValue}," +
// $"'{bp.CreateTime:yyyy-MM-ddTHH:mm:ss.fffZ}'," +
// $"'{bp.LastUpdate:yyyy-MM-ddTHH:mm:ss.fffZ}'," +
// $"{bp.Method}," +
// $"{bp.IsDisplay == 1})";

// await _serviceTDengine.GernalRestSql(bpSql);

// #endregion

// #region 计算增量值
// var bpRef = await _bpRefValCacheManager.GetBloodPressReferenceValueAsync(age, gender, isHypertension);

// var systolicRefValue = bpRef?.Systolic;//?
// var diastolicRefValue = bpRef?.Diastolic;//?
// int duration = 30;
// // 获取历史数据
// DateTime now = DateTime.Now;
// DateTime startTime = now.AddDays(-duration);
// DateTime endTime = now;

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

// // 最大值
// var systolicMax = systolicAggregate.Max;
// var diastolicMax = diastolicAggregate.Max;
// // 最小值
// var systolicMin = systolicAggregate.Min;
// var diastolicMin = diastolicAggregate.Min;


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

// // 偏移参数
// var avgOffset = 0.25M;

// var systolicAvgOffset = avgOffset;
// var diastolicAvgOffset = avgOffset;


// // 增量值=(标定值-平均值)* 0.25
// var systolicInc = systolicAvg.Equals(0M) ? 0: (int)((systolicRefValue - systolicAvg)* systolicAvgOffset)!;
// var diastolicInc = diastolicAvg.Equals(0M) ? 0 : (int)((diastolicRefValue - diastolicAvg) * diastolicAvgOffset)!;

// #endregion

// #region 插入BP增量值
// var sql = $"INSERT INTO health_monitor.hm_bloodpress_stats_inc VALUES(" +
// $"'{bp.LastUpdate:yyyy-MM-ddTHH:mm:ss.fffZ}'," +
// $"'{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-ddTHH:mm:ss.fffZ}'," +
// $"{duration}," +
// $"'{startTime:yyyy-MM-ddTHH:mm:ss.fffZ}'," +
// $"'{endTime:yyyy-MM-ddTHH:mm:ss.fffZ}'," +
// $"'{string.Empty}')";
// var res = await _serviceTDengine.GernalRestSql(sql);
// #endregion

// return Ok(res);
// }
//}
}

+ 31
- 0
HealthMonitor.WebApi/Model/Request/BloodPressManualCalibration.cs View File

@@ -0,0 +1,31 @@
using Newtonsoft.Json;
using System.Reflection;

namespace HealthMonitor.WebApi.Model.Request
{
public class BloodPressManualCalibration
{
// [JsonProperty(nameof(Imei))]
public string Imei { get; set; } = default!;
//[JsonProperty(nameof(ManualSystolicRefValue))]
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; }

// manual_systolic_ref_value INT,
//manual_diastolic_ref_value INT,
//gender TINYINT,
//age INT,
//height FLOAT,
//weight FLOAT,
//hypertension bool
}
}

Loading…
Cancel
Save