fix: 优化围度数据计算逻辑
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user