feat: 首次提交
This commit is contained in:
commit
31cdb47393
|
@ -0,0 +1 @@
|
||||||
|
/target
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,16 @@
|
||||||
|
[package]
|
||||||
|
name = "hfnf_api"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
salvo = "0.67"
|
||||||
|
tokio = { version = "1", features = ["macros"] }
|
||||||
|
tracing = "0.1"
|
||||||
|
tracing-subscriber = "0.3"
|
||||||
|
sqlx = { version = "0.7", features = [ "runtime-tokio-native-tls" , "postgres", "chrono" ] }
|
||||||
|
serde = { version = "1.0.203", features = ["derive"] }
|
||||||
|
serde_json = "1.0.117"
|
||||||
|
once_cell = "1.19.0"
|
||||||
|
chrono = { version = "0.4", features = ["serde"] }
|
||||||
|
serde_with = "3.8.1"
|
|
@ -0,0 +1,56 @@
|
||||||
|
use chrono::{DateTime, Utc, FixedOffset};
|
||||||
|
use once_cell::sync::OnceCell;
|
||||||
|
use salvo::prelude::*;
|
||||||
|
use serde::{Deserialize, Serialize, Serializer};
|
||||||
|
use sqlx::{FromRow, PgPool};
|
||||||
|
|
||||||
|
static POSTGRES: OnceCell<PgPool> = OnceCell::new();
|
||||||
|
|
||||||
|
|
||||||
|
pub fn format_time_8<S>(time: &DateTime<Utc>, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: Serializer
|
||||||
|
{
|
||||||
|
let china_timezone = FixedOffset::east_opt(8 * 3600).unwrap();
|
||||||
|
let cst_time = time.with_timezone(&china_timezone);
|
||||||
|
serializer.serialize_str(cst_time.format("%Y-%m-%d %H:%M:%S").to_string().as_str())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(FromRow, Serialize, Debug, Deserialize)]
|
||||||
|
pub struct Mplogx {
|
||||||
|
#[serde(serialize_with = "format_time_8")]
|
||||||
|
pub timex: DateTime<Utc>,
|
||||||
|
pub mpoint_id: String,
|
||||||
|
pub val_float: Option<f64>,
|
||||||
|
pub val_str: Option<String>
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct MplogxQuery {
|
||||||
|
pub mpoint_id: String
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn get_postgres() -> &'static PgPool {
|
||||||
|
POSTGRES.get().unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[handler]
|
||||||
|
async fn get_mplogx(req: &mut Request, res: &mut Response) {
|
||||||
|
let query:MplogxQuery = req.parse_json().await.unwrap();
|
||||||
|
let data = sqlx::query_as::<_, Mplogx>("select * from mplogx where mpoint_id = $1 order by timex desc limit 100").bind(query.mpoint_id).fetch_all(get_postgres()).await.unwrap();
|
||||||
|
res.render(serde_json::to_string(&data).unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
tracing_subscriber::fmt().init();
|
||||||
|
|
||||||
|
let db_url = "postgresql+psycopg2://postgres:zcDsj2021@49.232.14.174:5432/hfnf";
|
||||||
|
let pool = PgPool::connect(db_url).await.unwrap();
|
||||||
|
POSTGRES.set(pool).unwrap();
|
||||||
|
|
||||||
|
let router = Router::with_path("mplogx").post(get_mplogx);
|
||||||
|
let acceptor = TcpListener::new("127.0.0.1:5800").bind().await;
|
||||||
|
Server::new(acceptor).serve(router).await;
|
||||||
|
}
|
Loading…
Reference in New Issue