xlsx_test.rs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. // use std::collections::{BTreeMap, HashSet};
  2. // use chrono::{DateTime, FixedOffset, NaiveDateTime, TimeZone, Utc};
  3. //
  4. // use tracing::{trace};
  5. //
  6. // use exchanges::gate_swap_rest::GateSwapRest;
  7. // use exchanges::xlsx_utils::creation_xlsx;
  8. //
  9. // //ws-订阅公共频道信息
  10. // #[tokio::test(flavor = "multi_thread", worker_threads = 1)]
  11. // async fn test_gate_creation_xlsx() {
  12. // global::log_utils::init_log_with_trace();
  13. //
  14. // //获取不同账号的数据
  15. // let mut acc_array: Vec<BTreeMap<String, String>> = vec![];
  16. // let mut acc_all_data: BTreeMap<String, Vec<Vec<String>>> = BTreeMap::new();
  17. // let mut acc_all_data_clone: BTreeMap<String, Vec<Vec<String>>> = BTreeMap::new();
  18. // let mut data_array_all: Vec<Vec<String>> = vec![];
  19. // let mut time_all: Vec<i64> = vec![];
  20. // loop {
  21. // let mut gate60: BTreeMap<String, String> = BTreeMap::new();
  22. // gate60.insert("acc_name".to_string(), String::from("gate60"));
  23. // gate60.insert("access_key".to_string(), String::from("61e3a1b12c44c8ccfce1f32782b9922f"));
  24. // gate60.insert("secret_key".to_string(), String::from("f3f533fa685cbae44b3017f73b71e90eaa9aa8d4922a39426744721e4824a527"));
  25. // acc_array.push(gate60);
  26. //
  27. // let mut gate59: BTreeMap<String, String> = BTreeMap::new();
  28. // gate59.insert("acc_name".to_string(), String::from("gate59"));
  29. // gate59.insert("access_key".to_string(), String::from("c691d4fcc5a5a98af459f993a3a0c653"));
  30. // gate59.insert("secret_key".to_string(), String::from("05e7f8640bffeacc146b6f9f08512955d00d89bbdb051c9427f31adf96adeb2f"));
  31. // acc_array.push(gate59);
  32. //
  33. // let mut gate58: BTreeMap<String, String> = BTreeMap::new();
  34. // gate58.insert("acc_name".to_string(), String::from("gate58"));
  35. // gate58.insert("access_key".to_string(), String::from("dfdc30687ac71daefa2fb39c706b8afa"));
  36. // gate58.insert("secret_key".to_string(), String::from("31e8999f85d38f5dd174f8919d9a1611c24d4e35b4d6319d6b160005871bf8b6"));
  37. // acc_array.push(gate58);
  38. //
  39. // let mut gate57: BTreeMap<String, String> = BTreeMap::new();
  40. // gate57.insert("acc_name".to_string(), String::from("gate57"));
  41. // gate57.insert("access_key".to_string(), String::from("ba11ea511f343763db7c92c685f20c12"));
  42. // gate57.insert("secret_key".to_string(), String::from("272d1d38ac4f0af3e6ed96e6a9a2c59dd905c3d7ad730507008604bba14edb3d"));
  43. // acc_array.push(gate57);
  44. //
  45. // let mut gate56: BTreeMap<String, String> = BTreeMap::new();
  46. // gate56.insert("acc_name".to_string(), String::from("gate56"));
  47. // gate56.insert("access_key".to_string(), String::from("72f0c351a83b04808baad625f6085599"));
  48. // gate56.insert("secret_key".to_string(), String::from("8a8d482bcc31f184cce350531cb40ca70564f9c466698d025e16d8943257dc0f"));
  49. // acc_array.push(gate56);
  50. //
  51. // let mut gate55: BTreeMap<String, String> = BTreeMap::new();
  52. // gate55.insert("acc_name".to_string(), String::from("gate55"));
  53. // gate55.insert("access_key".to_string(), String::from("036408d5cbd8ddf1c6e0baab61ee641a"));
  54. // gate55.insert("secret_key".to_string(), String::from("940414a37711e59848011e99e223fa11b0e69f8badd35347301e3f8e41957a60"));
  55. // acc_array.push(gate55);
  56. //
  57. // let mut gate54: BTreeMap<String, String> = BTreeMap::new();
  58. // gate54.insert("acc_name".to_string(), String::from("gate54"));
  59. // gate54.insert("access_key".to_string(), String::from("fbe564e8bd4efaa0c3c023ca8c057b36"));
  60. // gate54.insert("secret_key".to_string(), String::from("0be3c0223fd021fdacacc03f183f467e988ceee6eb1b0e09ca96bb1eebd45f39"));
  61. // acc_array.push(gate54);
  62. //
  63. // let mut gate53: BTreeMap<String, String> = BTreeMap::new();
  64. // gate53.insert("acc_name".to_string(), String::from("gate53"));
  65. // gate53.insert("access_key".to_string(), String::from("16d91ba0a3d79a2925d16ea01a615fa1"));
  66. // gate53.insert("secret_key".to_string(), String::from("607b07cf240466656c00beb0c6fff252839467583fd3f8b14782eb007b3d99ce"));
  67. // acc_array.push(gate53);
  68. //
  69. // let mut gate52: BTreeMap<String, String> = BTreeMap::new();
  70. // gate52.insert("acc_name".to_string(), String::from("gate52"));
  71. // gate52.insert("access_key".to_string(), String::from("31054006c457a80a027e961cf3e5e3a4"));
  72. // gate52.insert("secret_key".to_string(), String::from("a43f8f5672b49bfcc304d0731100610de1c55e7d2b6c00199b267993f0b189d1"));
  73. // acc_array.push(gate52);
  74. //
  75. // let mut gate51: BTreeMap<String, String> = BTreeMap::new();
  76. // gate51.insert("acc_name".to_string(), String::from("gate51"));
  77. // gate51.insert("access_key".to_string(), String::from("edcedefe7830dd5722c2c37704ae700f"));
  78. // gate51.insert("secret_key".to_string(), String::from("41db86a8463ac7c66023a8505e5fddd3448e551a11a52141bf57ca8478e2149b"));
  79. // acc_array.push(gate51);
  80. //
  81. //
  82. // for acc in acc_array {
  83. // let mut gate_exc = GateSwapRest::new(false, acc.clone());
  84. // let data = gate_exc.account_book("usdt".to_string()).await;
  85. // // trace!("data???????:{:?}",data.clone());
  86. // if data.code.as_str() == "200" {
  87. // let acc_name = acc.get("acc_name").clone();
  88. //
  89. // //账号
  90. // let json_value: serde_json::Value = serde_json::from_str(&data.data).unwrap();
  91. // if let serde_json::Value::Array(array) = json_value {
  92. // let mut name_data_all: Vec<Vec<String>> = vec![];
  93. // let mut name_data_all_clone: Vec<Vec<String>> = vec![];
  94. // for item in array {
  95. // let time = item["time"].as_i64().unwrap();//秒级
  96. // // 使用秒构建一个DateTime<Utc>对象
  97. // // let datetime: DateTime<Utc> = Utc.timestamp(time, 0);
  98. // //2023-12-10 00:00:00
  99. // if 1702051200 > time {
  100. // continue;
  101. // }
  102. // time_all.push(time);
  103. // let time_str = NaiveDateTime::from_timestamp_millis((time + 8 * 3600) * 1000).unwrap().format("%Y-%m-%d %H:%M:%S%.3f").to_string();
  104. //
  105. // trace!("数据时间解析:{:?}---{:?}",time,time_str);
  106. // let change = item["change"].as_str().unwrap();
  107. //
  108. // let balance = item["balance"].as_str().unwrap();
  109. // let type_str = match item["type"].as_str().unwrap() {
  110. // "dnw" => { "转入转出" }
  111. // "pnl" => { "减仓盈亏" }
  112. // "fee" => { "交易手续费" }
  113. // "refr" => { "推荐人返佣" }
  114. // "fund" => { "资金费用" }
  115. // "point_dnw" => { "点卡转入转出" }
  116. // "point_fee" => { "点卡交易手续费" }
  117. // "point_refr" => { "点卡推荐人返佣" }
  118. // _ => {
  119. // "未知-变更类型"
  120. // }
  121. // };
  122. // let text = item["text"].as_str().unwrap();
  123. // let contract = item["contract"].as_str().unwrap();
  124. // let trade_id = item["trade_id"].as_str().unwrap();
  125. //
  126. // let mut name_data_array: Vec<String> = vec![];
  127. // name_data_array.push(time_str.to_string());
  128. // name_data_array.push(trade_id.to_string());
  129. // name_data_array.push(change.to_string());
  130. // name_data_array.push(balance.to_string());
  131. // name_data_array.push(type_str.to_string());
  132. // name_data_array.push(contract.to_string());
  133. // name_data_array.push(text.to_string());
  134. //
  135. // let mut name_data_array_clone: Vec<String> = vec![];
  136. // name_data_array_clone.push(time.to_string());
  137. // name_data_array_clone.push(trade_id.to_string());
  138. // name_data_array_clone.push(change.to_string());
  139. // name_data_array_clone.push(balance.to_string());
  140. // name_data_array_clone.push(type_str.to_string());
  141. // name_data_array_clone.push(contract.to_string());
  142. // name_data_array_clone.push(text.to_string());
  143. //
  144. // name_data_all.push(name_data_array.clone());
  145. // name_data_all_clone.push(name_data_array_clone.clone());
  146. // let mut cp = name_data_array.clone();
  147. // cp.push(acc_name.clone().unwrap().to_string());
  148. // data_array_all.push(cp);
  149. // }
  150. // acc_all_data.insert(acc_name.clone().unwrap().to_string(), name_data_all.clone());
  151. // acc_all_data_clone.insert(acc_name.clone().unwrap().to_string(), name_data_all_clone.clone());
  152. // } else {
  153. // trace!("不是数组 检查数据");
  154. // }
  155. // }
  156. // // break;
  157. // }
  158. // break;//这里是为了 代码收纳,用了loop来放置代码
  159. // }
  160. // trace!("数据如下:{:?}",acc_all_data);
  161. //
  162. // //汇总
  163. // //1. 生成时间片
  164. // let mut unique = HashSet::new();
  165. // time_all.retain(|e| unique.insert(*e));
  166. // trace!("时间片:{:?}",time_all);
  167. //
  168. // //2. 根据时间片 去求每个时间片的 总余额,
  169. // let mut sum_data_array_all: Vec<Vec<String>> = vec![];
  170. // for time in time_all.clone() {
  171. // let mut sum_data_array: Vec<String> = vec![];
  172. // let mut sum_balance: f64 = 0 as f64;
  173. // for (key, value) in acc_all_data_clone.clone() {
  174. // let acc_key = key;
  175. // trace!("读取value:{:?}",value);
  176. // let filter_arrya: Vec<Vec<String>> = value.clone().into_iter().filter(|s| {
  177. // trace!("读取time:{:?}",s);
  178. // let time_v = s[0].clone();
  179. // time_v < (time - 1).to_string()
  180. // }).collect();
  181. //
  182. // let balance: f64 = if filter_arrya.len() > 0 {
  183. // let row = filter_arrya[filter_arrya.len() - 1].clone();
  184. // trace!("读取balance:{:?}",row);
  185. // let balance_clone = row[3].clone();
  186. // balance_clone.parse::<f64>().unwrap()
  187. // } else {
  188. // 0 as f64
  189. // };
  190. // sum_balance = balance + sum_balance;
  191. // }
  192. //
  193. // // 使用秒构建一个DateTime<Utc>对象
  194. // let time_str = NaiveDateTime::from_timestamp_millis((time + 8 * 3600) * 1000).unwrap().format("%Y-%m-%d %H:%M:%S%.3f").to_string();
  195. //
  196. // sum_data_array.push(time_str.to_string());
  197. // sum_data_array.push("".to_string());
  198. // sum_data_array.push("".to_string());
  199. // sum_data_array.push(sum_balance.to_string());
  200. // sum_data_array.push("".to_string());
  201. // sum_data_array.push("".to_string());
  202. // sum_data_array.push("".to_string());
  203. //
  204. // sum_data_array_all.push(sum_data_array);
  205. // }
  206. // if sum_data_array_all.len() > 0 {
  207. // acc_all_data.insert("total".to_string(), sum_data_array_all);
  208. // }
  209. // if data_array_all.len() > 0{
  210. // acc_all_data.insert("gather".to_string(), data_array_all);
  211. // }
  212. //
  213. // //数据组装.
  214. // let noe_row_name = vec!["时间", "成交Id", "变更金额", "变更后余额", "变更类型", "合约标识", "注释"];
  215. // //创建表格
  216. // //提示。涉及到 需要转换的数据,请提前自行转换,工具只负责写入生成
  217. // // after - 之后的,时间戳> after 才是有效数据
  218. // match creation_xlsx(&noe_row_name, &acc_all_data,
  219. // "okx".to_string(),
  220. // ) {
  221. // Ok(d) => {
  222. // trace!("完成");
  223. // }
  224. // Err(z) => {
  225. // eprint!("{:?}", z);
  226. // trace!("失败");
  227. // }
  228. // }
  229. // }