|
|
@@ -221,7 +221,6 @@ pub async fn export_balance(config_info: BalanceConfigInfo) {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
-
|
|
|
pub fn statistic_balance(balance_info: Vec<Vec<String>>, count_start_time: i64, end_start_time: i64) -> String {
|
|
|
let mut max_withdrawal = dec!(0);
|
|
|
let mut max_total_withdrawal = dec!(0);
|
|
|
@@ -234,18 +233,27 @@ pub fn statistic_balance(balance_info: Vec<Vec<String>>, count_start_time: i64,
|
|
|
balance_info_map.insert(info[0].clone(), default_info);
|
|
|
}
|
|
|
for (account_name, balance_info) in balance_info_map.clone() {
|
|
|
+ let mut max_price = dec!(0);
|
|
|
+ let mut min_price = dec!(0);
|
|
|
+ let mut withdrawal = dec!(0);
|
|
|
for (index, info) in balance_info.iter().enumerate() {
|
|
|
- if index == 0 { continue; }
|
|
|
- let present = Decimal::from_str(&info[4]).unwrap();
|
|
|
- let past = Decimal::from_str(&balance_info[index - 1][4]).unwrap();
|
|
|
- let withdrawal = ((Decimal::ONE - (present / past)) * dec!(100)).round_dp(2);
|
|
|
- if account_name != "total_balance" {
|
|
|
- if max_withdrawal < withdrawal { max_withdrawal = withdrawal }
|
|
|
- } else {
|
|
|
- if max_total_withdrawal < withdrawal { max_total_withdrawal = withdrawal }
|
|
|
+ let present_price = Decimal::from_str(&info[4]).unwrap();
|
|
|
+ if index == 0 || max_price < present_price {
|
|
|
+ max_price = present_price;
|
|
|
+ min_price = present_price;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ let present_withdrawal = ((Decimal::ONE - (min_price / max_price)) * dec!(100)).round_dp(2);
|
|
|
+ if present_withdrawal > withdrawal { withdrawal = present_withdrawal }
|
|
|
+
|
|
|
+ if max_price > present_price && present_price < min_price {
|
|
|
+ min_price = present_price;
|
|
|
}
|
|
|
}
|
|
|
- if account_name == "total_balance" {
|
|
|
+ if account_name != "total_balance" {
|
|
|
+ if max_withdrawal < withdrawal { max_withdrawal = withdrawal }
|
|
|
+ } else {
|
|
|
+ max_total_withdrawal = withdrawal;
|
|
|
let present = Decimal::from_str(&balance_info[0][4]).unwrap();
|
|
|
let past = Decimal::from_str(&balance_info[balance_info.len() - 1][4]).unwrap();
|
|
|
total_income = (((past / present) - Decimal::ONE) * dec!(100)).round_dp(2);
|