This commit is contained in:
tanglong 2025-07-25 13:18:40 +08:00
parent b5b2790b2a
commit 32efbdd94c

View File

@ -14,38 +14,35 @@ namespace YD_AllHeartRates.Api.Services.Impl
public static ChartDataDto BuildHeartRateTrend(List<HeartRateData> data) public static ChartDataDto BuildHeartRateTrend(List<HeartRateData> data)
{ {
// 固定时间段8点到16点 var chart = new ChartDataDto
var fixedHours = Enumerable.Range(8, 9).ToList(); // 8~16 共9小时 {
var axisX = fixedHours.Select(h => $"{h}:00").ToList(); AxisX = new List<string>(),
AxisY = new List<int>()
var axisY = new List<int>(); };
if (data == null || data.Count == 0) if (data == null || data.Count == 0)
{ return chart;
// 无数据时返回默认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) // 按小时分组计算平均值(四舍五入)
{ var hourlyAvg = data
axisY.Add(hourlyAvg.TryGetValue(hour, out int val) ? val : 0); .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 return chart;
{
AxisX = axisX,
AxisY = axisY
};
} }
public static int CalculateReachRate(int reachCount, int total) public static int CalculateReachRate(int reachCount, int total)
=> total == 0 ? 0 : (int)((double)reachCount / total * 100); => total == 0 ? 0 : (int)((double)reachCount / total * 100);