Divided the code into functional modules

This commit is contained in:
2025-07-14 19:58:48 +08:00
parent 8680a08863
commit e9c585e9b6
10 changed files with 1214 additions and 829 deletions

View File

@ -0,0 +1,143 @@
using System.Collections.Generic;
using System.Linq;
namespace HeartRateMonitorAndroid.Models
{
/// <summary>
/// 心率会话数据,包含一次监测会话的所有数据和统计信息
/// </summary>
public class HeartRateSessionData
{
private readonly object _heartRateDataLock = new object(); // 线程安全操作的锁对象
private List<HeartRateDataPoint> _heartRateData = new List<HeartRateDataPoint>();
/// <summary>
/// 会话开始时间
/// </summary>
public DateTime SessionStartTime { get; private set; }
/// <summary>
/// 最新心率值
/// </summary>
public int LatestHeartRate { get; private set; }
/// <summary>
/// 最小心率值
/// </summary>
public int MinHeartRate { get; private set; }
/// <summary>
/// 最大心率值
/// </summary>
public int MaxHeartRate { get; private set; }
/// <summary>
/// 平均心率值
/// </summary>
public double AverageHeartRate { get; private set; }
/// <summary>
/// 获取心率数据点列表的副本
/// </summary>
public List<HeartRateDataPoint> HeartRateData
{
get
{
lock (_heartRateDataLock)
{
return _heartRateData.ToList();
}
}
}
/// <summary>
/// 是否有新的心率数据
/// </summary>
public bool HasNewHeartRateData { get; private set; }
/// <summary>
/// 初始化心率会话数据
/// </summary>
public HeartRateSessionData()
{
ResetData();
}
/// <summary>
/// 重置会话数据
/// </summary>
public void ResetData()
{
lock (_heartRateDataLock)
{
_heartRateData.Clear();
LatestHeartRate = 0;
MinHeartRate = 0;
MaxHeartRate = 0;
AverageHeartRate = 0;
HasNewHeartRateData = false;
}
}
/// <summary>
/// 添加新的心率数据点
/// </summary>
/// <param name="heartRate">心率值</param>
public void AddHeartRate(int heartRate)
{
lock (_heartRateDataLock)
{
// 添加新的数据点
var dataPoint = new HeartRateDataPoint
{
Timestamp = DateTime.Now,
HeartRate = heartRate
};
// 如果是第一个数据点,记录会话开始时间
if (_heartRateData.Count == 0)
{
SessionStartTime = DateTime.Now;
}
_heartRateData.Add(dataPoint);
LatestHeartRate = heartRate;
// 限制数据点数量保留最新的100个点
if (_heartRateData.Count > 100)
{
_heartRateData.RemoveAt(0);
}
// 更新统计信息
if (_heartRateData.Count > 0)
{
MinHeartRate = _heartRateData.Min(p => p.HeartRate);
MaxHeartRate = _heartRateData.Max(p => p.HeartRate);
AverageHeartRate = _heartRateData.Average(p => p.HeartRate);
}
HasNewHeartRateData = true;
}
}
/// <summary>
/// 重置新数据标记
/// </summary>
public void ResetNewDataFlag()
{
HasNewHeartRateData = false;
}
/// <summary>
/// 获取当前会话的监测时长
/// </summary>
public TimeSpan GetSessionDuration()
{
if (_heartRateData.Count == 0)
return TimeSpan.Zero;
return DateTime.Now - SessionStartTime;
}
}
}