| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- # -*- coding: utf-8 -*-
- r"""维护面视图适配(P12):把详情层 `serve.py` 的两段维护面逻辑**搬到算法服务**(目标栈内,逐字保留)。
- 来源:`app_backEnd/app_backEnd_guanlan/serve.py` 的 `maint_framework_view()`(361-394)
- 与 `/api/maint_std` 分支内联逻辑(2079-2110 一带)。
- """
- from __future__ import annotations
- import json
- import pathlib
- from typing import Any
- def _objects() -> dict[str, Any]:
- from app_common.app_common_guanlan.api import paths as P
- return json.loads(P.objects_json().read_text(encoding='utf-8'))
- def maint_framework(lang: str = 'zh') -> dict[str, Any]:
- """运维管理体系三维骨架 —— 与详情层 `maint_framework_view()` **逐字一致**。"""
- from src.windscada.maint import framework as _fw
- db = _objects()
- wo = [(v.get('props') or {}) for k, v in db.items() if k.startswith('workorder/')]
- r = dict(systems=_fw.system_load(wo)['rows'], tiers=_fw.systems_by_tier(),
- stages=_fw.stage_matrix(), records=_fw.RECORDS,
- gaps=_fw.capability_gaps(wo), coverage=_fw.coverage(wo))
- # unmapped_top = 未映射到系统码的现场手写部件名(不是枚举,码表投影对它无效)⇒ 走 part_en 自由文本解析
- if lang and lang != 'zh' and (r.get('gaps') or {}).get('unmapped_top'):
- try:
- from src.windscada import en_text as _et
- out = []
- for it in r['gaps']['unmapped_top']:
- if isinstance(it, (list, tuple)) and len(it) == 2:
- e = _et.part_en(it[0]) or it[0]
- out.append(['(not recorded)' if e == '\u2014' else e, it[1]])
- else:
- out.append(it)
- r['gaps'] = dict(r['gaps'], unmapped_top=out)
- except Exception: # noqa: BLE001
- pass
- return r
|