Эх сурвалжийг харах

修复删除账号或者30天没数据问题

gepangpang 1 жил өмнө
parent
commit
641eb92aff

+ 10 - 6
src/new_export_balance.rs

@@ -89,7 +89,7 @@ pub async fn export_balance(config_info: BalanceConfigInfo) {
                                 for item in array {
                                 for item in array {
                                     // info!("数据{:?}",item.clone().to_string());
                                     // info!("数据{:?}",item.clone().to_string());
 
 
-                                    let time = item["time"].as_i64().unwrap();//秒级
+                                    let time = item["time"].as_i64().unwrap(); //秒级
                                     if time == times { continue; }
                                     if time == times { continue; }
                                     times = time;
                                     times = time;
 
 
@@ -179,7 +179,7 @@ pub async fn export_balance(config_info: BalanceConfigInfo) {
             count_time_list.sort_by(|a, b| a.cmp(&b));
             count_time_list.sort_by(|a, b| a.cmp(&b));
             count_time_list.insert(0, count_start_time);
             count_time_list.insert(0, count_start_time);
             count_time_list.push(count_end_time);
             count_time_list.push(count_end_time);
-            count_balance_info = supply_balance(all_account_balance_info.clone(), count_time_list.clone());
+            count_balance_info = supply_balance(all_account_balance_info.clone(), count_time_list.clone(), history_balance.clone());
         }
         }
     }
     }
     let save_start_time = if history_start_time == 0 { start_time } else { history_start_time };
     let save_start_time = if history_start_time == 0 { start_time } else { history_start_time };
@@ -306,13 +306,14 @@ pub fn statistic_balance(balance_info: BTreeMap<String, Vec<Vec<String>>>, count
     format!("{}到{},总收益约为{}%,最大回撤约为{}%,其中单个账号最大回撤约为{}%。<br/><br/>余额{}", start_time, end_time, total_income, max_total_withdrawal, max_withdrawal, total_balance)
     format!("{}到{},总收益约为{}%,最大回撤约为{}%,其中单个账号最大回撤约为{}%。<br/><br/>余额{}", start_time, end_time, total_income, max_total_withdrawal, max_withdrawal, total_balance)
 }
 }
 
 
-pub fn supply_balance(source_balance_info: BTreeMap<String, Vec<Vec<String>>>, time_slicer: Vec<i64>) -> Vec<Vec<String>> {
+pub fn supply_balance(source_balance_info: BTreeMap<String, Vec<Vec<String>>>, time_slicer: Vec<i64>, history_balance: serde_json::Value) -> Vec<Vec<String>> {
     let mut balance_info_list: Vec<Vec<String>> = vec![];
     let mut balance_info_list: Vec<Vec<String>> = vec![];
     for time in time_slicer.clone() {
     for time in time_slicer.clone() {
         // 根据时间片去拿数据 ,如果有添加没有,手动添加
         // 根据时间片去拿数据 ,如果有添加没有,手动添加
         let mut total_price = Decimal::ZERO;
         let mut total_price = Decimal::ZERO;
         let mut total_status = "profit".to_string();
         let mut total_status = "profit".to_string();
         for (key, value) in source_balance_info.clone() {
         for (key, value) in source_balance_info.clone() {
+            let last_history = history_balance["balance_list"][key.clone()].as_array().unwrap().last().unwrap();
             let mut balance_info = value.clone();
             let mut balance_info = value.clone();
             balance_info.sort_by(|a, b| a[0].cmp(&b[0]));
             balance_info.sort_by(|a, b| a[0].cmp(&b[0]));
 
 
@@ -323,12 +324,12 @@ pub fn supply_balance(source_balance_info: BTreeMap<String, Vec<Vec<String>>>, t
                     match new_info {
                     match new_info {
                         None => {
                         None => {
                             info.insert(0, key.clone());
                             info.insert(0, key.clone());
-                            new_info = Option::from(info);//记录当前实际
+                            new_info = Option::from(info); //记录当前实际
                         }
                         }
                         Some(ref value) => {
                         Some(ref value) => {
                             if value[1] < info[1] {
                             if value[1] < info[1] {
                                 info.insert(0, key.clone());
                                 info.insert(0, key.clone());
-                                new_info = Option::from(info);//记录当前实际
+                                new_info = Option::from(info); //记录当前实际
                             }
                             }
                         }
                         }
                     }
                     }
@@ -339,12 +340,15 @@ pub fn supply_balance(source_balance_info: BTreeMap<String, Vec<Vec<String>>>, t
 
 
             match new_info {
             match new_info {
                 None => {
                 None => {
+                    let mut last_history_array: Vec<String> = last_history.as_array().unwrap().iter().map(|value| value.as_str().unwrap().to_string()).collect();
+                    last_history_array.remove(0);
+
                     let balance_info_filter: Vec<Vec<String>> = balance_info.iter().filter(|item| {
                     let balance_info_filter: Vec<Vec<String>> = balance_info.iter().filter(|item| {
                         item[0].parse::<i64>().unwrap() < time
                         item[0].parse::<i64>().unwrap() < time
                     }).cloned().collect();
                     }).cloned().collect();
                     let mut last_balance_info;
                     let mut last_balance_info;
                     if balance_info_filter.len() == 0 {
                     if balance_info_filter.len() == 0 {
-                        let mut first = balance_info[0].clone();
+                        let mut first = if balance_info.len() > 0 { balance_info[0].clone() } else { last_history_array.clone() };
                         if first[4] == "transfer" {
                         if first[4] == "transfer" {
                             let first_change = Decimal::from_str(&first[2]).unwrap();
                             let first_change = Decimal::from_str(&first[2]).unwrap();
                             let first_balance = Decimal::from_str(&first[3]).unwrap();
                             let first_balance = Decimal::from_str(&first[3]).unwrap();