All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
后端 - 新建 bi_ele_charge_record 表(首次访问自动 CREATE TABLE IF NOT EXISTS) 字段含订单编号(UNIQUE)、电站、时段、电量/费用、车牌/判定车牌、内外部分类、原始 JSON、批次号 - POST /api/ele/import:multipart 上传 xlsx,识别表头自动定位, 文件内 + 数据库双重去重(INSERT IGNORE on UNIQUE order_no) 上传时按 plate/judged_plate 在 tab_truck 中匹配,命中=internal、未命中但有牌=external、无牌=unknown - GET /api/ele/list 分页 + kind/batch/search 过滤 - GET /api/ele/batches 批次汇总(数量、内/外/未知拆分、电量/费用合计) - GET /api/ele/aggregate 全量与近 30 日按日 × 分类聚合 前端 - /ele/import 路径直接渲染 EleImportPage,主导航不显示,需手动输入 URL - 拖拽/点击上传,结果卡展示解析/新增/重复/分类 - KPI 8 卡:总数、内/外/未知记录、累计电量与费用、内/外电量 - 批次列表(点击筛选)+ 最新记录表(kind 切换 + 关键字搜索) - 上传后自动 reload 全部数据 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import pool from '../../db.js';
|
|
|
|
const CREATE_TABLE_SQL = `
|
|
CREATE TABLE IF NOT EXISTS bi_ele_charge_record (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
order_no VARCHAR(64) NOT NULL,
|
|
station_no VARCHAR(64) NULL,
|
|
station_name VARCHAR(128) NULL,
|
|
terminal_name VARCHAR(64) NULL,
|
|
region VARCHAR(64) NULL,
|
|
city VARCHAR(64) NULL,
|
|
district VARCHAR(64) NULL,
|
|
operating_company VARCHAR(128) NULL,
|
|
station_type VARCHAR(32) NULL,
|
|
order_status VARCHAR(32) NULL,
|
|
charge_form VARCHAR(32) NULL,
|
|
start_time DATETIME NULL,
|
|
end_time DATETIME NULL,
|
|
duration_min INT NULL,
|
|
kwh DECIMAL(10,3) NULL,
|
|
e_fee DECIMAL(10,2) NULL,
|
|
service_fee DECIMAL(10,2) NULL,
|
|
fee DECIMAL(10,2) NULL,
|
|
plate VARCHAR(32) NULL,
|
|
judged_plate VARCHAR(32) NULL,
|
|
vin VARCHAR(64) NULL,
|
|
customer_name VARCHAR(128) NULL,
|
|
customer_phone VARCHAR(32) NULL,
|
|
enterprise_name VARCHAR(128) NULL,
|
|
matched_truck_id VARCHAR(32) NULL,
|
|
matched_plate VARCHAR(32) NULL,
|
|
vehicle_kind ENUM('internal','external','unknown') NOT NULL DEFAULT 'unknown',
|
|
raw_json JSON NULL,
|
|
batch_id VARCHAR(64) NOT NULL,
|
|
imported_at DATETIME NOT NULL,
|
|
UNIQUE KEY uk_order_no (order_no),
|
|
KEY idx_start_time (start_time),
|
|
KEY idx_batch (batch_id),
|
|
KEY idx_kind (vehicle_kind),
|
|
KEY idx_plate (plate)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
|
`;
|
|
|
|
let ensured = false;
|
|
export async function ensureChargeRecordTable(): Promise<void> {
|
|
if (ensured) return;
|
|
await pool.query(CREATE_TABLE_SQL);
|
|
ensured = true;
|
|
}
|