fix: 优化围度数据计算逻辑
This commit is contained in:
@@ -2436,13 +2436,14 @@ export class UsersService {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取时间范围内的所有围度数据
|
// 获取从开始日期到数据点最大时间的所有围度数据
|
||||||
|
const maxDataPointDate = dataPoints.reduce((max, date) => date > max ? date : max, startDate);
|
||||||
const measurements = await this.userBodyMeasurementHistoryModel.findAll({
|
const measurements = await this.userBodyMeasurementHistoryModel.findAll({
|
||||||
where: {
|
where: {
|
||||||
userId,
|
userId,
|
||||||
createdAt: {
|
createdAt: {
|
||||||
[Op.gte]: startDate,
|
[Op.gte]: startDate,
|
||||||
[Op.lte]: now,
|
[Op.lte]: maxDataPointDate,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
order: [['createdAt', 'ASC']],
|
order: [['createdAt', 'ASC']],
|
||||||
@@ -2462,11 +2463,11 @@ export class UsersService {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
// 为每个数据点找到最接近的围度数据
|
// 为每个数据点找到最新的围度数据
|
||||||
analysisData.forEach((point, index) => {
|
analysisData.forEach((point, index) => {
|
||||||
const targetDate = dataPoints[index];
|
const targetDate = dataPoints[index];
|
||||||
|
|
||||||
// 为每种围度类型找到最接近目标日期的值
|
// 为每种围度类型找到到目标日期为止的最新值
|
||||||
Object.values(BodyMeasurementType).forEach(measurementType => {
|
Object.values(BodyMeasurementType).forEach(measurementType => {
|
||||||
const relevantMeasurements = measurements.filter(m =>
|
const relevantMeasurements = measurements.filter(m =>
|
||||||
m.measurementType === measurementType &&
|
m.measurementType === measurementType &&
|
||||||
@@ -2474,8 +2475,8 @@ export class UsersService {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (relevantMeasurements.length > 0) {
|
if (relevantMeasurements.length > 0) {
|
||||||
// 取最接近目标日期的最新记录
|
// 取时间最新的记录(离目标日期最近且不超过目标日期的最新记录)
|
||||||
const closestMeasurement = relevantMeasurements
|
const latestMeasurement = relevantMeasurements
|
||||||
.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())[0];
|
.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];
|
const fieldName = fieldMapping[measurementType];
|
||||||
if (fieldName) {
|
if (fieldName) {
|
||||||
point[fieldName] = closestMeasurement.value;
|
point[fieldName] = latestMeasurement.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user