269 lines
8.1 KiB
Dart
269 lines
8.1 KiB
Dart
/// C2C订单类型
|
|
enum C2cOrderType {
|
|
buy, // 买入积分股(用积分值换积分股)
|
|
sell, // 卖出积分股(用积分股换积分值)
|
|
}
|
|
|
|
/// C2C订单状态
|
|
enum C2cOrderStatus {
|
|
pending, // 待接单
|
|
matched, // 已匹配(等待付款)
|
|
paid, // 已付款(等待确认收款)
|
|
completed, // 已完成
|
|
cancelled, // 已取消
|
|
expired, // 已过期
|
|
}
|
|
|
|
/// C2C收款方式
|
|
enum C2cPaymentMethod {
|
|
alipay, // 支付宝
|
|
wechat, // 微信
|
|
bank, // 银行卡
|
|
}
|
|
|
|
/// 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 C2cPaymentMethod? paymentMethod; // 收款方式
|
|
final String? paymentAccount; // 收款账号
|
|
final String? paymentQrCode; // 收款二维码URL
|
|
final String? paymentRealName; // 收款人实名
|
|
// 超时配置
|
|
final int paymentTimeoutMinutes; // 付款超时时间(分钟)
|
|
final int confirmTimeoutMinutes; // 确认收款超时时间(分钟)
|
|
final DateTime? paymentDeadline; // 付款截止时间
|
|
final DateTime? confirmDeadline; // 确认收款截止时间
|
|
// 其他
|
|
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,
|
|
// 收款信息
|
|
this.paymentMethod,
|
|
this.paymentAccount,
|
|
this.paymentQrCode,
|
|
this.paymentRealName,
|
|
// 超时配置
|
|
this.paymentTimeoutMinutes = 15,
|
|
this.confirmTimeoutMinutes = 60,
|
|
this.paymentDeadline,
|
|
this.confirmDeadline,
|
|
// 其他
|
|
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',
|
|
// 收款信息
|
|
paymentMethod: _parsePaymentMethod(json['paymentMethod']),
|
|
paymentAccount: json['paymentAccount'],
|
|
paymentQrCode: json['paymentQrCode'],
|
|
paymentRealName: json['paymentRealName'],
|
|
// 超时配置
|
|
paymentTimeoutMinutes: json['paymentTimeoutMinutes'] ?? 15,
|
|
confirmTimeoutMinutes: json['confirmTimeoutMinutes'] ?? 60,
|
|
paymentDeadline: json['paymentDeadline'] != null
|
|
? DateTime.parse(json['paymentDeadline'])
|
|
: null,
|
|
confirmDeadline: json['confirmDeadline'] != null
|
|
? DateTime.parse(json['confirmDeadline'])
|
|
: null,
|
|
// 其他
|
|
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 C2cPaymentMethod? _parsePaymentMethod(String? method) {
|
|
if (method == null) return null;
|
|
switch (method.toUpperCase()) {
|
|
case 'ALIPAY':
|
|
return C2cPaymentMethod.alipay;
|
|
case 'WECHAT':
|
|
return C2cPaymentMethod.wechat;
|
|
case 'BANK':
|
|
return C2cPaymentMethod.bank;
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
|
|
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 paymentMethodText {
|
|
switch (paymentMethod) {
|
|
case C2cPaymentMethod.alipay:
|
|
return '支付宝';
|
|
case C2cPaymentMethod.wechat:
|
|
return '微信';
|
|
case C2cPaymentMethod.bank:
|
|
return '银行卡';
|
|
default:
|
|
return '未设置';
|
|
}
|
|
}
|
|
|
|
/// 是否有收款信息
|
|
bool get hasPaymentInfo => paymentMethod != null && paymentAccount != null;
|
|
|
|
/// 获取付款剩余时间(秒)
|
|
int? get paymentRemainingSeconds {
|
|
if (paymentDeadline == null) return null;
|
|
final remaining = paymentDeadline!.difference(DateTime.now()).inSeconds;
|
|
return remaining > 0 ? remaining : 0;
|
|
}
|
|
|
|
/// 获取确认收款剩余时间(秒)
|
|
int? get confirmRemainingSeconds {
|
|
if (confirmDeadline == null) return null;
|
|
final remaining = confirmDeadline!.difference(DateTime.now()).inSeconds;
|
|
return remaining > 0 ? remaining : 0;
|
|
}
|
|
|
|
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,
|
|
);
|
|
}
|
|
}
|