diff --git a/src/server/routes/mileage/vehicle-info.ts b/src/server/routes/mileage/vehicle-info.ts new file mode 100644 index 0000000..30e8dfe --- /dev/null +++ b/src/server/routes/mileage/vehicle-info.ts @@ -0,0 +1,46 @@ +import pool from '../../db.js'; +import type { VehicleInfoRow } from './types.js'; + +/** 车辆关联信息 SQL(客户名、部门、经理、租赁状态、主体、项目) */ +export const VEHICLE_INFO_SQL = `SELECT + truck.plate_number AS plate, + cus.customer_name AS customer, + dep.dep_name AS department, + u.user_name AS manager, + dic_status.dic_name AS rent_status, + org_truck.org_name AS entity, + c.project_name AS project +FROM tab_truck truck +LEFT JOIN tab_truck_status_info si ON si.truck_id = truck.id AND si.is_deleted = 0 +LEFT JOIN tab_contract c ON c.id = si.contract_id AND c.is_deleted = 0 +LEFT JOIN tab_customer cus ON cus.id = c.customer_id AND cus.is_deleted = 0 +LEFT JOIN tab_user u ON u.id = c.bd AND u.is_deleted = 0 +LEFT JOIN tab_department dep ON dep.id = u.dep_id AND dep.is_deleted = 0 +LEFT JOIN tab_dic dic_status ON dic_status.parent_code = 'dic_truck_rent_status' + AND dic_status.dic_code = truck.truck_rent_status AND dic_status.is_deleted = 0 +LEFT JOIN tab_org org_truck ON org_truck.id = truck.org_id AND org_truck.is_deleted = 0 +WHERE truck.is_deleted = 0 AND truck.is_operation = 1`; + +/** 查询所有车辆关联信息,返回 plate→info 的 Map */ +export async function fetchVehicleInfoMap(): Promise> { + const [rows] = await pool.execute(VEHICLE_INFO_SQL) as [VehicleInfoRow[], unknown]; + const map = new Map(); + for (const row of rows) { + map.set(row.plate, row); + } + return map; +} + +/** 查询指定车牌的关联信息 */ +export async function fetchVehicleInfoByPlates(plates: string[]): Promise> { + if (plates.length === 0) return new Map(); + const [rows] = await pool.execute( + `${VEHICLE_INFO_SQL} AND truck.plate_number IN (${plates.map(() => '?').join(',')})`, + plates + ) as [VehicleInfoRow[], unknown]; + const map = new Map(); + for (const row of rows) { + map.set(row.plate, row); + } + return map; +}