fix: 优化围度数据计算逻辑

This commit is contained in:
richarjiang
2025-09-24 18:03:32 +08:00
parent c9eda4577f
commit 21b00cee0d

View File

@@ -2436,13 +2436,14 @@ export class UsersService {
break;
}
// 获取时间范围内的所有围度数据
// 获取从开始日期到数据点最大时间的所有围度数据
const maxDataPointDate = dataPoints.reduce((max, date) => date > max ? date : max, startDate);
const measurements = await this.userBodyMeasurementHistoryModel.findAll({
where: {
userId,
createdAt: {
[Op.gte]: startDate,
[Op.lte]: now,
[Op.lte]: maxDataPointDate,
},
},
order: [['createdAt', 'ASC']],
@@ -2462,11 +2463,11 @@ export class UsersService {
};
});
// 为每个数据点找到最接近的围度数据
// 为每个数据点找到最的围度数据
analysisData.forEach((point, index) => {
const targetDate = dataPoints[index];
// 为每种围度类型找到最接近目标日期
// 为每种围度类型找到目标日期为止的最新
Object.values(BodyMeasurementType).forEach(measurementType => {
const relevantMeasurements = measurements.filter(m =>
m.measurementType === measurementType &&
@@ -2474,8 +2475,8 @@ export class UsersService {
);
if (relevantMeasurements.length > 0) {
// 取最接近目标日期的最新记录
const closestMeasurement = relevantMeasurements
// 取时间最新的记录(离目标日期最近且不超过目标日期的最新记录
const latestMeasurement = relevantMeasurements
.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())[0];
// 将数据库字段映射到响应字段
@@ -2490,7 +2491,7 @@ export class UsersService {
const fieldName = fieldMapping[measurementType];
if (fieldName) {
point[fieldName] = closestMeasurement.value;
point[fieldName] = latestMeasurement.value;
}
}
});