Files
vd_test_fixture/docs/plans/2026-05-31-wave-test-frontend.md
wangfq a69d7ab1d0 feat: 波动测试模式前端适配 — tb_state_tst扩展+0xB4存库+页面更新
- edc_server/models.py: tb_state_tst DDL增加test_mode/data_source + B4字段
  + ALTER TABLE自动迁移 + insert_test_result扩展 + insert_wave_data
- edc_server/handlers.py: 0xB2处理传test_mode、0xB4处理调用insert_wave_data存库
- edc-web/models.py: 新增get_latest_wave_data/get_wave_records + test_mode筛选
- edc-web/routes: test_op返回wave数据、test_data支持test_mode筛选
- 前端: test_op页面增加波动数据显示区+测试模式列
  test_data页面增加test_mode下拉筛选+B4字段列+CSV导出适配
2026-06-03 14:14:52 +08:00

7.8 KiB
Raw Blame History

波动测试模式前端适配 实施计划

For Hermes: 直接执行各 Task。

Goal: 将波动测试模式0xB2 的 test_mode + 0xB4 上报数据)接入测试操作页面、查询导出页面,扩展 tb_state_tst 表字段。

Architecture: 单表方案 — tb_state_tst 增加 test_modedata_source 和 B4 专属字段B2 和 B4 记录共存同表,通过 data_source 区分。后端 edc_server 存储、edc-web 查询/导出均扩展。

Tech Stack: Python/aiomysql (edc_server) + Flask/pymysql (edc-web) + vanilla JS 前端


涉及文件

文件 变更
数据库 edc_server/src/models.py DDL + ALTER 迁移 + insert_test_result 扩展 + 新增 insert_wave_data
解析 edc_server/src/handlers.py 0xB2 传 test_mode、0xB4 调 insert_wave_data
查询 edc-web/app/models.py 新增查询函数、导出扩展
API edc-web/app/routes/test_op.py progress 端点返回波动数据
API edc-web/app/routes/test_data.py 查询/导出增加新字段
前端 edc-web/app/templates/test_op.html 增加波动数据显示区
前端 edc-web/app/static/js/test_op.js renderLatest/renderRecords 扩展 + B4 轮询
前端 edc-web/app/templates/test_data.html 表头增加列 + test_mode 筛选
前端 edc-web/app/static/js/test_data.js renderTable 扩展

Task 1: 扩展 tb_state_tst DDL + 迁移 (edc_server)

文件: edc_server/src/models.py

Step 1: 修改 CREATE TABLE 增加 9 列

在现有 tb_state_tst DDL 中增加:

`test_mode` TINYINT DEFAULT 0 COMMENT '0 灵敏度测试, 1 波动测试',
`data_source` CHAR(2) DEFAULT 'B2' COMMENT '数据来源 B2/B4',
`remain_count` INT DEFAULT 0 COMMENT '剩余波动次数 (B4)',
`work_freq` FLOAT DEFAULT 0 COMMENT '工作频率 Hz (B4)',
`curr_dist` INT DEFAULT 0 COMMENT '当前距离 mm (B4)',
`speed` INT DEFAULT 0 COMMENT '当前速度 dm/s (B4)',
`near_dist` INT DEFAULT 0 COMMENT '波动最近距离 mm (B4)',
`far_dist` INT DEFAULT 0 COMMENT '波动最远距离 mm (B4)',
`b4_enter_dist` INT DEFAULT 0 COMMENT 'B4 进入高度 mm',
`b4_leave_dist` INT DEFAULT 0 COMMENT 'B4 离开高度 mm'

Step 2:_create_tables 末尾增加 ALTER TABLE 迁移逻辑(参照已有的 tb_fixture_param 迁移模式)

# V2.0.4 迁移tb_state_tst 增加波动测试字段
for col, col_def in [
    ("test_mode", "TINYINT DEFAULT 0 COMMENT '0 灵敏度, 1 波动测试'"),
    ("data_source", "CHAR(2) DEFAULT 'B2' COMMENT 'B2/B4'"),
    ("remain_count", "INT DEFAULT 0 COMMENT '剩余波动次数'"),
    ("work_freq", "FLOAT DEFAULT 0 COMMENT '工作频率 Hz'"),
    ("curr_dist", "INT DEFAULT 0 COMMENT '当前距离 mm'"),
    ("speed", "INT DEFAULT 0 COMMENT '当前速度 dm/s'"),
    ("near_dist", "INT DEFAULT 0 COMMENT '波动最近距离 mm'"),
    ("far_dist", "INT DEFAULT 0 COMMENT '波动最远距离 mm'"),
    ("b4_enter_dist", "INT DEFAULT 0 COMMENT 'B4 进入高度 mm'"),
    ("b4_leave_dist", "INT DEFAULT 0 COMMENT 'B4 离开高度 mm'"),
]:
    try:
        await cur.execute(f"ALTER TABLE `tb_state_tst` ADD COLUMN `{col}` {col_def}")
    except Exception:
        pass

