From bcbeb64e28e81ed71996c49b5447e33971d2f2fe Mon Sep 17 00:00:00 2001 From: kkfluous Date: Thu, 16 Apr 2026 21:08:29 +0800 Subject: [PATCH] fix(scheduling): use current year mileage for consistent data display MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add currentYearMileage to SchedulingVehicleInfo (backend + frontend) - Compute completionRate as currentYearMileage/yearTarget (year-based) instead of using overall completion_rate from DB - Display "本年已跑" instead of "累计" in detail modal - Fix reason text to show year completion rate Before: 累计 4.6万, 考核 3.0万, 完成率 12.1% (mismatched periods) After: 本年已跑 8.3万, 考核 3.0万, 完成率 275% (consistent year-based) Co-Authored-By: Claude Opus 4.6 (1M context) --- src/modules/scheduling/SuggestionDetail.tsx | 4 ++-- src/modules/scheduling/types.ts | 1 + src/server/routes/scheduling/algorithm.ts | 8 ++++++-- src/server/routes/scheduling/types.ts | 3 ++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/modules/scheduling/SuggestionDetail.tsx b/src/modules/scheduling/SuggestionDetail.tsx index 71acbfe..2b4b175 100644 --- a/src/modules/scheduling/SuggestionDetail.tsx +++ b/src/modules/scheduling/SuggestionDetail.tsx @@ -85,8 +85,8 @@ export default function SuggestionDetail({ suggestion: s, onClose, onNotifySucce
{v.targetName} | - 累计 {fmtKm(v.totalMileage)} km - 考核 {fmtKm(v.yearTarget)} km + 本年已跑 {fmtKm(v.currentYearMileage)} km + 本年考核 {fmtKm(v.yearTarget)} km {v.region}
diff --git a/src/modules/scheduling/types.ts b/src/modules/scheduling/types.ts index 7cbbe12..f78fd0d 100644 --- a/src/modules/scheduling/types.ts +++ b/src/modules/scheduling/types.ts @@ -4,6 +4,7 @@ export interface SchedulingVehicleInfo { targetName: string; vehicleType: string; totalMileage: number; + currentYearMileage: number; completionRate: number; yearTarget: number; region: string; diff --git a/src/server/routes/scheduling/algorithm.ts b/src/server/routes/scheduling/algorithm.ts index 6df30ba..b7d981f 100644 --- a/src/server/routes/scheduling/algorithm.ts +++ b/src/server/routes/scheduling/algorithm.ts @@ -35,13 +35,16 @@ export function classifyVehicle( import type { SchedulingVehicleInfo } from './types.js'; export function toVehicleInfo(v: EnrichedVehicle): SchedulingVehicleInfo { + // Use current year completion rate instead of overall + const yearCompletionRate = v.yearTarget > 0 ? v.currentYearMileage / v.yearTarget : 0; return { plateNumber: v.plateNumber, targetId: v.targetId, targetName: v.targetName, vehicleType: v.vehicleType, totalMileage: v.totalMileage, - completionRate: v.completionRate, + currentYearMileage: v.currentYearMileage, + completionRate: yearCompletionRate, yearTarget: v.yearTarget, region: v.region, province: v.province, @@ -152,7 +155,8 @@ export function generateSuggestions( }) .slice(0, 5); - const reason = `${vehicle.customer}日均里程 ${Math.round(vehicle.customerAvgDaily)} KM(高里程),该车已达标(完成率 ${Math.round(vehicle.completionRate * 100)}%),建议换上里程缺口大的车辆以加速达标。`; + const yearRate = vehicle.yearTarget > 0 ? Math.round((vehicle.currentYearMileage / vehicle.yearTarget) * 100) : 0; + const reason = `${vehicle.customer}日均里程 ${Math.round(vehicle.customerAvgDaily)} KM(高里程),该车本年完成率 ${yearRate}%,建议换上里程缺口大的车辆以加速达标。`; suggestions.push({ id: `qualified-${vehicle.plateNumber}`, diff --git a/src/server/routes/scheduling/types.ts b/src/server/routes/scheduling/types.ts index eac2b5a..73e6158 100644 --- a/src/server/routes/scheduling/types.ts +++ b/src/server/routes/scheduling/types.ts @@ -4,7 +4,8 @@ export interface SchedulingVehicleInfo { targetName: string; vehicleType: string; totalMileage: number; - completionRate: number; + currentYearMileage: number; + completionRate: number; // 本年完成率 currentYearMileage / yearTarget yearTarget: number; region: string; province: string;