From ec17f001515e2f486a54cb1f4fe8a8285adb2de8 Mon Sep 17 00:00:00 2001 From: H Vs Date: Mon, 27 Nov 2023 18:09:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=AE=9A=E6=97=B6=E4=B8=8B?= =?UTF-8?q?=E5=8F=91=E5=A2=9E=E9=87=8F=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HealthMonitor.WebApi/Worker.cs | 674 ++++++++++++++++++++++----------- 1 file changed, 460 insertions(+), 214 deletions(-) diff --git a/HealthMonitor.WebApi/Worker.cs b/HealthMonitor.WebApi/Worker.cs index 51fcd02..c8bd02a 100644 --- a/HealthMonitor.WebApi/Worker.cs +++ b/HealthMonitor.WebApi/Worker.cs @@ -6,6 +6,7 @@ using HealthMonitor.Common.helper; using HealthMonitor.Core.Common.Extensions; using HealthMonitor.Model.Config; using HealthMonitor.Model.Service; +using HealthMonitor.Model.Service.Mapper; using HealthMonitor.Service.Biz; using HealthMonitor.Service.Biz.db; using HealthMonitor.Service.Etcd; @@ -136,7 +137,7 @@ namespace HealthMonitor.WebApi } - private void WatchEvents(WatchResponse response) + private void WatchEvents(WatchResponse response) { response.Events.ToList().ForEach(async e => @@ -162,252 +163,497 @@ namespace HealthMonitor.WebApi var schedule_push = await _serviceEtcd.GetValAsync(key).ConfigureAwait(false); if (string.IsNullOrWhiteSpace(schedule_push)) { - + int systolicInc; + int diastolicInc; - var startTime =DateTime.Now; + int systolicRefValue; + int diastolicRefValue; + + int systolicAvg; + int diastolicAvg; + + int systolicMax = 0; + int diastolicMax = 0; + // 最小值 + int systolicMin = 0; + int diastolicMin = 0; + + // 偏移参数 + var avgOffset = 0.25M; + var systolicAvgOffset = avgOffset; + var diastolicAvgOffset = avgOffset; + + // 最后一次下发值 + int lastPushSystolicInc = 0; + int lastPushDiastolicInc = 0; + + + var startTime = DateTime.Now; // 下发增量值 - #region 定时下发增量值 - var last= await _serviceTDengine.GetLastAsync("stb_hm_bloodpress_stats_inc", $"serialno='{imeiDel}' order by last_update desc"); - var ts = last?[0]; - if (DateTime.TryParse(ts?.ToString(),out DateTime newTs)) + #region 统计定时下发增量值 + //var last = await _serviceTDengine.GetLastAsync("stb_hm_bloodpress_stats_inc", $"serialno='{imeiDel}' order by last_update desc"); + //var ts = last?[0]; + + // 最后一条血压数据 + var condition = $"serialno='{imeiDel}' order by last_update desc"; + var field = "last_row(*)"; + var lastHmBpResponse = await _serviceTDengine.ExecuteSelectRestResponseAsync("stb_hm_bloodpress", condition, field); + var lastHmBpParser = JsonConvert.DeserializeObject>(lastHmBpResponse!); + var lastHmBp = lastHmBpParser?.Select().FirstOrDefault(); + if (lastHmBpParser?.Select()?.ToList().Count < 2) { - // 7 天有效数据 - if (newTs.AddDays(7) > DateTime.Now) + _logger.LogInformation($"{imeiDel} -- {nameof(Worker)} --{nameof(WatchEvents)} -- 血压数据条目不足"); + break; + } + + // 7 天有效数据 + if (lastHmBp?.Timestamp.AddDays(7) > DateTime.Now) + { + // 计算增量值 + condition= $"serialno='{imeiDel}' order by ts desc"; + var lastPushResponse = await _serviceTDengine.ExecuteSelectRestResponseAsync("stb_hm_bp_push_ref_inc_value", condition, field); + if (lastPushResponse == null) + { + _logger.LogInformation($"{imeiDel}--没有下发记录"); + break; + } + var lastPushParser = JsonConvert.DeserializeObject>(lastPushResponse); + var lastPush = lastPushParser!.Select().FirstOrDefault(); + + systolicRefValue = lastPush!.SystolicRefValue; + diastolicRefValue = lastPush!.DiastolicRefValue; + + condition = $"ts between '{startTime:yyyy-MM-dd HH:mm:ss.fff}' and '{lastPush?.Timestamp:yyyy-MM-dd HH:mm:ss.fff}' and serialno='{imeiDel}'"; + var hmBpResponse = await _serviceTDengine.ExecuteSelectRestResponseAsync("stb_hm_bloodpress", condition); + var hmBpParser = JsonConvert.DeserializeObject>(hmBpResponse!); + var hmBp = hmBpParser?.Select(); + if (hmBp?.ToList().Count < 2) { - Console.WriteLine(ts); - var systolic_ref_value = last?[5]; - var diastolic_ref_value = last?[12]; - var systolic_inc_value = last?[10]; - var diastolic_inc_value = last?[17]; + _logger.LogInformation($"{imeiDel} -- {nameof(Worker)} --{nameof(WatchEvents)} -- 统计定时下发,计算增量值的数据条目不足"); + break; + } - #region 判断是否初始化remark + // 最大值 + systolicMax = (int)hmBpParser?.Select(i => i.SystolicValue).Max()!; + diastolicMax = (int)hmBpParser?.Select(i => i.DiastolicValue).Max()!; + // 最小值 + systolicMin = (int)hmBpParser?.Select(i => i.SystolicValue).Min()!; + diastolicMin = (int)hmBpParser?.Select(i => i.DiastolicValue).Min()!; + systolicAvg = (int)(hmBpParser?.AverageAfterRemovingOneMinMaxRef(i => i.SystolicValue, SafeType.SafeInt(systolicRefValue!)))!; + diastolicAvg = (int)(hmBpParser?.AverageAfterRemovingOneMinMaxRef(i => i.DiastolicValue, SafeType.SafeInt(diastolicRefValue!)))!; - // 判断是否初始化remark - /** - * - var imei = imeiDel; - var last_push = await _serviceTDengine.GetLastAsync("stb_hm_bp_push_ref_inc_value", $"serialno='{imei}' order by ts desc"); - if (last_push?.Count == 0) - { - var dataServiceBaseUrl = $"https://id.ssjlai.com/data"; - var DataServicePersionGet = $"{dataServiceBaseUrl}/api/GpsCard/GpsPerson/GetFirst"; - List> Dataheaders = new() - { - new KeyValuePair("requestId", $"{imei}") - }; - var dataPersion = new - { - filters = new List() { new { key = "serialno", value = $"{imei}", valueType = "string", @operator = "Equal" } }, - orderBys = new List() { new { key = "serialno", isDesc = true } } - }; - var resRef = await _httpHelper.HttpToPostAsync(DataServicePersionGet, dataPersion, Dataheaders).ConfigureAwait(false); - var resObj = JsonConvert.DeserializeObject(resRef!) as JToken; - var remark = resObj?["remarks"]?.ToString(); + // 增量值=(标定值-平均值)* 0.25 + var currentSystolicInc = (int)((systolicRefValue - systolicAvg) * systolicAvgOffset)!; + var currentDiastolicInc = (int)((diastolicRefValue - diastolicAvg) * diastolicAvgOffset)!; - // 修改数据库 - if (string.IsNullOrWhiteSpace(remark)) - { - var newRemarkData = new - { - imei, - time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), - commandValue = new - { - systolicCalibrationValue = systolic_ref_value, //收缩压标定值,值为0 表示不生效 - diastolicCalibrationValue = diastolic_ref_value, //舒张压标定值,值为0表示不生效 - systolicIncValue = 0, //收缩压显示增量,值为0 表示不生效 - diastolicIncValue = 0 //舒张压显示增量,值为0 表示不生效 - } - }; - resObj!["remarks"] = $"is_blood_press:{JsonConvert.SerializeObject(newRemarkData)}|"; - var DataServicePersionUpdate = $"{dataServiceBaseUrl}/api/GpsCard/GpsPerson/Update"; - var resUpdate = await _httpHelper.HttpToPostAsync(DataServicePersionUpdate, resObj, Dataheaders).ConfigureAwait(false); - _logger.LogInformation($"更新Person数据库|{resUpdate}"); - - //更新缓存 - List> headersCache = new() + // 累计增量 + systolicInc = currentSystolicInc + lastPushSystolicInc; + diastolicInc = currentDiastolicInc + lastPushDiastolicInc; + + _logger.LogInformation($"{nameof(Worker)} 开启血压标定值下发: {_configBoodPressResolver.EnableBPRefPush}"); + if (_configBoodPressResolver.EnableBPRefPush) + // if (false) // 临时关闭 + { + BloodPressCalibrationConfigModel bpIncData = new() { - new KeyValuePair("AuthKey", "key1") + + Imei = imeiDel, + SystolicRefValue = SafeType.SafeInt(((int)systolicRefValue!)), //收缩压标定值,值为0 表示不生效 + DiastolicRefValue = SafeType.SafeInt(((int)diastolicRefValue!)), //舒张压标定值,值为0表示不生效 + SystolicIncValue = SafeType.SafeInt(((int)systolicInc!)), //收缩压显示增量,值为0 表示不生效 + DiastolicIncValue = SafeType.SafeInt(((int)diastolicInc!)) //舒张压显示增量,值为0 表示不生效 }; + var pushedBP = await _serviceIotWebApi.SetBloodPressCalibrationConfigAsync(bpIncData).ConfigureAwait(false); + if (pushedBP) + { - var cacheUrl = $"http://id.ssjlai.com/webapi/api/Device/UpdatePersonInfoCache?imei={imei}"; - var updateCache = await _httpHelper.HttpToGetAsync(cacheUrl, headersCache); - _logger.LogInformation($"更新Person缓存|{updateCache}"); - } - } - */ - #endregion - - //var bpData = new - //{ - // imei = imeiDel, - // //systolicCalibrationValue = last?[5], //收缩压标定值,值为0 表示不生效 - // //diastolicCalibrationValue = last?[12], //舒张压标定值,值为0表示不生效 - // //systolicIncValue = last?[10], //收缩压显示增量,值为0 表示不生效 - // //diastolicIncValue = last?[17] //舒张压显示增量,值为0 表示不生效 - - // systolicCalibrationValue = systolic_ref_value, //收缩压标定值,值为0 表示不生效 - // diastolicCalibrationValue = diastolic_ref_value, //舒张压标定值,值为0表示不生效 - // systolicIncValue = systolic_inc_value, //收缩压显示增量,值为0 表示不生效 - // diastolicIncValue = diastolic_inc_value //舒张压显示增量,值为0 表示不生效 - //}; - //var str = JsonConvert.SerializeObject(bpData); - //var url = $"http://id.ssjlai.com/webapi/api/Command/SetBloodPressCalibrationConfig"; - //List> headers = new() - //{ - // new KeyValuePair("AuthKey", "key1") - //}; - //var res = await _httpHelper.HttpToPostAsync(url, bpData, headers).ConfigureAwait(false); - //_logger.LogInformation($"向{imeiDel}下发增量值数据:{str},响应:{res}"); - //var resJToken = JsonConvert.DeserializeObject(res!) as JToken; - - - //if (resJToken!["message"]!.ToString().Equals("ok")) - Console.WriteLine($"{nameof(Worker)} 开启血压标定值下发: {_configBoodPressResolver.EnableBPRefPush}"); - // if (_configBoodPressResolver.EnableBPRefPush) - if (false) // 临时关闭 - { - BloodPressCalibrationConfigModel bpIncData = new() + #region 保存下推记录 stb_hm_bp_push_ref_inc_value + var sql = $"INSERT INTO health_monitor.hm_bp_push_ref_inc_value_{imeiDel.Substring(imeiDel.Length - 2)} " + + $"USING health_monitor.stb_hm_bp_push_ref_inc_value " + + $"TAGS ('{imeiDel.Substring(imeiDel.Length - 2)}') " + + $"VALUES(" + + $"'{startTime:yyyy-MM-dd HH:mm:ss.fff}'," + + $"'{imeiDel}'," + + $"{bpIncData.SystolicRefValue}," + + $"{bpIncData.DiastolicRefValue}," + + $"{bpIncData.SystolicIncValue}," + + $"{bpIncData.DiastolicIncValue}," + + $"{true}," + + $"{systolicAvg}," + + $"{diastolicAvg}," + + $"{systolicAvgOffset}," + + $"{diastolicAvgOffset}," + + $"'{lastPush?.Timestamp:yyyy-MM-dd HH:mm:ss.fff}'," + + $"'{startTime:yyyy-MM-dd HH:mm:ss.fff}'" + + $")"; + _serviceTDengine.ExecuteInsertSQL(sql); + #endregion + + #region 注册定时下发 + // 注册下次下推 + var endTime = DateTime.Now; + +#if DEBUG + + + //long ttl = (long)((60 * 1000-(endTime-startTime).TotalMilliseconds)/1000); + //await _serviceEtcd.PutValAsync(key, imeiDel,ttl, 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 + 2, 0).AddDays(interval); + TimeSpan timeUntilNextRun = nextRunTime - now; + + // 如果当前时间已经超过了8点,将等待到明天后的8点 + if (timeUntilNextRun < TimeSpan.Zero) { + timeUntilNextRun = timeUntilNextRun.Add(TimeSpan.FromMinutes(1)); + nextRunTime += timeUntilNextRun; + } - Imei = imeiDel, - SystolicRefValue = SafeType.SafeInt(((int)systolic_ref_value!)), //收缩压标定值,值为0 表示不生效 - DiastolicRefValue = SafeType.SafeInt(((int)diastolic_ref_value!)), //舒张压标定值,值为0表示不生效 - SystolicIncValue = SafeType.SafeInt(((int)systolic_inc_value!)), //收缩压显示增量,值为0 表示不生效 - DiastolicIncValue = SafeType.SafeInt(((int)diastolic_inc_value!)) //舒张压显示增量,值为0 表示不生效 - }; - var pushedBP = await _serviceIotWebApi.SetBloodPressCalibrationConfigAsync(bpIncData).ConfigureAwait(false); - if (pushedBP) + // var ttl = timeUntilNextRun.TotalMilliseconds; + long ttl = (long)((timeUntilNextRun.TotalMilliseconds - (endTime - startTime).TotalMilliseconds) / 1000); + var data = new { + imei = imeiDel, + 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); - #region 保存下推记录 stb_hm_bp_push_ref_inc_value - var sql = $"INSERT INTO health_monitor.hm_bp_push_ref_inc_value_{imeiDel.Substring(imeiDel.Length - 2)} " + - $"USING health_monitor.stb_hm_bp_push_ref_inc_value " + - $"TAGS ('{imeiDel.Substring(imeiDel.Length - 2)}') " + - $"VALUES(" + - $"'{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}'," + - $"'{imeiDel}'," + - $"{systolic_ref_value}," + - $"{diastolic_ref_value}," + - $"{systolic_inc_value}," + - $"{diastolic_inc_value}," + - $"{false})"; - - _serviceTDengine.ExecuteInsertSQL(sql); - #endregion - - // 注册下次下推 - var endTime = DateTime.Now; - - - - - #if DEBUG - - - //long ttl = (long)((60 * 1000-(endTime-startTime).TotalMilliseconds)/1000); - //await _serviceEtcd.PutValAsync(key, imeiDel,ttl, 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 + 2, 0).AddDays(interval); - TimeSpan timeUntilNextRun = nextRunTime - now; - - // 如果当前时间已经超过了8点,将等待到明天后的8点 - if (timeUntilNextRun < TimeSpan.Zero) - { - timeUntilNextRun = timeUntilNextRun.Add(TimeSpan.FromMinutes(1)); - nextRunTime += timeUntilNextRun; - } - - // var ttl = timeUntilNextRun.TotalMilliseconds; - long ttl = (long)((timeUntilNextRun.TotalMilliseconds - (endTime - startTime).TotalMilliseconds) / 1000); - var data = new - { - imei = imeiDel, - 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 - // 每$interval天,晚上8点 - var interval = 1; - // 获取当前时间 - DateTime now = DateTime.Now; - - // 计算距离下一个$interval天后的8点的时间间隔 - DateTime nextRunTime = new DateTime(now.Year, now.Month, now.Day, 20, 0, 0).AddDays(interval); - TimeSpan timeUntilNextRun = nextRunTime - now; - - // 如果当前时间已经超过了8点,将等待到明天后的8点 - if (timeUntilNextRun < TimeSpan.Zero) - { - timeUntilNextRun = timeUntilNextRun.Add(TimeSpan.FromDays(1)); - nextRunTime += timeUntilNextRun; - } - - // var ttl = timeUntilNextRun.TotalMilliseconds; - long ttl = (long)((timeUntilNextRun.TotalMilliseconds-(endTime-startTime).TotalMilliseconds)/1000); - var data = new - { - imei = imeiDel, - 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 + await _serviceEtcd.PutValAsync(key, result, ttl, false).ConfigureAwait(false); - } - else +#else + // 每$interval天,晚上8点 + var interval = 1; + // 获取当前时间 + DateTime now = DateTime.Now; + + // 计算距离下一个$interval天后的8点的时间间隔 + DateTime nextRunTime = new DateTime(now.Year, now.Month, now.Day, 20, 0, 0).AddDays(interval); + TimeSpan timeUntilNextRun = nextRunTime - now; + + // 如果当前时间已经超过了8点,将等待到明天后的8点 + if (timeUntilNextRun < TimeSpan.Zero) { - _logger.LogInformation($"错误响应,没有下推数据"); + timeUntilNextRun = timeUntilNextRun.Add(TimeSpan.FromDays(1)); + nextRunTime += timeUntilNextRun; } + + // var ttl = timeUntilNextRun.TotalMilliseconds; + long ttl = (long)((timeUntilNextRun.TotalMilliseconds-(endTime-startTime).TotalMilliseconds)/1000); + var data = new + { + imei = imeiDel, + 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 + + } + else + { + _logger.LogInformation($"错误响应,没有下推数据"); } } } else { - _logger.LogInformation($"向{imeiDel}准备下推的数据已经失效ts,{ts}"); + _logger.LogInformation($"向{imeiDel}统计数据已经失效"); } - - #endregion - //if (imeiDel.Equals("861281060086216")) - //{ - // var result = await _httpHelper.HttpToPostAsync(url, data, headers).ConfigureAwait(false); - // _logger.LogInformation($"向{imeiDel}下发增量值数据:{str},响应:{result}"); - // Console.WriteLine(str); - - //} - //Console.BackgroundColor = ConsoleColor.Black; + } break; } - + }); - //if (response.Events.Count == 0) - //{ - // Console.WriteLine(response); - //} - //else - //{ - // Console.WriteLine($"{response.Events[0].Kv.Key.ToStringUtf8()}:{response.Events.Kv.Value.ToStringUtf8()}"); - //} } + // private void WatchEvents(WatchResponse response) + // { + + // response.Events.ToList().ForEach(async e => + // { + + // switch (e.Type.ToString()) + // { + // case "Put": + // // 获取时间点计算TTL + // Console.BackgroundColor = ConsoleColor.Blue; + // Console.WriteLine($"--- {e.Type}--{e.Kv.Key.ToStringUtf8()}--{e.Kv.Value.ToStringUtf8()}---{DateTime.Now}"); + // Console.BackgroundColor = ConsoleColor.Black; + // break; + + // case "Delete": + // // TTL到了重新计算TTL,下发 + // Console.BackgroundColor = ConsoleColor.Green; + // Console.WriteLine($"--- {e.Type}--{e.Kv.Key.ToStringUtf8()}--{e.Kv.Value.ToStringUtf8()}---{DateTime.Now}"); + + // // var key = $"health_moniter/schedule_push/imei/{bp.Serialno}"; + // var key = e.Kv.Key.ToStringUtf8(); + // var imeiDel = key.Split('/')[3]; + // var schedule_push = await _serviceEtcd.GetValAsync(key).ConfigureAwait(false); + // if (string.IsNullOrWhiteSpace(schedule_push)) + // { + + + // var startTime =DateTime.Now; + // // 下发增量值 + // #region 定时下发增量值 + // var last= await _serviceTDengine.GetLastAsync("stb_hm_bloodpress_stats_inc", $"serialno='{imeiDel}' order by last_update desc"); + // var ts = last?[0]; + // if (DateTime.TryParse(ts?.ToString(),out DateTime newTs)) + // { + // // 7 天有效数据 + // if (newTs.AddDays(7) > DateTime.Now) + // { + // Console.WriteLine(ts); + // var systolic_ref_value = last?[5]; + // var diastolic_ref_value = last?[12]; + // var systolic_inc_value = last?[10]; + // var diastolic_inc_value = last?[17]; + + // #region 判断是否初始化remark + + + // // 判断是否初始化remark + // /** + // * + // var imei = imeiDel; + // var last_push = await _serviceTDengine.GetLastAsync("stb_hm_bp_push_ref_inc_value", $"serialno='{imei}' order by ts desc"); + // if (last_push?.Count == 0) + // { + // var dataServiceBaseUrl = $"https://id.ssjlai.com/data"; + // var DataServicePersionGet = $"{dataServiceBaseUrl}/api/GpsCard/GpsPerson/GetFirst"; + // List> Dataheaders = new() + // { + // new KeyValuePair("requestId", $"{imei}") + // }; + // var dataPersion = new + // { + // filters = new List() { new { key = "serialno", value = $"{imei}", valueType = "string", @operator = "Equal" } }, + // orderBys = new List() { new { key = "serialno", isDesc = true } } + // }; + // var resRef = await _httpHelper.HttpToPostAsync(DataServicePersionGet, dataPersion, Dataheaders).ConfigureAwait(false); + // var resObj = JsonConvert.DeserializeObject(resRef!) as JToken; + // var remark = resObj?["remarks"]?.ToString(); + + // // 修改数据库 + // if (string.IsNullOrWhiteSpace(remark)) + // { + // var newRemarkData = new + // { + // imei, + // time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + // commandValue = new + // { + // systolicCalibrationValue = systolic_ref_value, //收缩压标定值,值为0 表示不生效 + // diastolicCalibrationValue = diastolic_ref_value, //舒张压标定值,值为0表示不生效 + // systolicIncValue = 0, //收缩压显示增量,值为0 表示不生效 + // diastolicIncValue = 0 //舒张压显示增量,值为0 表示不生效 + // } + // }; + // resObj!["remarks"] = $"is_blood_press:{JsonConvert.SerializeObject(newRemarkData)}|"; + // var DataServicePersionUpdate = $"{dataServiceBaseUrl}/api/GpsCard/GpsPerson/Update"; + // var resUpdate = await _httpHelper.HttpToPostAsync(DataServicePersionUpdate, resObj, Dataheaders).ConfigureAwait(false); + // _logger.LogInformation($"更新Person数据库|{resUpdate}"); + + // //更新缓存 + // List> headersCache = new() + // { + // new KeyValuePair("AuthKey", "key1") + // }; + + // var cacheUrl = $"http://id.ssjlai.com/webapi/api/Device/UpdatePersonInfoCache?imei={imei}"; + // var updateCache = await _httpHelper.HttpToGetAsync(cacheUrl, headersCache); + // _logger.LogInformation($"更新Person缓存|{updateCache}"); + // } + // } + // */ + // #endregion + + // //var bpData = new + // //{ + // // imei = imeiDel, + // // //systolicCalibrationValue = last?[5], //收缩压标定值,值为0 表示不生效 + // // //diastolicCalibrationValue = last?[12], //舒张压标定值,值为0表示不生效 + // // //systolicIncValue = last?[10], //收缩压显示增量,值为0 表示不生效 + // // //diastolicIncValue = last?[17] //舒张压显示增量,值为0 表示不生效 + + // // systolicCalibrationValue = systolic_ref_value, //收缩压标定值,值为0 表示不生效 + // // diastolicCalibrationValue = diastolic_ref_value, //舒张压标定值,值为0表示不生效 + // // systolicIncValue = systolic_inc_value, //收缩压显示增量,值为0 表示不生效 + // // diastolicIncValue = diastolic_inc_value //舒张压显示增量,值为0 表示不生效 + // //}; + // //var str = JsonConvert.SerializeObject(bpData); + // //var url = $"http://id.ssjlai.com/webapi/api/Command/SetBloodPressCalibrationConfig"; + // //List> headers = new() + // //{ + // // new KeyValuePair("AuthKey", "key1") + // //}; + // //var res = await _httpHelper.HttpToPostAsync(url, bpData, headers).ConfigureAwait(false); + // //_logger.LogInformation($"向{imeiDel}下发增量值数据:{str},响应:{res}"); + // //var resJToken = JsonConvert.DeserializeObject(res!) as JToken; + + + // //if (resJToken!["message"]!.ToString().Equals("ok")) + // Console.WriteLine($"{nameof(Worker)} 开启血压标定值下发: {_configBoodPressResolver.EnableBPRefPush}"); + // // if (_configBoodPressResolver.EnableBPRefPush) + // if (false) // 临时关闭 + // { + // BloodPressCalibrationConfigModel bpIncData = new() + // { + + // Imei = imeiDel, + // SystolicRefValue = SafeType.SafeInt(((int)systolic_ref_value!)), //收缩压标定值,值为0 表示不生效 + // DiastolicRefValue = SafeType.SafeInt(((int)diastolic_ref_value!)), //舒张压标定值,值为0表示不生效 + // SystolicIncValue = SafeType.SafeInt(((int)systolic_inc_value!)), //收缩压显示增量,值为0 表示不生效 + // DiastolicIncValue = SafeType.SafeInt(((int)diastolic_inc_value!)) //舒张压显示增量,值为0 表示不生效 + // }; + // var pushedBP = await _serviceIotWebApi.SetBloodPressCalibrationConfigAsync(bpIncData).ConfigureAwait(false); + // if (pushedBP) + // { + + // #region 保存下推记录 stb_hm_bp_push_ref_inc_value + // var sql = $"INSERT INTO health_monitor.hm_bp_push_ref_inc_value_{imeiDel.Substring(imeiDel.Length - 2)} " + + // $"USING health_monitor.stb_hm_bp_push_ref_inc_value " + + // $"TAGS ('{imeiDel.Substring(imeiDel.Length - 2)}') " + + // $"VALUES(" + + // $"'{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}'," + + // $"'{imeiDel}'," + + // $"{systolic_ref_value}," + + // $"{diastolic_ref_value}," + + // $"{systolic_inc_value}," + + // $"{diastolic_inc_value}," + + // $"{false})"; + + // _serviceTDengine.ExecuteInsertSQL(sql); + // #endregion + + // // 注册下次下推 + // var endTime = DateTime.Now; + + + + + //#if DEBUG + + + // //long ttl = (long)((60 * 1000-(endTime-startTime).TotalMilliseconds)/1000); + // //await _serviceEtcd.PutValAsync(key, imeiDel,ttl, 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 + 2, 0).AddDays(interval); + // TimeSpan timeUntilNextRun = nextRunTime - now; + + // // 如果当前时间已经超过了8点,将等待到明天后的8点 + // if (timeUntilNextRun < TimeSpan.Zero) + // { + // timeUntilNextRun = timeUntilNextRun.Add(TimeSpan.FromMinutes(1)); + // nextRunTime += timeUntilNextRun; + // } + + // // var ttl = timeUntilNextRun.TotalMilliseconds; + // long ttl = (long)((timeUntilNextRun.TotalMilliseconds - (endTime - startTime).TotalMilliseconds) / 1000); + // var data = new + // { + // imei = imeiDel, + // 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 + // // 每$interval天,晚上8点 + // var interval = 1; + // // 获取当前时间 + // DateTime now = DateTime.Now; + + // // 计算距离下一个$interval天后的8点的时间间隔 + // DateTime nextRunTime = new DateTime(now.Year, now.Month, now.Day, 20, 0, 0).AddDays(interval); + // TimeSpan timeUntilNextRun = nextRunTime - now; + + // // 如果当前时间已经超过了8点,将等待到明天后的8点 + // if (timeUntilNextRun < TimeSpan.Zero) + // { + // timeUntilNextRun = timeUntilNextRun.Add(TimeSpan.FromDays(1)); + // nextRunTime += timeUntilNextRun; + // } + + // // var ttl = timeUntilNextRun.TotalMilliseconds; + // long ttl = (long)((timeUntilNextRun.TotalMilliseconds-(endTime-startTime).TotalMilliseconds)/1000); + // var data = new + // { + // imei = imeiDel, + // 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 + + + // } + // else + // { + // _logger.LogInformation($"错误响应,没有下推数据"); + // } + // } + // } + // } + // else + // { + // _logger.LogInformation($"向{imeiDel}准备下推的数据已经失效ts,{ts}"); + // } + + + // #endregion + // //if (imeiDel.Equals("861281060086216")) + // //{ + // // var result = await _httpHelper.HttpToPostAsync(url, data, headers).ConfigureAwait(false); + // // _logger.LogInformation($"向{imeiDel}下发增量值数据:{str},响应:{result}"); + // // Console.WriteLine(str); + + // //} + // //Console.BackgroundColor = ConsoleColor.Black; + + // } + + // break; + // } + + // }); + // //if (response.Events.Count == 0) + // //{ + // // Console.WriteLine(response); + // //} + // //else + // //{ + // // Console.WriteLine($"{response.Events[0].Kv.Key.ToStringUtf8()}:{response.Events.Kv.Value.ToStringUtf8()}"); + // //} + // } + } }