From d1a52e74a0b33d733676f91d78e59d791230749e Mon Sep 17 00:00:00 2001 From: hailin Date: Fri, 9 Jan 2026 02:03:22 -0800 Subject: [PATCH] =?UTF-8?q?fix(mobile-app):=20=E4=BF=AE=E5=A4=8D=E8=AE=A4?= =?UTF-8?q?=E7=A7=8D=E5=90=91=E5=AF=BC=E5=BE=85=E5=8A=9E=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E6=AD=A3=E7=A1=AE=E6=A0=87=E8=AE=B0=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:用户完成认种并签署合同后,ADOPTION_WIZARD待办操作没有被标记为完成, 导致用户被卡在待办操作页面无法进入App。 原因:原来的检查逻辑只检查是否有"待签合同",当用户已签署合同后, pendingTasks为空,返回false,导致待办操作无法完成。 修复方案: - 改为检查用户是否有已支付的认种订单(PAID/FUND_ALLOCATED状态) - 通过比较订单创建时间和待办操作创建时间来判断 - 订单在待办操作之后创建 → 已完成 - 订单在待办操作之前但相差不超过24小时 → 也认为已完成(兼容延迟) - 保留待签合同的备用检查逻辑 影响范围:仅影响ADOPTION_WIZARD待办操作的完成检测 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../pages/pending_actions_page.dart | 48 ++++++++++++++++--- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/frontend/mobile-app/lib/features/pending_actions/presentation/pages/pending_actions_page.dart b/frontend/mobile-app/lib/features/pending_actions/presentation/pages/pending_actions_page.dart index 9835e4f9..295468d3 100644 --- a/frontend/mobile-app/lib/features/pending_actions/presentation/pages/pending_actions_page.dart +++ b/frontend/mobile-app/lib/features/pending_actions/presentation/pages/pending_actions_page.dart @@ -5,6 +5,7 @@ import '../../../../core/di/injection_container.dart'; import '../../../../core/services/pending_action_service.dart'; import '../../../../core/services/contract_signing_service.dart'; import '../../../../core/services/reward_service.dart'; +import '../../../../core/services/planting_service.dart'; import '../../../../routes/route_paths.dart'; import '../../../kyc/data/kyc_service.dart'; import 'special_deduction_page.dart'; @@ -266,14 +267,47 @@ class _PendingActionsPageState extends ConsumerState { return false; case 'ADOPTION_WIZARD': - // 检查是否有待签署的合同(认种完成后会生成合同) - // 如果有待签合同,说明认种已完成 - final contractService = ref.read(contractSigningServiceProvider); - final pendingTasks = await contractService.getPendingTasks(); - if (pendingTasks.isNotEmpty) { - debugPrint('[PendingActionsPage] 存在待签合同,认种向导已完成'); - return true; + // 检查用户是否有已完成支付的认种订单 + // 通过检查订单状态(PAID/FUND_ALLOCATED)来判断 + final plantingService = ref.read(plantingServiceProvider); + try { + final orders = await plantingService.getMyOrders(page: 1, pageSize: 10); + for (final order in orders) { + // 检查订单是否已支付或资金已分配 + final isCompleted = order.status == PlantingOrderStatus.paid || + order.status == PlantingOrderStatus.fundAllocated; + if (isCompleted) { + // 检查订单是否在待办操作创建之后创建的 + // 这样可以支持用户多次执行认种向导 + if (order.createdAt.isAfter(action.createdAt)) { + debugPrint('[PendingActionsPage] 用户在待办操作后完成了认种订单 ${order.orderNo},认种向导已完成'); + return true; + } + // 如果订单在待办操作之前但相差不超过24小时,也认为是同一次认种 + // 这是为了兼容待办操作创建有延迟的情况 + final timeDiff = action.createdAt.difference(order.createdAt); + if (timeDiff.inHours < 24) { + debugPrint('[PendingActionsPage] 用户有近期完成的认种订单 ${order.orderNo}(相差${timeDiff.inHours}小时),认种向导已完成'); + return true; + } + } + } + } catch (e) { + debugPrint('[PendingActionsPage] 检查认种订单失败: $e'); } + + // 备用检查:是否有待签合同(说明认种已完成,只是还没签合同) + try { + final contractService = ref.read(contractSigningServiceProvider); + final pendingTasks = await contractService.getPendingTasks(); + if (pendingTasks.isNotEmpty) { + debugPrint('[PendingActionsPage] 存在待签合同,认种向导已完成'); + return true; + } + } catch (e) { + debugPrint('[PendingActionsPage] 检查待签合同失败: $e'); + } + return false; // 其他操作类型目前不做预检查