This commit is contained in:
tanglong 2025-07-25 13:11:54 +08:00
parent da806d819b
commit a65ce2699f

View File

@ -14,39 +14,38 @@ namespace YD_AllHeartRates.Api.Services.Impl
public static ChartDataDto BuildHeartRateTrend(List<HeartRateData> 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<int>();
if (data == null || data.Count == 0)
return new ChartDataDto()
{
// 无数据时返回默认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)));
foreach (var hour in fixedHours)
{
AxisX = new List<string>() { "8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00" },
AxisY = new List<int>() { 0, 0, 0, 0, 0, 0, 0, 0, 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);
var chart = new ChartDataDto
{
AxisX = new List<string>(),
AxisY = new List<int>()
};
for (int hour = minHour; hour <= maxHour; hour++)
{
chart.AxisX.Add($"{hour}:00"); // 去掉前导0
chart.AxisY.Add(hourlyAvg.TryGetValue(hour, out int val) ? val : 80);
axisY.Add(hourlyAvg.TryGetValue(hour, out int val) ? val : 80); // 缺省用80填充
}
}
return chart;
return new ChartDataDto
{
AxisX = axisX,
AxisY = axisY
};
}
public static int CalculateReachRate(int reachCount, int total)
=> total == 0 ? 0 : (int)((double)reachCount / total * 100);