fault_map_service.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. """故障 → 3D 部件对照表(data/fault_part_map.csv 的读写)。
  2. 列:model, alarm_type, device_point, device_part, part
  3. - device_point / device_part 支持多值,用 ``|`` 分隔(未来一个故障多个点)。
  4. - part 为前端部件标签(createUniqueName 约定:如 ``三维立体_1687``);一个部件一行。
  5. """
  6. import csv
  7. import os
  8. from typing import Any
  9. from config import DATA_DIR, FAULT_MAP_CSV
  10. FIELDS = ["model", "alarm_type", "device_point", "device_part", "part"]
  11. # 初始种子(一个部件一行)。
  12. SEED: list[list[str]] = [
  13. ["压缩机2326-3000-one.glb", "润滑油压力故障", "YSJ_5", "润滑油压力", "三维立体_1687"],
  14. ["压缩机2326-3000-one.glb", "振动故障", "YSJ_11", "链轮端振动", "三维立体_3815"],
  15. ["压缩机2326-3000-one.glb", "振动故障", "YSJ_11", "链轮端振动", "三维立体_3814"],
  16. ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_101"],
  17. ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_97"],
  18. ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_98"],
  19. ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_130"],
  20. ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_135"],
  21. ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_134"],
  22. ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_138"],
  23. ["压缩机2326-3000-one.glb", "振动故障", "YSJ_10", "联轴器端振动", "三维立体_3813"],
  24. ]
  25. def _ensure_file() -> None:
  26. if FAULT_MAP_CSV.exists():
  27. return
  28. DATA_DIR.mkdir(parents=True, exist_ok=True)
  29. with FAULT_MAP_CSV.open("w", encoding="utf-8", newline="") as handle:
  30. writer = csv.writer(handle)
  31. writer.writerow(FIELDS)
  32. writer.writerows(SEED)
  33. def list_rows() -> list[dict[str, Any]]:
  34. _ensure_file()
  35. with FAULT_MAP_CSV.open("r", encoding="utf-8", newline="") as handle:
  36. return [
  37. {
  38. "model": row["model"].strip(),
  39. "alarm_type": row["alarm_type"].strip(),
  40. "device_point": row["device_point"].strip(),
  41. "device_part": row["device_part"].strip(),
  42. "part": row["part"].strip(),
  43. }
  44. for row in csv.DictReader(handle)
  45. if row.get("part")
  46. ]