|
@@ -4,9 +4,11 @@ use std::str::FromStr;
|
|
|
use actix_web::{HttpResponse};
|
|
use actix_web::{HttpResponse};
|
|
|
use chrono::Utc;
|
|
use chrono::Utc;
|
|
|
use rust_decimal::Decimal;
|
|
use rust_decimal::Decimal;
|
|
|
|
|
+use rust_decimal::prelude::ToPrimitive;
|
|
|
use rust_decimal_macros::dec;
|
|
use rust_decimal_macros::dec;
|
|
|
use serde_json::{json, Value};
|
|
use serde_json::{json, Value};
|
|
|
use crate::db_connector::get_trades_json;
|
|
use crate::db_connector::get_trades_json;
|
|
|
|
|
+use crate::params_utils::{get_str, parse_str_to_decimal};
|
|
|
use crate::server::{Response, Trade};
|
|
use crate::server::{Response, Trade};
|
|
|
|
|
|
|
|
pub fn symbol_fix(symbol: &str) -> String {
|
|
pub fn symbol_fix(symbol: &str) -> String {
|
|
@@ -22,68 +24,36 @@ pub fn symbol_fix(symbol: &str) -> String {
|
|
|
// 将trades_json转换为指标
|
|
// 将trades_json转换为指标
|
|
|
pub async fn generate_msv(query_value: Value) -> HttpResponse {
|
|
pub async fn generate_msv(query_value: Value) -> HttpResponse {
|
|
|
// 参数处理
|
|
// 参数处理
|
|
|
- let exchange = match query_value["exchange"].as_str() {
|
|
|
|
|
- None => {
|
|
|
|
|
- "gate_usdt_swap"
|
|
|
|
|
|
|
+ let exchange = match get_str(query_value.clone(), "exchange") {
|
|
|
|
|
+ Ok(str) => {
|
|
|
|
|
+ str
|
|
|
}
|
|
}
|
|
|
- Some(exchange) => {
|
|
|
|
|
- if exchange.is_empty() {
|
|
|
|
|
- "gate_usdt_swap"
|
|
|
|
|
- } else {
|
|
|
|
|
- exchange
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ Err(response) => {
|
|
|
|
|
+ return response
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
- let symbol = match query_value["symbol"].as_str() {
|
|
|
|
|
- None => {
|
|
|
|
|
- "BTC_USDT".to_string()
|
|
|
|
|
|
|
+ let symbol = match get_str(query_value.clone(), "symbol") {
|
|
|
|
|
+ Ok(symbol) => {
|
|
|
|
|
+ symbol_fix(symbol.as_str())
|
|
|
}
|
|
}
|
|
|
- Some(symbol) => {
|
|
|
|
|
- if symbol.is_empty() {
|
|
|
|
|
- "BTC_USDT".to_string()
|
|
|
|
|
- } else {
|
|
|
|
|
- symbol_fix(symbol)
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ Err(response) => {
|
|
|
|
|
+ return response
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
- let mills_back = match query_value["mills_back"].as_str() {
|
|
|
|
|
- None => {
|
|
|
|
|
- dec!(37)
|
|
|
|
|
|
|
+ let mills_back = match parse_str_to_decimal(query_value.clone(), "mills_back") {
|
|
|
|
|
+ Ok(t) => {
|
|
|
|
|
+ t
|
|
|
}
|
|
}
|
|
|
- Some(mills_back_str) => {
|
|
|
|
|
- if mills_back_str.is_empty() {
|
|
|
|
|
- dec!(37)
|
|
|
|
|
- } else {
|
|
|
|
|
- Decimal::from_str(mills_back_str).unwrap()
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ Err(response) => {
|
|
|
|
|
+ return response
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
- let minute_time_range = match query_value["minute_time_range"].as_str() {
|
|
|
|
|
- None => {
|
|
|
|
|
- 240
|
|
|
|
|
|
|
+ let minute_time_range = match parse_str_to_decimal(query_value.clone(), "minute_time_range") {
|
|
|
|
|
+ Ok(t) => {
|
|
|
|
|
+ t.to_i64().unwrap()
|
|
|
}
|
|
}
|
|
|
- Some(minute_time_range_str) => {
|
|
|
|
|
- if minute_time_range_str.is_empty() {
|
|
|
|
|
- 240
|
|
|
|
|
- } else {
|
|
|
|
|
- match i64::from_str(minute_time_range_str) {
|
|
|
|
|
- Ok(minute_time_range) => {
|
|
|
|
|
- minute_time_range
|
|
|
|
|
- }
|
|
|
|
|
- Err(_) => {
|
|
|
|
|
- // 返回数据
|
|
|
|
|
- let response = Response {
|
|
|
|
|
- query: query_value.clone(),
|
|
|
|
|
- msg: Some("时间不要字符串,要数字,这个版本不支持字符串".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)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ Err(response) => {
|
|
|
|
|
+ return response
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -91,7 +61,7 @@ pub async fn generate_msv(query_value: Value) -> HttpResponse {
|
|
|
let end_time = Utc::now().timestamp_millis();
|
|
let end_time = Utc::now().timestamp_millis();
|
|
|
let start_time = end_time - minute_time_range * 60 * 1000;
|
|
let start_time = end_time - minute_time_range * 60 * 1000;
|
|
|
let db_response = get_trades_json(
|
|
let db_response = get_trades_json(
|
|
|
- exchange,
|
|
|
|
|
|
|
+ exchange.as_str(),
|
|
|
symbol.as_str(),
|
|
symbol.as_str(),
|
|
|
start_time,
|
|
start_time,
|
|
|
end_time,
|
|
end_time,
|
|
@@ -116,7 +86,7 @@ pub async fn generate_msv(query_value: Value) -> HttpResponse {
|
|
|
HttpResponse::Ok().content_type("application/json").body(json_string)
|
|
HttpResponse::Ok().content_type("application/json").body(json_string)
|
|
|
} else {
|
|
} else {
|
|
|
let json_string = serde_json::to_string(&db_response).unwrap();
|
|
let json_string = serde_json::to_string(&db_response).unwrap();
|
|
|
- HttpResponse::BadRequest().content_type("application/json").body(json_string)
|
|
|
|
|
|
|
+ HttpResponse::Ok().content_type("application/json").body(json_string)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|