fix(mobile-app): 修复认种向导待办操作无法正确标记完成的问题
问题:用户完成认种并签署合同后,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 <noreply@anthropic.com>
This commit is contained in:
parent
00264a721e
commit
d1a52e74a0
|
|
@ -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<PendingActionsPage> {
|
|||
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;
|
||||
|
||||
// 其他操作类型目前不做预检查
|
||||
|
|
|
|||
Loading…
Reference in New Issue