|
@@ -9,6 +9,7 @@ using HealthMonitor.Model.Service; |
|
|
using HealthMonitor.Model.Service.Mapper; |
|
|
using HealthMonitor.Model.Service.Mapper; |
|
|
using HealthMonitor.Service.Biz; |
|
|
using HealthMonitor.Service.Biz; |
|
|
using HealthMonitor.Service.Biz.db; |
|
|
using HealthMonitor.Service.Biz.db; |
|
|
|
|
|
using HealthMonitor.Service.Cache; |
|
|
using HealthMonitor.Service.Etcd; |
|
|
using HealthMonitor.Service.Etcd; |
|
|
using HealthMonitor.Service.Sub; |
|
|
using HealthMonitor.Service.Sub; |
|
|
using Microsoft.AspNetCore.Mvc.RazorPages; |
|
|
using Microsoft.AspNetCore.Mvc.RazorPages; |
|
@@ -34,20 +35,24 @@ namespace HealthMonitor.WebApi |
|
|
private readonly HttpHelper _httpHelper = default!; |
|
|
private readonly HttpHelper _httpHelper = default!; |
|
|
private readonly IotWebApiService _serviceIotWebApi; |
|
|
private readonly IotWebApiService _serviceIotWebApi; |
|
|
private readonly BoodPressResolverConfig _configBoodPressResolver; |
|
|
private readonly BoodPressResolverConfig _configBoodPressResolver; |
|
|
|
|
|
private readonly BloodPressReferenceValueCacheManager _bpRefValCacheManager; |
|
|
|
|
|
private readonly PersonCacheManager _personCacheMgr; |
|
|
|
|
|
|
|
|
private CancellationTokenSource _tokenSource=default!; |
|
|
|
|
|
|
|
|
private CancellationTokenSource _tokenSource = default!; |
|
|
|
|
|
|
|
|
public Worker(ILogger<Worker> logger, IServiceProvider services, IotWebApiService iotWebApiService, IOptions<BoodPressResolverConfig> optionBoodPressResolver, PackageProcess processor,TDengineDataSubcribe tdEngineDataSubcribe, TDengineService serviceDengine, HttpHelper httpHelper, EtcdService serviceEtcd) |
|
|
|
|
|
|
|
|
public Worker(ILogger<Worker> logger, IServiceProvider services, PersonCacheManager personCacheMgr, BloodPressReferenceValueCacheManager bpRefValCacheManager, IotWebApiService iotWebApiService, IOptions<BoodPressResolverConfig> optionBoodPressResolver, PackageProcess processor, TDengineDataSubcribe tdEngineDataSubcribe, TDengineService serviceDengine, HttpHelper httpHelper, EtcdService serviceEtcd) |
|
|
{ |
|
|
{ |
|
|
_logger = logger; |
|
|
_logger = logger; |
|
|
_tdEngineDataSubcribe = tdEngineDataSubcribe; |
|
|
_tdEngineDataSubcribe = tdEngineDataSubcribe; |
|
|
_services = services; |
|
|
_services = services; |
|
|
_serviceIotWebApi = iotWebApiService; |
|
|
_serviceIotWebApi = iotWebApiService; |
|
|
_processor = processor; |
|
|
_processor = processor; |
|
|
_serviceEtcd = serviceEtcd; |
|
|
|
|
|
|
|
|
_serviceEtcd = serviceEtcd; |
|
|
_serviceTDengine = serviceDengine; |
|
|
_serviceTDengine = serviceDengine; |
|
|
_httpHelper = httpHelper; |
|
|
_httpHelper = httpHelper; |
|
|
_configBoodPressResolver = optionBoodPressResolver.Value; |
|
|
_configBoodPressResolver = optionBoodPressResolver.Value; |
|
|
|
|
|
_bpRefValCacheManager = bpRefValCacheManager; |
|
|
|
|
|
_personCacheMgr = personCacheMgr; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public override Task StartAsync(CancellationToken cancellationToken) |
|
|
public override Task StartAsync(CancellationToken cancellationToken) |
|
@@ -55,7 +60,7 @@ namespace HealthMonitor.WebApi |
|
|
_logger.LogInformation("------StartAsync"); |
|
|
_logger.LogInformation("------StartAsync"); |
|
|
_tokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); |
|
|
_tokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); |
|
|
// 创建消费者 |
|
|
// 创建消费者 |
|
|
// _tdEngineDataSubcribe.CreateConsumer(); |
|
|
|
|
|
|
|
|
// _tdEngineDataSubcribe.CreateConsumer(); |
|
|
return base.StartAsync(cancellationToken); |
|
|
return base.StartAsync(cancellationToken); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -63,8 +68,8 @@ namespace HealthMonitor.WebApi |
|
|
{ |
|
|
{ |
|
|
_logger.LogInformation("------StopAsync"); |
|
|
_logger.LogInformation("------StopAsync"); |
|
|
_tokenSource.Cancel(); //停止工作线程 |
|
|
_tokenSource.Cancel(); //停止工作线程 |
|
|
// 关闭消费者 |
|
|
|
|
|
// _tdEngineDataSubcribe.CloseConsumer(); |
|
|
|
|
|
|
|
|
// 关闭消费者 |
|
|
|
|
|
// _tdEngineDataSubcribe.CloseConsumer(); |
|
|
return base.StopAsync(cancellationToken); |
|
|
return base.StopAsync(cancellationToken); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -92,7 +97,7 @@ namespace HealthMonitor.WebApi |
|
|
_logger.LogInformation("------_tdEngineDataSubcribe"); |
|
|
_logger.LogInformation("------_tdEngineDataSubcribe"); |
|
|
while (!_tokenSource.IsCancellationRequested) |
|
|
while (!_tokenSource.IsCancellationRequested) |
|
|
{ |
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_tdEngineDataSubcribe.BeginListen(_tokenSource.Token); |
|
|
_tdEngineDataSubcribe.BeginListen(_tokenSource.Token); |
|
|
} |
|
|
} |
|
|
}, TaskCreationOptions.LongRunning); |
|
|
}, TaskCreationOptions.LongRunning); |
|
@@ -219,15 +224,61 @@ namespace HealthMonitor.WebApi |
|
|
} |
|
|
} |
|
|
var lastPushParser = JsonConvert.DeserializeObject<ParseTDengineRestResponse<BloodPressurePushRefIncModel>>(lastPushResponse); |
|
|
var lastPushParser = JsonConvert.DeserializeObject<ParseTDengineRestResponse<BloodPressurePushRefIncModel>>(lastPushResponse); |
|
|
var lastPush = lastPushParser!.Select().FirstOrDefault(); |
|
|
var lastPush = lastPushParser!.Select().FirstOrDefault(); |
|
|
|
|
|
// 有下推记录 |
|
|
|
|
|
if (lastPush != null) |
|
|
|
|
|
{ |
|
|
|
|
|
systolicRefValue = lastPush!.SystolicRefValue; |
|
|
|
|
|
diastolicRefValue = lastPush!.DiastolicRefValue; |
|
|
|
|
|
lastPushSystolicInc = lastPush!.SystolicIncValue; |
|
|
|
|
|
lastPushDiastolicInc = lastPush!.DiastolicIncValue; |
|
|
|
|
|
condition = $"ts between '{lastPush?.Timestamp:yyyy-MM-dd HH:mm:ss.fff}' and '{startTime:yyyy-MM-dd HH:mm:ss.fff}' " + |
|
|
|
|
|
$"and serialno='{imeiDel}' " + |
|
|
|
|
|
$"and is_display = true"; |
|
|
|
|
|
} |
|
|
|
|
|
// 没有下推记录(历史遗留数据),没有初始的测量值产生的平均值(测量值=平均值) |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
#region 获取个人信息 |
|
|
|
|
|
|
|
|
|
|
|
var person = await _personCacheMgr.GetDeviceGpsPersonCacheBySerialNoAsync(Guid.NewGuid().ToString(), imeiDel).ConfigureAwait(false); |
|
|
|
|
|
//验证这个信息是否存在 |
|
|
|
|
|
if (person == null || person?.Person.BornDate == null) |
|
|
|
|
|
{ |
|
|
|
|
|
_logger.LogWarning($"{nameof(Worker)}--{imeiDel} 验证个人信息,找不到个人信息,跳过此消息"); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
// 验证年龄是否在范围 (2 - 120) |
|
|
|
|
|
var age = SafeType.SafeInt(DateTime.Today.Year - person?.Person.BornDate!.Value.Year!); |
|
|
|
|
|
if (age < 2 || age > 120) |
|
|
|
|
|
{ |
|
|
|
|
|
_logger.LogWarning($"{nameof(Worker)}--{imeiDel} 验证年龄,不在范围 (2 - 120)岁,跳过此消息"); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
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 初始化常规血压标定值标定值 |
|
|
|
|
|
var bpRef = await _bpRefValCacheManager.GetBloodPressReferenceValueAsync(age, gender, isHypertension); |
|
|
|
|
|
//systolicRefValue = bpRef!.Systolic;//? |
|
|
|
|
|
//diastolicRefValue = bpRef!.Diastolic;//? |
|
|
|
|
|
#endregion |
|
|
|
|
|
|
|
|
|
|
|
systolicRefValue = bpRef!.Systolic; |
|
|
|
|
|
diastolicRefValue = bpRef!.Diastolic; |
|
|
|
|
|
lastPushSystolicInc = 0; |
|
|
|
|
|
lastPushDiastolicInc = 0; |
|
|
|
|
|
condition = $"ts <= '{startTime:yyyy-MM-dd HH:mm:ss.fff}' " + |
|
|
|
|
|
$"and serialno='{imeiDel}' " + |
|
|
|
|
|
$"and is_display = true"; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
systolicRefValue = lastPush!.SystolicRefValue; |
|
|
|
|
|
diastolicRefValue = lastPush!.DiastolicRefValue; |
|
|
|
|
|
lastPushSystolicInc = lastPush!.SystolicIncValue; |
|
|
|
|
|
lastPushDiastolicInc = lastPush!.DiastolicIncValue; |
|
|
|
|
|
|
|
|
|
|
|
condition = $"ts between '{lastPush?.Timestamp:yyyy-MM-dd HH:mm:ss.fff}' and '{startTime:yyyy-MM-dd HH:mm:ss.fff}' " + |
|
|
|
|
|
$"and serialno='{imeiDel}' " + |
|
|
|
|
|
$"and is_display = true"; |
|
|
|
|
|
var hmBpResponse = await _serviceTDengine.ExecuteSelectRestResponseAsync("stb_hm_bloodpress", condition); |
|
|
var hmBpResponse = await _serviceTDengine.ExecuteSelectRestResponseAsync("stb_hm_bloodpress", condition); |
|
|
var hmBpParser = JsonConvert.DeserializeObject<ParseTDengineRestResponse<BloodPressureModel>>(hmBpResponse!); |
|
|
var hmBpParser = JsonConvert.DeserializeObject<ParseTDengineRestResponse<BloodPressureModel>>(hmBpResponse!); |
|
|
var hmBp = hmBpParser?.Select(); |
|
|
var hmBp = hmBpParser?.Select(); |
|
@@ -403,7 +454,7 @@ namespace HealthMonitor.WebApi |
|
|
_logger.LogInformation($"向{imeiDel}统计数据已经失效"); |
|
|
_logger.LogInformation($"向{imeiDel}统计数据已经失效"); |
|
|
} |
|
|
} |
|
|
#endregion |
|
|
#endregion |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|