ソースを参照

发送端字段处理调整

晋江
OCEAN 2ヶ月前
コミット
86070f4135
3個のファイルの変更67行の追加88行の削除
  1. +4
    -3
      tcp_client/config.toml
  2. +62
    -84
      tcp_client/src/db.rs
  3. +1
    -1
      tcp_client/src/main.rs

+ 4
- 3
tcp_client/config.toml ファイルの表示

@@ -1,6 +1,6 @@
[server]
#host = "10.180.4.88"
host = "127.0.0.1"
host = "10.180.4.88"
#host = "127.0.0.1"

port = 9090

@@ -21,6 +21,7 @@ password = "Auseft@2025qwer"
# 要同步的表配置
[[tables]]
name = "hy_record"
query = "SELECT * FROM hy_record where hy_code= 'R25041402C'"
query = "SELECT * FROM hy_record "
incremental = false # 是否增量同步
key_field = "UpdateTime" # 增量同步的时间字段


+ 62
- 84
tcp_client/src/db.rs ファイルの表示

@@ -91,110 +91,88 @@ impl Database {

pub fn format_row_as_json(row: &Row, table_name: &str) -> serde_json::Value {
let mut map = serde_json::Map::new();
// 添加 table_name 字段
map.insert("table_name".to_string(), serde_json::Value::String(table_name.to_string()));
for (i, column) in row.columns().iter().enumerate() {
let name = column.name();
let type_name = column.type_().name();
println!("字段 {} 的类型是: {}", name, type_name);
// println!("字段 {} 的类型是: {}", name, type_name);
let value = match type_name {
"int2" | "int4" | "int8" => {
match row.try_get::<_, Option<i64>>(i) {
Ok(Some(val)) => {
println!("成功读取整数: {} = {}", name, val);
serde_json::Value::Number(serde_json::Number::from(val))
},
Ok(None) => {
println!("字段 {} 为 null", name);
serde_json::Value::Null
},
Err(e) => {
println!("读取整数失败 {}: {}", name, e);
// 尝试其他整数类型
match row.try_get::<_, Option<i32>>(i) {
Ok(Some(val)) => {
println!("成功读取 i32: {} = {}", name, val);
serde_json::Value::Number(serde_json::Number::from(val))
},
Ok(None) => {
println!("字段 {} 为 null", name);
serde_json::Value::Null
},
Err(_) => {
match row.try_get::<_, Option<i16>>(i) {
Ok(Some(val)) => {
println!("成功读取 i16: {} = {}", name, val);
serde_json::Value::Number(serde_json::Number::from(val))
},
Ok(None) => {
println!("字段 {} 为 null", name);
serde_json::Value::Null
},
Err(_) => serde_json::Value::Null
}
}
}
}
}
"int2" => match row.try_get::<_, Option<i16>>(i) {
Ok(Some(val)) => {
// println!("成功读取 int2: {} = {}", name, val);
serde_json::Value::Number(serde_json::Number::from(val))
},
_ => serde_json::Value::Null
},
"numeric" | "float4" | "float8" => {
match row.try_get::<_, Option<f64>>(i) {
Ok(Some(val)) => {
println!("成功读取浮点数: {} = {}", name, val);
match serde_json::Number::from_f64(val) {
Some(n) => serde_json::Value::Number(n),
None => serde_json::Value::Null
}
},
Ok(None) => {
println!("字段 {} 为 null", name);
serde_json::Value::Null
},
Err(e) => {
println!("读取浮点数失败 {}: {}", name, e);
serde_json::Value::Null
"int4" => match row.try_get::<_, Option<i32>>(i) {
Ok(Some(val)) => {
// println!("成功读取 int4: {} = {}", name, val);
serde_json::Value::Number(serde_json::Number::from(val))
},
_ => serde_json::Value::Null
},
"int8" => match row.try_get::<_, Option<i64>>(i) {
Ok(Some(val)) => {
// println!("成功读取 int8: {} = {}", name, val);
serde_json::Value::Number(serde_json::Number::from(val))
},
_ => serde_json::Value::Null
},
"numeric" => match row.try_get::<_, Option<f64>>(i) {
Ok(Some(val)) => {
// println!("成功读取 numeric: {} = {}", name, val);
match serde_json::Number::from_f64(val) {
Some(n) => serde_json::Value::Number(n),
None => serde_json::Value::String(val.to_string())
}
}
},
_ => serde_json::Value::Null
},
"text" | "varchar" => {
match row.try_get::<_, Option<String>>(i) {
Ok(Some(val)) => {
println!("成功读取字符串: {} = {}", name, val);
serde_json::Value::String(val)
},
_ => {
println!("字段 {} 为 null", name);
serde_json::Value::Null
"float4" => match row.try_get::<_, Option<f32>>(i) {
Ok(Some(val)) => {
// println!("成功读取 float4: {} = {}", name, val);
match serde_json::Number::from_f64(val as f64) {
Some(n) => serde_json::Value::Number(n),
None => serde_json::Value::String(val.to_string())
}
}
},
_ => serde_json::Value::Null
},
"bool" => {
match row.try_get::<_, Option<bool>>(i) {
Ok(Some(val)) => {
println!("成功读取布尔值: {} = {}", name, val);
serde_json::Value::String(if val { "1".to_string() } else { "0".to_string() })
},
_ => {
println!("字段 {} 为 null", name);
serde_json::Value::Null
"float8" => match row.try_get::<_, Option<f64>>(i) {
Ok(Some(val)) => {
// println!("成功读取 float8: {} = {}", name, val);
match serde_json::Number::from_f64(val) {
Some(n) => serde_json::Value::Number(n),
None => serde_json::Value::String(val.to_string())
}
}
},
_ => serde_json::Value::Null
},
"text" | "varchar" => match row.try_get::<_, Option<String>>(i) {
Ok(Some(val)) => {
// println!("成功读取字符串: {} = {}", name, val);
serde_json::Value::String(val)
},
_ => serde_json::Value::Null
},
"bool" => match row.try_get::<_, Option<bool>>(i) {
Ok(Some(val)) => {
// println!("成功读取布尔值: {} = {}", name, val);
serde_json::Value::String(if val { "1".to_string() } else { "0".to_string() })
},
_ => serde_json::Value::Null
},
"timestamp" | "timestamptz" | "date" => {
println!("处理时间字段: {}", name);
// println!("处理时间字段: {}", name);
match row.try_get::<_, Option<NaiveDateTime>>(i) {
Ok(Some(dt)) => {
let formatted = dt.format("%Y-%m-%d %H:%M:%S").to_string();
println!("成功读取本地时间: {} = {}", name, formatted);
// println!("成功读取本地时间: {} = {}", name, formatted);
serde_json::Value::String(formatted)
},
_ => {
println!("字段 {} 为 null", name);
serde_json::Value::Null
}
_ => serde_json::Value::Null
}
},
_ => {


+ 1
- 1
tcp_client/src/main.rs ファイルの表示

@@ -115,7 +115,7 @@ async fn main() {
match stream.read_exact(&mut buffer) {
Ok(_) => {
let bit = buffer[0];
println!("接收到比特值: {}", bit);
// println!("接收到比特值: {}", bit);
if(bit==255){
println!("接收成功");
break;


読み込み中…
キャンセル
保存