From 32efbdd94cdc4ea6c663b4acc1b7bda34a8b6b5e Mon Sep 17 00:00:00 2001 From: tanglong <842690096@qq.com> Date: Fri, 25 Jul 2025 13:18:40 +0800 Subject: [PATCH] c --- .../Services/Impl/HeartRateReportHelper.cs | 45 +++++++++---------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/YD_AllHeartRates.Api/Services/Impl/HeartRateReportHelper.cs b/YD_AllHeartRates.Api/Services/Impl/HeartRateReportHelper.cs index 8747c3a..a22eda5 100644 --- a/YD_AllHeartRates.Api/Services/Impl/HeartRateReportHelper.cs +++ b/YD_AllHeartRates.Api/Services/Impl/HeartRateReportHelper.cs @@ -14,38 +14,35 @@ namespace YD_AllHeartRates.Api.Services.Impl public static ChartDataDto BuildHeartRateTrend(List data) { - // 固定时间段:8点到16点 - var fixedHours = Enumerable.Range(8, 9).ToList(); // 8~16 共9小时 - var axisX = fixedHours.Select(h => $"{h}:00").ToList(); - - var axisY = new List(); + var chart = new ChartDataDto + { + AxisX = new List(), + AxisY = new List() + }; if (data == null || data.Count == 0) - { - // 无数据时返回默认0值 - axisY = Enumerable.Repeat(0, fixedHours.Count).ToList(); - } - else - { - // 按小时分组计算平均值(四舍五入) - var hourlyAvg = data - .GroupBy(x => x.ScoreTime.Hour) - .ToDictionary(g => g.Key, g => (int)Math.Round(g.Average(x => x.Value))); + return chart; - foreach (var hour in fixedHours) - { - axisY.Add(hourlyAvg.TryGetValue(hour, out int val) ? val : 0); - } + // 按小时分组计算平均值(四舍五入) + var hourlyAvg = data + .GroupBy(x => x.ScoreTime.Hour) + .ToDictionary(g => g.Key, g => (int)Math.Round(g.Average(x => x.Value))); + + // 计算最小和最大小时 + int minHour = data.Min(x => x.ScoreTime.Hour); + int maxHour = data.Max(x => x.ScoreTime.Hour); + + for (int hour = minHour; hour <= maxHour; hour++) + { + chart.AxisX.Add($"{hour}:00"); + chart.AxisY.Add(hourlyAvg.TryGetValue(hour, out int val) ? val : 0); } - return new ChartDataDto - { - AxisX = axisX, - AxisY = axisY - }; + return chart; } + public static int CalculateReachRate(int reachCount, int total) => total == 0 ? 0 : (int)((double)reachCount / total * 100);