核对日期:2026-10-16。按 technical-design.md 和 ui-design.md 完成首版编码;尚未用真实设备测试,依赖实测的前提见 technical-design.md。
| 层 | 位置 | 内容 |
|---|---|---|
| L0 | service/utils/mqttClient/mqttClient.go |
补充订阅表加锁(OnConnect 回调与业务线程并发访问) |
| L1 | service/repositories/mqtt/fwh_mqtt/ |
fwh_mqtt_client.go:按环境的客户端,Request/Publish/Subscribe,有订阅时不空闲断开;fwh_mqtt_envelope.go:信封构造与 topic 工具 |
| — | service/repositories/mqtt/fwh_xlog/ |
Xlog 业务从客户端包移出,固定生产服 |
| L2 | service/function/FaultRecordProtocol/ |
377 构造、378/379/607~610 解析(兼容旧版本 608 将 id 误写为第二个 result)、setVal 校验与 idData 解读、触发源/错误码字典 |
| L2 | service/function/FaultRecordFile/ |
hexData(code=1/2/3)、failuredata、waveformdata、压缩包(按文件头识别 gzip/bzip2)、CSV(zip) |
| 存储 | service/repositories/mongo/faultRecordRepo.go |
集合 FaultRecordOperation,索引在 mongo.Init 注册 |
| 存储 | service/repositories/minio/faultRecordRepo.go |
对象键 fault-record/<env>/<gatewaySn>/<fileName> |
| 下载 | `service/repositories/api/fwh_pro | fwh_test/fwh_faultRecordUpload.go` |
| 锁 | service/cache/redisx/lockx.go |
新增 TryLockWithToken:以操作 ID 为 token,重启后可接管自己的网关锁 |
| L3 | service/task/queue/faultRecordQueue/ |
asynq 队列 fault-record;执行器状态机、取消、重启恢复;RecoverActive 在启动时重新提交未结束操作 |
| L4 | service/services/faultRecordServices.go |
创建/取消/查询/详情/录波解析/导出/设备列表 |
| L5 | service/controllers/faultRecordControllers.go、service/routes/faultRecordRoutes.go |
见下方接口表 |
| 前端 | src/views/fault-record/ |
record(录波记录)、device-info(设备信息)、function(功能操作:1/3/4/7)、param-write(参数设置:5/6,读取走 cmd=0)四个页面,公共组件在 common/;功能码 2 暂不开放 |
| 前端 | src/service/faultRecord/、src/router/record.ts |
接口封装;菜单“故障录波 → 生产服/测试服 → 功能” |
已删除:旧参数设置接口 /faultRecord/paramSetting 及其页面 fault-record/read|write、faultRecordState store、客户端包中的 FaultRecordParamSetting/ChargeChannel、测试服手动脚本。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /faultRecord/devices?env=&gatewaySn= |
站点信息中的 aGate + aPower(pe)列表 |
| POST | /faultRecord/operations |
创建操作,返回 id;kind 为 device_info/record_fetch/param_read/param_write |
| GET | /faultRecord/operations?env=&gatewaySn=&kind=&pageNum=&pageSize= |
操作历史(共享) |
| GET | /faultRecord/operations/:id |
详情:状态、阶段时间、逐项结果(含解析)、原始报文 |
| POST | /faultRecord/operations/:id/cancel |
取消 |
| POST | /faultRecord/operations/:id/retry-download |
上传已完成但下载失败时手动重试下载 |
| GET | /faultRecord/operations/:id/record |
录波解析结果(基本信息、通道、波形) |
| GET | `/faultRecord/operations/:id/export?format=raw | csv` |
全部离线,未连接任何设备或服务器:
-race)。record_fetch(sent → … → done,faultRecordID=5226)和 device_info;另测设备忙、过滤其他 cmd/网关、378 超时、取消发送 cmd=4、重启时 accepted → interrupted、ready 直接下载恢复、网关锁占用。go build、go vet 通过;前端 vue-tsc、vite build 通过,新增代码无 eslint 错误。建议按此顺序在测试服实测,每步保存操作详情中的原始报文:
code=1,2,3,核对目录与设备一致;确认 MQTT 能订阅 s2c(详情中应能看到 380)。4/5 的顺序。cmd=3 外层支持及 idData 解读是否正确。setResultList 顺序,以及 code=1 可配采样通道与索引的对应(索引 1 = 第 1 项)。cmd=4 的反应。<equipNo> 是否仍为网关 SN。可调参数集中在 service/task/queue/faultRecordQueue/deps.go 的 defaultTimeouts(378 等待 30s、379 等待 2 分钟/录波 4 分钟、上传 5 分钟;收到 610 后 15 秒开始下载、失败每 15 秒重试至总超时)。