From 91f93b6cc892b48160699240b096e8c9b7859fce Mon Sep 17 00:00:00 2001 From: H Vs Date: Sat, 9 Dec 2023 20:55:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E5=BC=80=E5=A7=8B=E6=97=B6?= =?UTF-8?q?=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HealthMonitor.WebApi/Worker.cs | 313 ++------------------------------- 1 file changed, 15 insertions(+), 298 deletions(-) diff --git a/HealthMonitor.WebApi/Worker.cs b/HealthMonitor.WebApi/Worker.cs index 5edcfab..ad15c2f 100644 --- a/HealthMonitor.WebApi/Worker.cs +++ b/HealthMonitor.WebApi/Worker.cs @@ -180,6 +180,12 @@ namespace HealthMonitor.WebApi int systolicMax = 0; int diastolicMax = 0; + + // 统计时间 + //DateTime endTime = DateTime.Now; //测试 + DateTime statStartTime = DateTime.Now; + + // 最小值 int systolicMin = 0; int diastolicMin = 0; @@ -235,6 +241,8 @@ namespace HealthMonitor.WebApi 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"; + // 使用最近一次的下推时间作为统计的开始时间 + statStartTime= lastPush!.Timestamp; } // 没有下推记录(历史遗留数据),没有初始的测量值产生的平均值(测量值=平均值) else @@ -291,6 +299,12 @@ namespace HealthMonitor.WebApi _logger.LogInformation($"{imeiDel} -- {nameof(Worker)} --{nameof(WatchEvents)} 没有足够的数据样本,不会定时下发"); break; } + // 没有下推记录重新计算统计时间 + if (lastPush == null) + { + var firstHmBp = hmBpParser?.Select(i=>i).OrderBy(i=>i.Timestamp).FirstOrDefault(); + statStartTime = firstHmBp!.Timestamp; + } // NewMethod(systolicRefValue, hmBpParser); @@ -350,7 +364,6 @@ namespace HealthMonitor.WebApi 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 " + @@ -367,7 +380,7 @@ namespace HealthMonitor.WebApi $"{diastolicAvg}," + $"{systolicAvgOffset}," + $"{diastolicAvgOffset}," + - $"'{lastPush?.Timestamp:yyyy-MM-dd HH:mm:ss.fff}'," + + $"'{statStartTime:yyyy-MM-dd HH:mm:ss.fff}'," + $"'{startTime:yyyy-MM-dd HH:mm:ss.fff}'" + $")"; _serviceTDengine.ExecuteInsertSQL(sql); @@ -470,302 +483,6 @@ namespace HealthMonitor.WebApi }); - - - } - - private static void NewMethod(int systolicRefValue, ParseTDengineRestResponse? hmBpParser) - { - var sortedList = hmBpParser?.Select(i => i) - .Where(i => i.IsDisplay.Equals(true)) - .OrderByDescending(i => i.SystolicValue) - .ThenByDescending(i => i.DiastolicValue) - .ToList(); - // 去除最大值和最小值各一个(列表的头和尾) - var trimmedList = sortedList? - .Skip(1) - .Take(sortedList.Count - 2) - .ToList(); - - // 去除异常值 - var filteredList = trimmedList?.Where(bp => bp.SystolicValue < SafeType.SafeInt(systolicRefValue!)).ToList(); - - var systolicAvg1 = filteredList?.Select(bp => bp.SystolicValue).Average(); - var diastolicAvg1 = filteredList?.Select(bp => bp.DiastolicValue).Average(); } - - // 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()}"); - // //} - // } - } }