feat(scada): add calibrated monitoring and incident recovery

This commit is contained in:
2026-11-07 19:44:58 +08:00
parent 26fa5d1909
commit ff8aba4964
109 changed files with 9165 additions and 629 deletions
+5 -2
View File
@@ -215,14 +215,17 @@ async def sync_once(client: httpx.AsyncClient, settings: WorkerSettings, periphe
evidence_summary = order["summary"]
if notes:
evidence_summary += "\n现场反馈:\n" + "\n".join(notes[-10:])
field_times = [activity["occurred_at"] for activity in order.get("activity", [])
if activity.get("kind") == "feedback" and activity.get("occurred_at")]
feedback_time = field_times[-1] if order["status"] == "completed" and field_times else order["updated_at"]
feedback = {
"request_id": str(uuid5(NAMESPACE_URL, event_id)), "source_event_id": external_id,
"source_revision": order["revision"], "status": STATUS[order["status"]],
"occurred_at": order["updated_at"],
"occurred_at": feedback_time,
"detail": f"{source_label} {order['work_order_id']}:{order['status']}",
"evidence": {"evidence_id": event_id, "kind": "external_feedback", "summary": evidence_summary,
"source_label": source_label, "source_ref": external_id,
"observed_at": order["updated_at"]},
"observed_at": feedback_time},
}
# A child order's creation is already represented by its dispatch
# receipt. Only a subsequent source revision is new field input.