Step 3: 修改 insert_test_result 函数签名,增加 test_modedata_source 参数

async def insert_test_result(dnt_id, dpg430_addr, pcnum, serialnum,
                             sub_type, str_type, iffinish, fault_info,
                             relay_out, ppvalue, idle_freq, enter_freq,
                             exit_freq, enter_dist, exit_dist,
                             enter_speed, exit_speed,
                             test_mode=0, data_source='B2'):

INSERT 语句增加 test_mode, data_source 列。

Step 4: 新增 insert_wave_data 函数

async def insert_wave_data(dnt_id, dpg430_addr, remain_count, relay_out,
                           work_freq, curr_dist, speed, near_dist, far_dist,
                           enter_dist, leave_dist):
    """插入 0xB4 波动测试上报数据到 tb_state_tst"""

Task 2: handlers.py 适配

文件: edc_server/src/handlers.py

Step 1: 0xB2 处理 — insert_test_result 调用增加 test_mode=status.test_mode

await insert_test_result(
    ...
    test_mode=status.test_mode,
)

Step 2: 0xB4 处理 — 调用 insert_wave_data 存库

from src.models import insert_wave_data  # 增加导入

# 在 0xB4 分支末尾
await insert_wave_data(
    dnt_id=dnt_id,
    dpg430_addr=wave.addr,
    remain_count=wave.remain_count,
    relay_out=wave.relay_out,
    work_freq=wave.work_freq,
    curr_dist=wave.curr_dist,
    speed=wave.speed,
    near_dist=wave.near_dist,
    far_dist=wave.far_dist,
    enter_dist=wave.enter_dist,
    leave_dist=wave.leave_dist,
)

Task 3: edc-web models.py 查询扩展

文件: edc-web/app/models.py

Step 1: 新增 get_latest_wave_data(dnt_id) — 获取最新一条 B4 数据

Step 2: 新增 get_wave_records(dnt_id, since) — 获取本轮 B4 明细

查询条件: data_source='B4' AND create_time >= since

Step 3: 修改 get_automation_averages — 不涉及波动字段,保持不变


Task 4: edc-web test_op.py 路由扩展

文件: edc-web/app/routes/test_op.py

api_automation_progress 中增加返回 B4 数据:

latest_wave = get_latest_wave_data(dnt_id)
wave_records = get_wave_records(dnt_id, since) if since else []
return jsonify({
    ...
    "latest_wave": latest_wave,
    "wave_records": wave_records,
})

导入新增的 get_latest_wave_data, get_wave_records


Task 5: edc-web test_data.py 路由扩展

文件: edc-web/app/routes/test_data.py

Step 1: api_test_data — 增加 test_mode 筛选参数

test_mode = request.args.get("test_mode", "", type=str)  # '' = 全部, '0' = 灵敏度, '1' = 波动

传给 get_test_data,在 SQL WHERE 中增加 AND t.test_mode = %s 条件。

Step 2: 修改 get_test_data 函数签名和 SQL在 models.py 中)

Step 3: CSV 导出同样支持 test_mode 筛选


Task 6: 前端 test_op.html + test_op.js

文件: edc-web/app/templates/test_op.html + static/js/test_op.js

Step 1: HTML — 在 latest-result 区域增加波动数据显示 div

<h3>波动测试数据</h3>
<div id="latest-wave">
    <p class="placeholder">暂无波动数据...</p>
</div>

Step 2: JS — renderLatest 增加 test_mode 显示

在现有显示中增加:

<p>测试模式<strong>${data.test_mode === 1 ? '波动测试' : '灵敏度测试'}</strong></p>

Step 3: JS — 新增 renderLatestWave(data) 函数

显示 B4 上报数据:剩余次数、当前距离、速度、最近/最远距离、进入/离开高度。

Step 4: JS — pollProgress 中调用 renderLatestWave(data.latest_wave)

Step 5: JS — 明细表 renderRecords 增加测试模式列


Task 7: 前端 test_data.html + test_data.js

文件: edc-web/app/templates/test_data.html + static/js/test_data.js

Step 1: HTML — 搜索栏增加测试模式下拉筛选

<label>
    测试模式:
    <select id="search-test-mode">
        <option value="">全部</option>
        <option value="0">灵敏度测试</option>
        <option value="1">波动测试</option>
    </select>
</label>

Step 2: HTML — 表头增加列:测试模式、数据来源、剩余次数、工作频率、当前距离、速度、最近距离、最远距离

Step 3: JS — searchDatatest_mode 参数

Step 4: JS — renderTable 增加新列渲染

Step 5: JS — exportCSVtest_mode 参数


Task 8: 提交推送

cd /home/wfq/projects/vd_test_fixture
git add -A
git commit -m "feat: 波动测试模式前端适配 — tb_state_tst扩展+0xB4存库+页面更新"
git push origin main