From 21b00cee0d9d160f4cf0bc9e9a7e4e0fd87c7000 Mon Sep 17 00:00:00 2001 From: richarjiang Date: Wed, 24 Sep 2025 18:03:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E5=9B=B4=E5=BA=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/users/users.service.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/users/users.service.ts b/src/users/users.service.ts index 09c98eb..ef98c0c 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -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; } } });