gepangpang 1 жил өмнө
parent
commit
0067dd609f
1 өөрчлөгдсөн 18 нэмэгдсэн , 10 устгасан
  1. 18 10
      src/export_balance.rs

+ 18 - 10
src/export_balance.rs

@@ -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);