feat(db): 新增线圈参数表/模拟车辆参数表 + tb_fixture_param/tb_state_tst 关联字段

- CREATE TABLE tb_coil_info (线圈编号/名称/电感量/形状/尺寸/圈数/电阻/材质/备注)
- CREATE TABLE tb_simulate_car (模拟编号/名称/形状/尺寸/材质/备注)
- ALTER TABLE tb_fixture_param ADD coil_id, simulate_car_id
- ALTER TABLE tb_state_tst ADD coil_id, simulate_car_id
- 新增 get_fixture_coil_car_ids() 查询当前关联
- insert_test_result/insert_wave_data 自动从 fixture 获取线圈/车辆并记录
This commit is contained in:
wangfq
2026-06-08 10:42:04 +08:00
parent 844de70017
commit 68c6d0bcfe

View File

@@ -259,6 +259,67 @@ async def _create_tables(pool: aiomysql.Pool):
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
""")
# 9. 线圈参数表
await cur.execute("""
CREATE TABLE IF NOT EXISTS `tb_coil_info` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`coil_num` VARCHAR(45) DEFAULT '' COMMENT '线圈编号',
`name` VARCHAR(100) DEFAULT '' COMMENT '名称',
`induct` FLOAT DEFAULT 0 COMMENT '电感量',
`shape` VARCHAR(20) DEFAULT '' COMMENT '形状(矩形、圆形等)',
`length` FLOAT DEFAULT 0 COMMENT '长 cm矩形有效',
`width` FLOAT DEFAULT 0 COMMENT '宽 cm矩形有效',
`radius` FLOAT DEFAULT 0 COMMENT '半径 cm圆形有效',
`turns` INT DEFAULT 0 COMMENT '圈数',
`resistance` FLOAT DEFAULT 0 COMMENT '电阻 欧姆',
`material` VARCHAR(50) DEFAULT '' COMMENT '材质',
`remark` VARCHAR(500) DEFAULT '' COMMENT '备注',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
""")
# 10. 模拟车辆参数表
await cur.execute("""
CREATE TABLE IF NOT EXISTS `tb_simulate_car` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`simulate_num` VARCHAR(45) DEFAULT '' COMMENT '模拟编号',
`name` VARCHAR(100) DEFAULT '' COMMENT '名称',
`shape` VARCHAR(20) DEFAULT '' COMMENT '形状(矩形、圆形等)',
`length` FLOAT DEFAULT 0 COMMENT '长 cm矩形有效',
`width` FLOAT DEFAULT 0 COMMENT '宽 cm矩形有效',
`radius` FLOAT DEFAULT 0 COMMENT '半径 cm圆形有效',
`material` VARCHAR(50) DEFAULT '' COMMENT '材质(铁板、合金等)',
`remark` VARCHAR(500) DEFAULT '' COMMENT '备注',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
""")
# V2.1.0 迁移tb_fixture_param 增加线圈/模拟车辆关联
for col, col_def in [
("coil_id", "INT DEFAULT NULL COMMENT 'FK → tb_coil_info.id'"),
("simulate_car_id", "INT DEFAULT NULL COMMENT 'FK → tb_simulate_car.id'"),
]:
try:
await cur.execute(
f"ALTER TABLE `tb_fixture_param` ADD COLUMN `{col}` {col_def}"
)
except Exception:
pass
# V2.1.0 迁移tb_state_tst 增加线圈/模拟车辆关联
for col, col_def in [
("coil_id", "INT DEFAULT NULL COMMENT 'FK → tb_coil_info.id'"),
("simulate_car_id", "INT DEFAULT NULL COMMENT 'FK → tb_simulate_car.id'"),
]:
try:
await cur.execute(
f"ALTER TABLE `tb_state_tst` ADD COLUMN `{col}` {col_def}"
)
except Exception:
pass
logger.info("数据库表初始化完成")
@@ -376,6 +437,21 @@ async def upsert_dnt(serial: str, ip: str, port: int, mac: str,
return cur.lastrowid
async def get_fixture_coil_car_ids(dnt_id: int) -> tuple[int | None, int | None]:
"""从 tb_fixture_param 获取当前线圈和模拟车辆关联 ID"""
pool = await get_pool()
async with pool.acquire() as conn:
async with conn.cursor(aiomysql.DictCursor) as cur:
await cur.execute(
"SELECT coil_id, simulate_car_id FROM tb_fixture_param WHERE dnt_id=%s",
(dnt_id,),
)
row = await cur.fetchone()
if row:
return row.get("coil_id"), row.get("simulate_car_id")
return None, None
async def insert_test_result(dnt_id: int, dpg430_addr: int, pcnum: str,
serialnum: int, sub_type: int, str_type: str,
iffinish: str, fault_info: str, relay_out: str,
@@ -385,6 +461,7 @@ async def insert_test_result(dnt_id: int, dpg430_addr: int, pcnum: str,
test_mode: int = 0, data_source: str = "B2",
relay_code: int = 0):
"""插入测试结果到 tb_state_tst"""
coil_id, simulate_car_id = await get_fixture_coil_car_ids(dnt_id)
pool = await get_pool()
async with pool.acquire() as conn:
async with conn.cursor() as cur:
@@ -394,13 +471,13 @@ async def insert_test_result(dnt_id: int, dpg430_addr: int, pcnum: str,
test_mode, data_source,
iffinish, fault_info, relay_out, ppvalue, idle_freq,
enter_freq, exit_freq, enter_dist, exit_dist, enter_speed, exit_speed,
relay_code)
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
relay_code, coil_id, simulate_car_id)
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
(dnt_id, dpg430_addr, pcnum, serialnum, sub_type, str_type,
test_mode, data_source,
iffinish, fault_info, relay_out, ppvalue, idle_freq,
enter_freq, exit_freq, enter_dist, exit_dist, enter_speed, exit_speed,
relay_code),
relay_code, coil_id, simulate_car_id),
)
@@ -410,6 +487,7 @@ async def insert_wave_data(dnt_id: int, dpg430_addr: int,
near_dist: int, far_dist: int,
enter_dist: int, leave_dist: int):
"""插入 0xB4 波动测试上报数据到 tb_state_tst"""
coil_id, simulate_car_id = await get_fixture_coil_car_ids(dnt_id)
pool = await get_pool()
async with pool.acquire() as conn:
async with conn.cursor() as cur:
@@ -418,12 +496,14 @@ async def insert_wave_data(dnt_id: int, dpg430_addr: int,
(dnt_id, dpg430_addr, test_mode, data_source,
relay_out, relay_code,
remain_count, work_freq, curr_dist, speed,
near_dist, far_dist, b4_enter_dist, b4_leave_dist)
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
near_dist, far_dist, b4_enter_dist, b4_leave_dist,
coil_id, simulate_car_id)
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
(dnt_id, dpg430_addr, 1, "B4",
"", relay_code,
remain_count, work_freq, curr_dist, speed,
near_dist, far_dist, enter_dist, leave_dist),
near_dist, far_dist, enter_dist, leave_dist,
coil_id, simulate_car_id),
)
logger.info(
f"B4波动数据已存储 dnt_id={dnt_id} relay=0x{relay_code:02X} "