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:
@@ -259,6 +259,67 @@ async def _create_tables(pool: aiomysql.Pool):
|
|||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
) 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("数据库表初始化完成")
|
logger.info("数据库表初始化完成")
|
||||||
|
|
||||||
|
|
||||||
@@ -376,6 +437,21 @@ async def upsert_dnt(serial: str, ip: str, port: int, mac: str,
|
|||||||
return cur.lastrowid
|
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,
|
async def insert_test_result(dnt_id: int, dpg430_addr: int, pcnum: str,
|
||||||
serialnum: int, sub_type: int, str_type: str,
|
serialnum: int, sub_type: int, str_type: str,
|
||||||
iffinish: str, fault_info: str, relay_out: 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",
|
test_mode: int = 0, data_source: str = "B2",
|
||||||
relay_code: int = 0):
|
relay_code: int = 0):
|
||||||
"""插入测试结果到 tb_state_tst"""
|
"""插入测试结果到 tb_state_tst"""
|
||||||
|
coil_id, simulate_car_id = await get_fixture_coil_car_ids(dnt_id)
|
||||||
pool = await get_pool()
|
pool = await get_pool()
|
||||||
async with pool.acquire() as conn:
|
async with pool.acquire() as conn:
|
||||||
async with conn.cursor() as cur:
|
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,
|
test_mode, data_source,
|
||||||
iffinish, fault_info, relay_out, ppvalue, idle_freq,
|
iffinish, fault_info, relay_out, ppvalue, idle_freq,
|
||||||
enter_freq, exit_freq, enter_dist, exit_dist, enter_speed, exit_speed,
|
enter_freq, exit_freq, enter_dist, exit_dist, enter_speed, exit_speed,
|
||||||
relay_code)
|
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)""",
|
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,
|
(dnt_id, dpg430_addr, pcnum, serialnum, sub_type, str_type,
|
||||||
test_mode, data_source,
|
test_mode, data_source,
|
||||||
iffinish, fault_info, relay_out, ppvalue, idle_freq,
|
iffinish, fault_info, relay_out, ppvalue, idle_freq,
|
||||||
enter_freq, exit_freq, enter_dist, exit_dist, enter_speed, exit_speed,
|
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,
|
near_dist: int, far_dist: int,
|
||||||
enter_dist: int, leave_dist: int):
|
enter_dist: int, leave_dist: int):
|
||||||
"""插入 0xB4 波动测试上报数据到 tb_state_tst"""
|
"""插入 0xB4 波动测试上报数据到 tb_state_tst"""
|
||||||
|
coil_id, simulate_car_id = await get_fixture_coil_car_ids(dnt_id)
|
||||||
pool = await get_pool()
|
pool = await get_pool()
|
||||||
async with pool.acquire() as conn:
|
async with pool.acquire() as conn:
|
||||||
async with conn.cursor() as cur:
|
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,
|
(dnt_id, dpg430_addr, test_mode, data_source,
|
||||||
relay_out, relay_code,
|
relay_out, relay_code,
|
||||||
remain_count, work_freq, curr_dist, speed,
|
remain_count, work_freq, curr_dist, speed,
|
||||||
near_dist, far_dist, b4_enter_dist, b4_leave_dist)
|
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)""",
|
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",
|
(dnt_id, dpg430_addr, 1, "B4",
|
||||||
"", relay_code,
|
"", relay_code,
|
||||||
remain_count, work_freq, curr_dist, speed,
|
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(
|
logger.info(
|
||||||
f"B4波动数据已存储 dnt_id={dnt_id} relay=0x{relay_code:02X} "
|
f"B4波动数据已存储 dnt_id={dnt_id} relay=0x{relay_code:02X} "
|
||||||
|
|||||||
Reference in New Issue
Block a user