From 8c31dee000d0f3abe27c8c819facf309c81a0c5d Mon Sep 17 00:00:00 2001 From: hailin Date: Sat, 31 Jan 2026 05:41:14 -0800 Subject: [PATCH] =?UTF-8?q?fix(c2c):=20=E4=BF=AE=E5=A4=8D=E4=B9=B0?= =?UTF-8?q?=E6=96=B9=E5=BE=85=E4=BB=98=E6=AC=BE=E9=A1=B5=E9=9D=A2=E7=81=B0?= =?UTF-8?q?=E8=89=B2=E6=97=A0=E6=B3=95=E6=93=8D=E4=BD=9C=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: c2c_order_model.dart 的 _parsePaymentMethod 不识别 GREEN_POINTS, 导致 paymentMethod=null → hasPaymentInfo=false → 收款信息卡片隐藏 → 页面不可操作 前端修复: - C2cPaymentMethod 枚举增加 greenPoints,解析器支持 GREEN_POINTS - 支持逗号分隔的多支付方式字符串(取第一个作为主要方式) - 订单详情页增加绿积分图标和卖方 Kava 地址显示(买方可复制) 后端修复: - takeOrder() 接买单时自动获取卖方 Kava 地址写入 sellerKavaAddress - 买方在订单详情页可看到卖方 Kava 地址用于转绿积分 Co-Authored-By: Claude Opus 4.5 --- .../src/application/services/c2c.service.ts | 7 ++++++- .../lib/data/models/c2c_order_model.dart | 15 +++++++++++---- .../pages/c2c/c2c_order_detail_page.dart | 10 ++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/backend/services/trading-service/src/application/services/c2c.service.ts b/backend/services/trading-service/src/application/services/c2c.service.ts index af0c0773..9f3efd84 100644 --- a/backend/services/trading-service/src/application/services/c2c.service.ts +++ b/backend/services/trading-service/src/application/services/c2c.service.ts @@ -318,12 +318,17 @@ export class C2cService { paymentDeadline, }; - // 如果是买单,接单方提供收款信息 + // 如果是买单,接单方(卖方)提供收款信息 if (order.type === C2C_ORDER_TYPE.BUY) { updateData.paymentMethod = options?.paymentMethod; updateData.paymentAccount = options?.paymentAccount; updateData.paymentQrCode = options?.paymentQrCode; updateData.paymentRealName = options?.paymentRealName; + // 获取卖方(taker)Kava 地址,买方需要用它来转绿积分 + const takerKavaAddress = await this.identityClient.getUserKavaAddress(takerAccountSequence); + if (takerKavaAddress) { + updateData.sellerKavaAddress = takerKavaAddress; + } } const updatedOrder = await this.c2cOrderRepository.updateStatus(orderNo, C2C_ORDER_STATUS.MATCHED as any, updateData); diff --git a/frontend/mining-app/lib/data/models/c2c_order_model.dart b/frontend/mining-app/lib/data/models/c2c_order_model.dart index 8d96d4b6..1d8a9c4f 100644 --- a/frontend/mining-app/lib/data/models/c2c_order_model.dart +++ b/frontend/mining-app/lib/data/models/c2c_order_model.dart @@ -16,9 +16,10 @@ enum C2cOrderStatus { /// C2C收款方式 enum C2cPaymentMethod { - alipay, // 支付宝 - wechat, // 微信 - bank, // 银行卡 + greenPoints, // 绿积分 + alipay, // 支付宝 + wechat, // 微信 + bank, // 银行卡 } /// C2C订单模型 @@ -164,7 +165,11 @@ class C2cOrderModel { static C2cPaymentMethod? _parsePaymentMethod(String? method) { if (method == null) return null; - switch (method.toUpperCase()) { + // 支持逗号分隔的多种支付方式(如 "GREEN_POINTS,ALIPAY"),取第一个作为主要方式 + final primary = method.split(',').first.trim().toUpperCase(); + switch (primary) { + case 'GREEN_POINTS': + return C2cPaymentMethod.greenPoints; case 'ALIPAY': return C2cPaymentMethod.alipay; case 'WECHAT': @@ -209,6 +214,8 @@ class C2cOrderModel { /// 收款方式文本 String get paymentMethodText { switch (paymentMethod) { + case C2cPaymentMethod.greenPoints: + return '绿积分'; case C2cPaymentMethod.alipay: return '支付宝'; case C2cPaymentMethod.wechat: diff --git a/frontend/mining-app/lib/presentation/pages/c2c/c2c_order_detail_page.dart b/frontend/mining-app/lib/presentation/pages/c2c/c2c_order_detail_page.dart index b54f0a07..26fc9bf6 100644 --- a/frontend/mining-app/lib/presentation/pages/c2c/c2c_order_detail_page.dart +++ b/frontend/mining-app/lib/presentation/pages/c2c/c2c_order_detail_page.dart @@ -403,6 +403,14 @@ class _C2cOrderDetailPageState extends ConsumerState { value: order.paymentRealName!, ), + // 卖家 Kava 地址(绿积分转账目标地址) + if (order.sellerKavaAddress != null && isBuyer) + _buildPaymentInfoRow( + label: 'Kava 地址', + value: order.sellerKavaAddress!, + canCopy: true, + ), + // 付款金额 const SizedBox(height: 12), Container( @@ -660,6 +668,8 @@ class _C2cOrderDetailPageState extends ConsumerState { IconData _getPaymentIcon(C2cPaymentMethod? method) { switch (method) { + case C2cPaymentMethod.greenPoints: + return Icons.eco; case C2cPaymentMethod.alipay: return Icons.account_balance_wallet; case C2cPaymentMethod.wechat: