diff --git a/HealthMonitor.Service/Resolver/BloodpressResolver.cs b/HealthMonitor.Service/Resolver/BloodpressResolver.cs index aa5a115..eab3952 100644 --- a/HealthMonitor.Service/Resolver/BloodpressResolver.cs +++ b/HealthMonitor.Service/Resolver/BloodpressResolver.cs @@ -203,7 +203,7 @@ namespace HealthMonitor.Service.Resolver _serviceTDengine.ExecuteInsertSQL(sql); // 发送到 设置设备血压标定参数 - + #endregion // 注册定时下发事件 @@ -244,14 +244,41 @@ namespace HealthMonitor.Service.Resolver //var result = JsonConvert.SerializeObject(data); - var result = bp.Serialno; + //var result = bp.Serialno; + 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); + // 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; @@ -278,9 +305,18 @@ namespace HealthMonitor.Service.Resolver 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 diff --git a/HealthMonitor.WebApi/Worker.cs b/HealthMonitor.WebApi/Worker.cs index cf803fd..4140fcf 100644 --- a/HealthMonitor.WebApi/Worker.cs +++ b/HealthMonitor.WebApi/Worker.cs @@ -162,7 +162,7 @@ namespace HealthMonitor.WebApi if (newTs.AddDays(7) > DateTime.Now) { Console.WriteLine(ts); - var data = new + var bpData = new { imei = imeiDel, systolicCalibrationValue = last?[5], //收缩压标定值,值为0 表示不生效 @@ -170,24 +170,54 @@ namespace HealthMonitor.WebApi systolicIncValue = last?[10], //收缩压显示增量,值为0 表示不生效 diastolicIncValue = last?[17] //舒张压显示增量,值为0 表示不生效 }; - var str = JsonConvert.SerializeObject(data); + var str = JsonConvert.SerializeObject(bpData); var url = $"http://id.ssjlai.com/webapi/api/Command/SetBloodPressCalibrationConfig"; List> headers = new() { new KeyValuePair("AuthKey", "key1") }; - var result = await _httpHelper.HttpToPostAsync(url, data, headers).ConfigureAwait(false); - _logger.LogInformation($"向{imeiDel}下发增量值数据:{str},响应:{result}"); - var res=JsonConvert.DeserializeObject(result!) as JToken; - if (res!["message"]!.ToString().Equals("ok")) + 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")) { // 注册下次下推 var endTime = DateTime.Now; #if DEBUG - long ttl = (long)((60 * 1000-(endTime-startTime).TotalMilliseconds)/1000); - await _serviceEtcd.PutValAsync(key, imeiDel,ttl, false).ConfigureAwait(false); + //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; @@ -202,11 +232,20 @@ namespace HealthMonitor.WebApi 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); - await _serviceEtcd.PutValAsync(key, imeiDel, ttl, false).ConfigureAwait(false); + 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