|
|
@@ -1,17 +1,11 @@
|
|
|
-use std::collections::HashMap;
|
|
|
use std::sync::Arc;
|
|
|
use std::sync::atomic::{AtomicBool, Ordering};
|
|
|
-use tokio::sync::{Mutex};
|
|
|
use actix_web::{web, App, HttpResponse, HttpServer, Responder, get};
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
use serde_json::{json, Value};
|
|
|
use tracing::{info};
|
|
|
use actix_cors::Cors;
|
|
|
-use chrono::Utc;
|
|
|
-use rust_decimal_macros::dec;
|
|
|
use crate::{binance_usdt_swap_data_listener, bitget_usdt_swap_data_listener, bybit_usdt_swap_data_listener, coinex_usdt_swap_data_listener, gate_coin_spot_data_listener, gate_usdt_swap_data_listener, mexc_usdt_swap_data_listener, phemex_usdt_swap_data_listener, rank};
|
|
|
-use crate::json_db_utils::{collect_special_trades_json, get_symbols_by_exchange};
|
|
|
-use crate::msv::{generate_msv_by_trades, Indicators, parse_json_to_trades};
|
|
|
|
|
|
// 定义用于反序列化查询参数的结构体
|
|
|
#[derive(Serialize, Deserialize, Clone)]
|
|
|
@@ -39,61 +33,61 @@ pub struct Response {
|
|
|
code: i32,
|
|
|
}
|
|
|
|
|
|
-#[get("/rk/get_real_time_rank_list")]
|
|
|
-async fn get_real_time_rank_list(query: web::Query<RankQuery>) -> impl Responder {
|
|
|
- // ============================= 参数校验部分 =========================================
|
|
|
- if !query.validate() {
|
|
|
- let response = Response {
|
|
|
- query: serde_json::to_value(&query.into_inner()).unwrap(),
|
|
|
- msg: Some("查询内容有误,必须传递的参数:[exchange]".to_string()),
|
|
|
- code: 500,
|
|
|
- data: Value::Null,
|
|
|
- };
|
|
|
-
|
|
|
- let json_string = serde_json::to_string(&response).unwrap();
|
|
|
- return HttpResponse::Ok().content_type("application/json").body(json_string);
|
|
|
- }
|
|
|
- let supportive_exchange = vec!["gate_usdt_swap", "coinex_usdt_swap", "binance_usdt_swap", "phemex_usdt_swap", "mexc_usdt_swap", "bybit_usdt_swap", "bitget_usdt_swap", "gate_coin_spot"];
|
|
|
- let exchange = query.exchange.clone().unwrap().clone();
|
|
|
- if !supportive_exchange.contains(&exchange.as_str()) {
|
|
|
- let response = Response {
|
|
|
- query: serde_json::to_value(&query.into_inner()).unwrap(),
|
|
|
- msg: Some("查询内容有误,exchange当前仅支持:[gate_usdt_swap, coinex_usdt_swap, binance_usdt_swap, phemex_usdt_swap, mexc_usdt_swap, bybit_usdt_swap, bitget_usdt_swap, gate_coin_spot]".to_string()),
|
|
|
- code: 500,
|
|
|
- data: Value::Null,
|
|
|
- };
|
|
|
-
|
|
|
- let json_string = serde_json::to_string(&response).unwrap();
|
|
|
- return HttpResponse::Ok().content_type("application/json").body(json_string);
|
|
|
- }
|
|
|
-
|
|
|
- // 计算msv
|
|
|
- let end_timestamp = Utc::now().timestamp_millis();
|
|
|
- let start_timestamp = end_timestamp - 60 * 1000 * 60 * 4;
|
|
|
-
|
|
|
- let symbols = get_symbols_by_exchange(exchange.as_str());
|
|
|
-
|
|
|
- let indicator_map: Mutex<HashMap<String, Indicators>> = Mutex::new(HashMap::new());
|
|
|
- for symbol in symbols.as_array().unwrap() {
|
|
|
- let trades_value = collect_special_trades_json(start_timestamp, end_timestamp, exchange.as_str(), &symbol.as_str().unwrap()).await;
|
|
|
- let trades = parse_json_to_trades(trades_value);
|
|
|
- let msv = generate_msv_by_trades(trades, dec!(50), vec![], start_timestamp, end_timestamp);
|
|
|
- let mut map = indicator_map.lock().await;
|
|
|
- map.insert(symbol.as_str().unwrap().to_string(), msv);
|
|
|
- }
|
|
|
- // 逻辑执行部分
|
|
|
- let rst = rank::generate_rank_by_indicator_map(&indicator_map.lock().await);
|
|
|
-
|
|
|
- let response = Response {
|
|
|
- query: serde_json::to_value(&query.into_inner()).unwrap(),
|
|
|
- msg: Some("查询成功".to_string()),
|
|
|
- code: 200,
|
|
|
- data: rst,
|
|
|
- };
|
|
|
-
|
|
|
- let json_string = serde_json::to_string(&response).unwrap();
|
|
|
- HttpResponse::Ok().content_type("application/json").body(json_string)
|
|
|
-}
|
|
|
+// #[get("/rk/get_real_time_rank_list")]
|
|
|
+// async fn get_real_time_rank_list(query: web::Query<RankQuery>) -> impl Responder {
|
|
|
+// // ============================= 参数校验部分 =========================================
|
|
|
+// if !query.validate() {
|
|
|
+// let response = Response {
|
|
|
+// query: serde_json::to_value(&query.into_inner()).unwrap(),
|
|
|
+// msg: Some("查询内容有误,必须传递的参数:[exchange]".to_string()),
|
|
|
+// code: 500,
|
|
|
+// data: Value::Null,
|
|
|
+// };
|
|
|
+//
|
|
|
+// let json_string = serde_json::to_string(&response).unwrap();
|
|
|
+// return HttpResponse::Ok().content_type("application/json").body(json_string);
|
|
|
+// }
|
|
|
+// let supportive_exchange = vec!["gate_usdt_swap", "coinex_usdt_swap", "binance_usdt_swap", "phemex_usdt_swap", "mexc_usdt_swap", "bybit_usdt_swap", "bitget_usdt_swap", "gate_coin_spot"];
|
|
|
+// let exchange = query.exchange.clone().unwrap().clone();
|
|
|
+// if !supportive_exchange.contains(&exchange.as_str()) {
|
|
|
+// let response = Response {
|
|
|
+// query: serde_json::to_value(&query.into_inner()).unwrap(),
|
|
|
+// msg: Some("查询内容有误,exchange当前仅支持:[gate_usdt_swap, coinex_usdt_swap, binance_usdt_swap, phemex_usdt_swap, mexc_usdt_swap, bybit_usdt_swap, bitget_usdt_swap, gate_coin_spot]".to_string()),
|
|
|
+// code: 500,
|
|
|
+// data: Value::Null,
|
|
|
+// };
|
|
|
+//
|
|
|
+// let json_string = serde_json::to_string(&response).unwrap();
|
|
|
+// return HttpResponse::Ok().content_type("application/json").body(json_string);
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 计算msv
|
|
|
+// let end_timestamp = Utc::now().timestamp_millis();
|
|
|
+// let start_timestamp = end_timestamp - 60 * 1000 * 60 * 4;
|
|
|
+//
|
|
|
+// let symbols = get_symbols_by_exchange(exchange.as_str());
|
|
|
+//
|
|
|
+// let indicator_map: Mutex<HashMap<String, Indicators>> = Mutex::new(HashMap::new());
|
|
|
+// for symbol in symbols.as_array().unwrap() {
|
|
|
+// let trades_value = collect_special_trades_json(start_timestamp, end_timestamp, exchange.as_str(), &symbol.as_str().unwrap()).await;
|
|
|
+// let trades = parse_json_to_trades(trades_value);
|
|
|
+// let msv = generate_msv_by_trades(trades, dec!(50), vec![], start_timestamp, end_timestamp);
|
|
|
+// let mut map = indicator_map.lock().await;
|
|
|
+// map.insert(symbol.as_str().unwrap().to_string(), msv);
|
|
|
+// }
|
|
|
+// // 逻辑执行部分
|
|
|
+// let rst = rank::generate_rank_by_indicator_map(&indicator_map.lock().await);
|
|
|
+//
|
|
|
+// let response = Response {
|
|
|
+// query: serde_json::to_value(&query.into_inner()).unwrap(),
|
|
|
+// msg: Some("查询成功".to_string()),
|
|
|
+// code: 200,
|
|
|
+// data: rst,
|
|
|
+// };
|
|
|
+//
|
|
|
+// let json_string = serde_json::to_string(&response).unwrap();
|
|
|
+// HttpResponse::Ok().content_type("application/json").body(json_string)
|
|
|
+// }
|
|
|
|
|
|
#[get("/rk/get_rank_list")]
|
|
|
async fn get_rank_list(query: web::Query<RankQuery>) -> impl Responder {
|
|
|
@@ -214,7 +208,7 @@ pub fn run_server(port: u32, running: Arc<AtomicBool>) {
|
|
|
App::new()
|
|
|
.wrap(cors)
|
|
|
.service(get_rank_list)
|
|
|
- .service(get_real_time_rank_list)
|
|
|
+ // .service(get_real_time_rank_list)
|
|
|
.service(get_exchanges)
|
|
|
})
|
|
|
.bind(addr)
|