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, CAST(c.bd AS CHAR) AS manager_id, 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; }