today_pnl.dart 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import 'package:decimal/decimal.dart';
  2. /// 账户信息
  3. class AccountInfo {
  4. final String name;
  5. final Decimal balance;
  6. final Decimal frozenBalance;
  7. final Decimal frozenMargin;
  8. final Decimal currentCapital;
  9. /// 已释放总量(与质押币种同单位,如 iBit;质押账户专用)
  10. final Decimal releasedTotal;
  11. const AccountInfo({
  12. required this.name,
  13. required this.balance,
  14. required this.frozenBalance,
  15. required this.frozenMargin,
  16. required this.currentCapital,
  17. this.releasedTotal = Decimal.zero,
  18. });
  19. factory AccountInfo.fromJson(Map<String, dynamic> json) {
  20. return AccountInfo(
  21. name: json['name']?.toString() ?? '',
  22. balance: Decimal.tryParse(json['balance']?.toString() ?? '0') ?? Decimal.zero,
  23. frozenBalance: Decimal.tryParse(json['frozenBalance']?.toString() ?? '0') ?? Decimal.zero,
  24. frozenMargin: Decimal.tryParse(json['frozenMargin']?.toString() ?? '0') ?? Decimal.zero,
  25. currentCapital: Decimal.tryParse(json['currentCapital']?.toString() ?? '0') ?? Decimal.zero,
  26. releasedTotal: Decimal.tryParse(
  27. json['releasedTotal']?.toString() ?? json['released_total']?.toString() ?? '0',
  28. ) ??
  29. Decimal.zero,
  30. );
  31. }
  32. }
  33. /// 合约钱包数据 - GET swap/wallet-new/get
  34. class TodayPnl {
  35. /// 今日盈亏金额
  36. final Decimal revenue;
  37. /// 今日盈亏率(%),后端分母为 0 或 null 时返回 null
  38. final Decimal? revenueRate;
  39. /// 总资产(cashBalance)
  40. final Decimal cashBalance;
  41. /// 合约账户当前权益(currentCapital)
  42. final Decimal currentCapital;
  43. /// 各账户信息列表
  44. final List<AccountInfo> accountInfoList;
  45. TodayPnl({
  46. Decimal? revenue,
  47. this.revenueRate,
  48. Decimal? cashBalance,
  49. Decimal? currentCapital,
  50. List<AccountInfo>? accountInfoList,
  51. }) : revenue = revenue ?? Decimal.zero,
  52. cashBalance = cashBalance ?? Decimal.zero,
  53. currentCapital = currentCapital ?? Decimal.zero,
  54. accountInfoList = accountInfoList ?? [];
  55. /// 涨跌趋势:正=true, 负=false, 零=null
  56. bool? get isUpTrend {
  57. if (revenue == Decimal.zero) return null;
  58. return revenue > Decimal.zero;
  59. }
  60. factory TodayPnl.fromJson(Map<String, dynamic> json) {
  61. final accountList = json['accountInfoList'] as List?;
  62. final accountInfoList = accountList
  63. ?.map((e) => AccountInfo.fromJson(e as Map<String, dynamic>))
  64. .toList() ?? [];
  65. return TodayPnl(
  66. revenue: Decimal.tryParse(json['currentTodayRevenue']?.toString() ?? ''),
  67. revenueRate: Decimal.tryParse(json['todayRevenueRate']?.toString() ?? ''),
  68. cashBalance: Decimal.tryParse(json['cashBalance']?.toString() ?? ''),
  69. currentCapital: Decimal.tryParse(json['currentCapital']?.toString() ?? ''),
  70. accountInfoList: accountInfoList,
  71. );
  72. }
  73. }