From 2d2c684d8a8a48b6651302259b495b6107106733 Mon Sep 17 00:00:00 2001 From: kkfluous Date: Thu, 26 Mar 2026 14:42:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=AE=80=E5=8C=96=E5=91=A8=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1SQL=E5=8E=BB=E6=8E=89=E5=AD=90=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0debug=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- src/server/routes/vehicles.ts | 47 ++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/src/server/routes/vehicles.ts b/src/server/routes/vehicles.ts index 21e854b..66a6d96 100644 --- a/src/server/routes/vehicles.ts +++ b/src/server/routes/vehicles.ts @@ -367,9 +367,20 @@ async function getWeeklyStats(): Promise { pool.query(`SELECT COUNT(*) AS cnt FROM tab_truck WHERE is_deleted=0 AND is_operation=1 AND truck_rent_status=7`), pool.query(`SELECT COUNT(*) AS cnt FROM tab_truck WHERE is_deleted=0 AND is_operation=1 AND create_time >= ${WEEK_START_SQL} AND create_time < ${WEEK_END_SQL}`), pool.query(`SELECT COUNT(*) AS cnt FROM tab_truck WHERE (is_operation=0 OR is_deleted=1) AND update_time >= ${WEEK_START_SQL} AND update_time < ${WEEK_END_SQL}`), - pool.query(`SELECT COUNT(*) AS cnt FROM (${DELIVERED_SQL}) t WHERE t.handover_date >= ${WEEK_START_SQL} AND t.handover_date < ${WEEK_END_SQL}`), - pool.query(`SELECT COUNT(*) AS cnt FROM (${RETURNED_SQL}) t WHERE t.handover_date >= ${WEEK_START_SQL} AND t.handover_date < ${WEEK_END_SQL}`), - pool.query(`SELECT COUNT(*) AS cnt FROM (${REPLACED_SQL}) t WHERE t.handover_date >= ${WEEK_START_SQL} AND t.handover_date < ${WEEK_END_SQL}`), + pool.query(`SELECT COUNT(*) AS cnt FROM tab_truck_rent_take take + LEFT JOIN tab_truck_rent_task task ON task.id = take.truck_rent_task_id + WHERE take.is_deleted=0 AND take.take_name IS NOT NULL + AND task.task_type=1 AND task.task_status=1 AND take.update_time IS NOT NULL + AND take.handover_date >= ${WEEK_START_SQL} AND take.handover_date < ${WEEK_END_SQL}`), + pool.query(`SELECT COUNT(*) AS cnt FROM tab_truck_rent_return r + LEFT JOIN tab_truck_rent_task task ON task.id = r.truck_rent_task_id + WHERE r.is_deleted=0 AND r.return_date IS NOT NULL + AND r.return_date >= ${WEEK_START_SQL} AND r.return_date < ${WEEK_END_SQL}`), + pool.query(`SELECT COUNT(*) AS cnt FROM tab_truck_rent_take take + LEFT JOIN tab_truck_rent_task task ON task.id = take.truck_rent_task_id + WHERE take.is_deleted=0 AND take.take_name IS NOT NULL + AND task.task_type=3 AND task.task_status=1 AND take.update_time IS NOT NULL + AND take.handover_date >= ${WEEK_START_SQL} AND take.handover_date < ${WEEK_END_SQL}`), ]); cachedWeeklyStats = { @@ -606,8 +617,38 @@ app.get('/weekly-detail', async (c) => { // GET /api/vehicles/refresh — force cache refresh app.get('/refresh', async (c) => { lastFetchTime = 0; + weeklyStatsLastFetch = 0; const vehicles = await getVehicles(); return c.json({ message: 'Cache refreshed', count: vehicles.length }); }); +// GET /api/vehicles/debug — debug weekly date range and raw counts +app.get('/debug', async (c) => { + const [[dateRange]] = await pool.query(`SELECT + ${WEEK_START_SQL} AS week_start, + ${WEEK_END_SQL} AS week_end, + CURDATE() AS today, + WEEKDAY(CURDATE()) AS weekday`); + const [[deliveredAll]] = await pool.query(`SELECT COUNT(*) AS cnt FROM tab_truck_rent_take take + LEFT JOIN tab_truck_rent_task task ON task.id = take.truck_rent_task_id + WHERE take.is_deleted=0 AND take.take_name IS NOT NULL AND task.task_type=1 AND task.task_status=1`); + const [[deliveredRecent]] = await pool.query(`SELECT COUNT(*) AS cnt FROM tab_truck_rent_take take + LEFT JOIN tab_truck_rent_task task ON task.id = take.truck_rent_task_id + WHERE take.is_deleted=0 AND take.take_name IS NOT NULL AND task.task_type=1 AND task.task_status=1 + AND take.handover_date >= ${WEEK_START_SQL} AND take.handover_date < ${WEEK_END_SQL}`); + const [[latestTake]] = await pool.query(`SELECT MAX(take.handover_date) AS latest FROM tab_truck_rent_take take + LEFT JOIN tab_truck_rent_task task ON task.id = take.truck_rent_task_id + WHERE take.is_deleted=0 AND take.take_name IS NOT NULL AND task.task_type=1 AND task.task_status=1`); + const [[returnedRecent]] = await pool.query(`SELECT COUNT(*) AS cnt FROM tab_truck_rent_return r + WHERE r.is_deleted=0 AND r.return_date IS NOT NULL + AND r.return_date >= ${WEEK_START_SQL} AND r.return_date < ${WEEK_END_SQL}`); + const [[latestReturn]] = await pool.query(`SELECT MAX(r.return_date) AS latest FROM tab_truck_rent_return r WHERE r.is_deleted=0 AND r.return_date IS NOT NULL`); + + return c.json({ + weekRange: dateRange, + delivered: { total: deliveredAll[0]?.cnt, thisWeek: deliveredRecent[0]?.cnt, latestDate: latestTake[0]?.latest }, + returned: { thisWeek: returnedRecent[0]?.cnt, latestDate: latestReturn[0]?.latest }, + }); +}); + export default app;