| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- """故障 → 3D 部件对照表(data/fault_part_map.csv 的读写)。
- 列:model, alarm_type, device_point, device_part, part
- - device_point / device_part 支持多值,用 ``|`` 分隔(未来一个故障多个点)。
- - part 为前端部件标签(createUniqueName 约定:如 ``三维立体_1687``);一个部件一行。
- """
- import csv
- import os
- from typing import Any
- from config import DATA_DIR, FAULT_MAP_CSV
- FIELDS = ["model", "alarm_type", "device_point", "device_part", "part"]
- # 初始种子(一个部件一行)。
- SEED: list[list[str]] = [
- ["压缩机2326-3000-one.glb", "润滑油压力故障", "YSJ_5", "润滑油压力", "三维立体_1687"],
- ["压缩机2326-3000-one.glb", "振动故障", "YSJ_11", "链轮端振动", "三维立体_3815"],
- ["压缩机2326-3000-one.glb", "振动故障", "YSJ_11", "链轮端振动", "三维立体_3814"],
- ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_101"],
- ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_97"],
- ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_98"],
- ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_130"],
- ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_135"],
- ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_134"],
- ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_138"],
- ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_3813"],
- ]
- def _ensure_file() -> None:
- if FAULT_MAP_CSV.exists():
- return
- DATA_DIR.mkdir(parents=True, exist_ok=True)
- with FAULT_MAP_CSV.open("w", encoding="utf-8", newline="") as handle:
- writer = csv.writer(handle)
- writer.writerow(FIELDS)
- writer.writerows(SEED)
- def list_rows() -> list[dict[str, Any]]:
- _ensure_file()
- with FAULT_MAP_CSV.open("r", encoding="utf-8", newline="") as handle:
- return [
- {
- "model": row["model"].strip(),
- "alarm_type": row["alarm_type"].strip(),
- "device_point": row["device_point"].strip(),
- "device_part": row["device_part"].strip(),
- "part": row["part"].strip(),
- }
- for row in csv.DictReader(handle)
- if row.get("part")
- ]
|