refactor(core): finish model import cleanup
This commit is contained in:
parent
a1e2536844
commit
6b3c52e45e
|
|
@ -17,9 +17,9 @@ use plc_platform_core::util::{
|
|||
};
|
||||
|
||||
use crate::{
|
||||
model::{Node, Point},
|
||||
AppState,
|
||||
};
|
||||
use plc_platform_core::model::{Node, Point};
|
||||
|
||||
async fn notify_units(
|
||||
state: &AppState,
|
||||
|
|
@ -690,3 +690,4 @@ fn monitor_value_to_number(item: &crate::telemetry::PointMonitorInfo) -> Option<
|
|||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,8 +13,9 @@ use std::collections::{HashMap, VecDeque};
|
|||
|
||||
use plc_platform_core::util::response::ApiErr;
|
||||
|
||||
use crate::{AppState, model::{Node, Source}};
|
||||
use anyhow::{Context};
|
||||
use plc_platform_core::model::{Node, Source};
|
||||
use crate::AppState;
|
||||
use sqlx::QueryBuilder;
|
||||
|
||||
// 树节点结构体
|
||||
|
|
@ -54,7 +55,7 @@ impl TreeNode {
|
|||
}
|
||||
|
||||
|
||||
// 带连接状态的Source响应结构体
|
||||
// 蟶ヲ霑樊磁迥カ諤∫噪Source蜩榊コ皮サ捺桷菴?
|
||||
#[derive(Debug, Serialize, Clone)]
|
||||
pub struct SourceWithStatus {
|
||||
#[serde(flatten)]
|
||||
|
|
@ -100,14 +101,14 @@ pub async fn get_source_list(State(state): State<AppState>) -> Result<impl IntoR
|
|||
let pool = &state.pool;
|
||||
let sources: Vec<Source> = crate::service::get_all_enabled_sources(pool).await?;
|
||||
|
||||
// 获取所有连接状态
|
||||
// 闔キ蜿匁園譛芽ソ樊磁迥カ諤?
|
||||
let status_map: std::collections::HashMap<Uuid, (bool, Option<String>, Option<DateTime<Utc>>)> =
|
||||
state.connection_manager.get_all_status().await
|
||||
.into_iter()
|
||||
.map(|(source_id, s)| (source_id, (s.is_connected, s.last_error, Some(s.last_time))))
|
||||
.collect();
|
||||
|
||||
// 组合Source和连接状态
|
||||
// 扈<EFBFBD>粋Source蜥瑚ソ樊磁迥カ諤?
|
||||
let sources_with_status: Vec<SourceWithStatus> = sources
|
||||
.into_iter()
|
||||
.map(|source| {
|
||||
|
|
@ -133,7 +134,7 @@ pub async fn get_node_tree(
|
|||
) -> Result<impl IntoResponse, ApiErr> {
|
||||
let pool = &state.pool;
|
||||
|
||||
// 查询所有属于该source的节点
|
||||
// 譟・隸「謇譛牙ア樔コ手ッ・source逧<EFBFBD>鰍轤?
|
||||
let nodes: Vec<Node> = sqlx::query_as::<_, Node>(
|
||||
r#"SELECT * FROM node WHERE source_id = $1 ORDER BY created_at"#,
|
||||
)
|
||||
|
|
@ -141,7 +142,7 @@ pub async fn get_node_tree(
|
|||
.fetch_all(pool)
|
||||
.await?;
|
||||
|
||||
// 构建节点树
|
||||
// 譫<EFBFBD>サコ闃らせ譬?
|
||||
let tree = build_node_tree(nodes);
|
||||
|
||||
Ok(Json(tree))
|
||||
|
|
@ -152,7 +153,7 @@ fn build_node_tree(nodes: Vec<Node>) -> Vec<TreeNode> {
|
|||
let mut children_map: HashMap<Uuid, Vec<Uuid>> = HashMap::new();
|
||||
let mut roots: Vec<Uuid> = Vec::new();
|
||||
|
||||
// ① 转换 + 记录 parent 关系
|
||||
// 竭?霓ャ謐「 + 隶ー蠖<EFBDB0> parent 蜈ウ邉サ
|
||||
for node in nodes {
|
||||
let tree_node = TreeNode::from_node(node);
|
||||
let id = tree_node.id;
|
||||
|
|
@ -166,7 +167,7 @@ fn build_node_tree(nodes: Vec<Node>) -> Vec<TreeNode> {
|
|||
node_map.insert(id, tree_node);
|
||||
}
|
||||
|
||||
// ② 递归构建
|
||||
// 竭?騾貞ス呈桷蟒コ
|
||||
fn attach_children(
|
||||
id: Uuid,
|
||||
node_map: &mut HashMap<Uuid, TreeNode>,
|
||||
|
|
@ -185,7 +186,7 @@ fn build_node_tree(nodes: Vec<Node>) -> Vec<TreeNode> {
|
|||
Some(node)
|
||||
}
|
||||
|
||||
// ③ 生成最终树
|
||||
// 竭?逕滓<E98095>譛扈域<E68988><E59F9F>
|
||||
roots
|
||||
.into_iter()
|
||||
.filter_map(|rid| attach_children(rid, &mut node_map, &children_map))
|
||||
|
|
@ -411,7 +412,7 @@ pub async fn browse_and_save_nodes(
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
// 浏览单个节点(含 continuation)
|
||||
// 豬剰ァ亥黒荳ェ闃らせ<EFBFBD>亥性 continuation<6F>?
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
async fn browse_single_node(
|
||||
|
|
@ -468,7 +469,7 @@ async fn browse_single_node(
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
// 处理单个 Reference(核心优化版)
|
||||
// 螟<EFBFBD>炊蜊穂クェ Reference<63>域<EFBFBD>ク蠢<EFBDB8>シ伜喧迚茨シ?
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
async fn process_reference(
|
||||
|
|
@ -604,7 +605,7 @@ async fn load_namespace_map(
|
|||
let result = session.read(&[read_request], TimestampsToReturn::Neither, 0f64).await
|
||||
.context("Failed to read namespace map")?;
|
||||
|
||||
// 解析并构建命名空间映射
|
||||
// 隗」譫仙ケカ譫<EFBFBD>サコ蜻ス蜷咲ゥコ髣エ譏<EFBFBD>蟆?
|
||||
let mut map = HashMap::new();
|
||||
if let Some(value) = &result[0].value {
|
||||
if let Variant::Array(array) = value {
|
||||
|
|
@ -622,3 +623,4 @@ async fn load_namespace_map(
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
use crate::{
|
||||
handler::equipment::EquipmentListItem,
|
||||
model::{Equipment, Point},
|
||||
};
|
||||
use plc_platform_core::model::{Equipment, Point};
|
||||
use sqlx::{query_as, PgPool, Row};
|
||||
use uuid::Uuid;
|
||||
|
||||
|
|
@ -307,3 +307,4 @@ mod tests {
|
|||
assert_eq!(equipment_order_clause(), "e.code");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue