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

180 lines
5.2 KiB
Dart

/// C2C订单类型
enum C2cOrderType {
buy, // 买入积分股(用积分值换积分股)
sell, // 卖出积分股(用积分股换积分值)
}
/// C2C订单状态
enum C2cOrderStatus {
pending, // 待接单
matched, // 已匹配(等待付款)
paid, // 已付款(等待确认收款)
completed, // 已完成
cancelled, // 已取消
expired, // 已过期
}
/// C2C订单模型
class C2cOrderModel {
final String orderNo;
final C2cOrderType type;
final String makerAccountSequence;
final String? makerPhone;
final String? makerNickname;
final String? takerAccountSequence;
final String? takerPhone;
final String? takerNickname;
final String price; // 单价
final String quantity; // 数量(积分股)
final String totalAmount; // 总金额(积分值)
final String minAmount; // 最小交易量
final String maxAmount; // 最大交易量
final C2cOrderStatus status;
final String? remark;
final DateTime createdAt;
final DateTime? matchedAt;
final DateTime? paidAt;
final DateTime? completedAt;
final DateTime? expiredAt;
C2cOrderModel({
required this.orderNo,
required this.type,
required this.makerAccountSequence,
this.makerPhone,
this.makerNickname,
this.takerAccountSequence,
this.takerPhone,
this.takerNickname,
required this.price,
required this.quantity,
required this.totalAmount,
required this.minAmount,
required this.maxAmount,
required this.status,
this.remark,
required this.createdAt,
this.matchedAt,
this.paidAt,
this.completedAt,
this.expiredAt,
});
factory C2cOrderModel.fromJson(Map<String, dynamic> json) {
return C2cOrderModel(
orderNo: json['orderNo'] ?? '',
type: _parseOrderType(json['type']),
makerAccountSequence: json['makerAccountSequence'] ?? '',
makerPhone: json['makerPhone'],
makerNickname: json['makerNickname'],
takerAccountSequence: json['takerAccountSequence'],
takerPhone: json['takerPhone'],
takerNickname: json['takerNickname'],
price: json['price']?.toString() ?? '0',
quantity: json['quantity']?.toString() ?? '0',
totalAmount: json['totalAmount']?.toString() ?? '0',
minAmount: json['minAmount']?.toString() ?? '0',
maxAmount: json['maxAmount']?.toString() ?? '0',
status: _parseOrderStatus(json['status']),
remark: json['remark'],
createdAt: json['createdAt'] != null
? DateTime.parse(json['createdAt'])
: DateTime.now(),
matchedAt: json['matchedAt'] != null
? DateTime.parse(json['matchedAt'])
: null,
paidAt: json['paidAt'] != null
? DateTime.parse(json['paidAt'])
: null,
completedAt: json['completedAt'] != null
? DateTime.parse(json['completedAt'])
: null,
expiredAt: json['expiredAt'] != null
? DateTime.parse(json['expiredAt'])
: null,
);
}
static C2cOrderType _parseOrderType(String? type) {
switch (type?.toUpperCase()) {
case 'BUY':
return C2cOrderType.buy;
case 'SELL':
return C2cOrderType.sell;
default:
return C2cOrderType.buy;
}
}
static C2cOrderStatus _parseOrderStatus(String? status) {
switch (status?.toUpperCase()) {
case 'PENDING':
return C2cOrderStatus.pending;
case 'MATCHED':
return C2cOrderStatus.matched;
case 'PAID':
return C2cOrderStatus.paid;
case 'COMPLETED':
return C2cOrderStatus.completed;
case 'CANCELLED':
return C2cOrderStatus.cancelled;
case 'EXPIRED':
return C2cOrderStatus.expired;
default:
return C2cOrderStatus.pending;
}
}
bool get isBuy => type == C2cOrderType.buy;
bool get isSell => type == C2cOrderType.sell;
bool get isPending => status == C2cOrderStatus.pending;
bool get isMatched => status == C2cOrderStatus.matched;
bool get isPaid => status == C2cOrderStatus.paid;
bool get isCompleted => status == C2cOrderStatus.completed;
bool get isCancelled => status == C2cOrderStatus.cancelled;
String get typeText => isBuy ? '买入' : '卖出';
String get statusText {
switch (status) {
case C2cOrderStatus.pending:
return '待接单';
case C2cOrderStatus.matched:
return '待付款';
case C2cOrderStatus.paid:
return '待确认';
case C2cOrderStatus.completed:
return '已完成';
case C2cOrderStatus.cancelled:
return '已取消';
case C2cOrderStatus.expired:
return '已过期';
}
}
}
/// C2C订单列表分页模型
class C2cOrdersPageModel {
final List<C2cOrderModel> data;
final int total;
final int page;
final int pageSize;
C2cOrdersPageModel({
required this.data,
required this.total,
required this.page,
required this.pageSize,
});
factory C2cOrdersPageModel.fromJson(Map<String, dynamic> json) {
final List<dynamic> dataList = json['data'] ?? [];
return C2cOrdersPageModel(
data: dataList.map((e) => C2cOrderModel.fromJson(e)).toList(),
total: json['total'] ?? 0,
page: json['page'] ?? 1,
pageSize: json['pageSize'] ?? 10,
);
}
}