rwadurian/frontend/mining-app/lib/data/models/trade_order_model.dart

148 lines
4.4 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import '../../domain/entities/trade_order.dart';
import '../../domain/entities/trade_record.dart';
class TradeOrderModel extends TradeOrder {
const TradeOrderModel({
required super.id,
required super.orderNo,
required super.orderType,
required super.status,
required super.price,
required super.quantity,
required super.filledQuantity,
required super.remainingQuantity,
required super.averagePrice,
required super.totalAmount,
required super.createdAt,
super.completedAt,
super.cancelledAt,
});
factory TradeOrderModel.fromJson(Map<String, dynamic> json) {
return TradeOrderModel(
id: json['id']?.toString() ?? '',
orderNo: json['orderNo']?.toString() ?? '',
orderType: _parseOrderType(json['type']),
status: _parseStatus(json['status']),
price: json['price']?.toString() ?? '0',
quantity: json['quantity']?.toString() ?? '0',
filledQuantity: json['filledQuantity']?.toString() ?? '0',
remainingQuantity: json['remainingQuantity']?.toString() ?? '0',
averagePrice: json['averagePrice']?.toString() ?? '0',
totalAmount: json['totalAmount']?.toString() ?? '0',
createdAt: json['createdAt'] != null
? DateTime.parse(json['createdAt'].toString())
: DateTime.now(),
completedAt: json['completedAt'] != null
? DateTime.parse(json['completedAt'].toString())
: null,
cancelledAt: json['cancelledAt'] != null
? DateTime.parse(json['cancelledAt'].toString())
: null,
);
}
static OrderType _parseOrderType(String? type) {
switch (type) {
case 'BUY':
return OrderType.buy;
case 'SELL':
return OrderType.sell;
default:
return OrderType.buy;
}
}
static OrderStatus _parseStatus(String? status) {
switch (status) {
case 'PENDING':
return OrderStatus.pending;
case 'PARTIAL':
return OrderStatus.partial;
case 'FILLED':
return OrderStatus.filled;
case 'CANCELLED':
return OrderStatus.cancelled;
default:
return OrderStatus.pending;
}
}
}
/// 订单列表响应
class OrdersPageModel {
final List<TradeOrderModel> data;
final int total;
const OrdersPageModel({
required this.data,
required this.total,
});
factory OrdersPageModel.fromJson(Map<String, dynamic> json) {
final dataList = (json['data'] as List<dynamic>?) ?? [];
return OrdersPageModel(
data: dataList.map((e) => TradeOrderModel.fromJson(e)).toList(),
total: json['total'] ?? 0,
);
}
}
/// 成交记录 Model包含完整交易明细
class TradeRecordModel extends TradeRecord {
const TradeRecordModel({
required super.id,
required super.tradeNo,
required super.type,
required super.price,
required super.quantity,
required super.originalQuantity,
required super.burnQuantity,
required super.burnMultiplier,
required super.grossAmount,
required super.fee,
required super.netAmount,
required super.counterparty,
required super.createdAt,
});
factory TradeRecordModel.fromJson(Map<String, dynamic> json) {
return TradeRecordModel(
id: json['id']?.toString() ?? '',
tradeNo: json['tradeNo']?.toString() ?? '',
type: json['type'] == 'BUY' ? TradeType.buy : TradeType.sell,
price: json['price']?.toString() ?? '0',
quantity: json['quantity']?.toString() ?? '0',
originalQuantity: json['originalQuantity']?.toString() ?? json['quantity']?.toString() ?? '0',
burnQuantity: json['burnQuantity']?.toString() ?? '0',
burnMultiplier: json['burnMultiplier']?.toString() ?? '1',
grossAmount: json['grossAmount']?.toString() ?? '0',
fee: json['fee']?.toString() ?? '0',
netAmount: json['netAmount']?.toString() ?? '0',
counterparty: json['counterparty']?.toString() ?? '',
createdAt: json['createdAt'] != null
? DateTime.parse(json['createdAt'].toString())
: DateTime.now(),
);
}
}
/// 成交记录列表响应
class TradesPageModel {
final List<TradeRecordModel> data;
final int total;
const TradesPageModel({
required this.data,
required this.total,
});
factory TradesPageModel.fromJson(Map<String, dynamic> json) {
final dataList = (json['data'] as List<dynamic>?) ?? [];
return TradesPageModel(
data: dataList.map((e) => TradeRecordModel.fromJson(e)).toList(),
total: json['total'] ?? 0,
);
}
}