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;