#!/usr/bin/env php getMessage() . "\n\n"; exit(1); } // 检查队列表 echo "[2] 检查队列表...\n"; try { $count = \think\Db::name('icbc_queue')->count(); echo "✓ 队列表存在,当前有 {$count} 条记录\n\n"; } catch (\Exception $e) { echo "✗ 队列表不存在或有错误: " . $e->getMessage() . "\n\n"; exit(1); } // 查看各状态任务数量 echo "[3] 查看任务状态分布...\n"; $statusMap = [ 0 => '待处理', 1 => '处理中', 2 => '成功', 3 => '失败' ]; foreach ($statusMap as $status => $name) { $count = \think\Db::name('icbc_queue')->where('status', $status)->count(); echo " {$name}(status={$status}): {$count} 条\n"; } echo "\n"; // 查看卡住的任务 echo "[4] 查看卡在'处理中'超过5分钟的任务...\n"; $stuckTasks = \think\Db::name('icbc_queue') ->where('status', 1) ->where('updatetime', '<', time() - 300) ->select(); if (count($stuckTasks) > 0) { echo " 发现 " . count($stuckTasks) . " 个卡住的任务:\n"; foreach ($stuckTasks as $task) { echo " ID: {$task['id']}, 手机号: {$task['mobile_phone']}, "; echo "更新时间: " . date('Y-m-d H:i:s', $task['updatetime']) . "\n"; } // 询问是否修复 echo "\n 是否将这些任务重置为待处理状态? (y/n): "; $handle = fopen("php://stdin", "r"); $line = fgets($handle); if(trim($line) == 'y' || trim($line) == 'Y') { $affected = \think\Db::name('icbc_queue') ->where('status', 1) ->where('updatetime', '<', time() - 300) ->update([ 'status' => 0, 'error_msg' => '任务处理超时,已重置为待处理 - ' . date('Y-m-d H:i:s') ]); echo " ✓ 已重置 {$affected} 个任务\n"; } fclose($handle); } else { echo " ✓ 没有卡住的任务\n"; } echo "\n"; // 检查必要的类和函数 echo "[5] 检查依赖...\n"; include_once EXTEND_PATH . 'icbc/DefaultIcbcClient.php'; if (class_exists('\DefaultIcbcClient')) { echo " ✓ DefaultIcbcClient 类存在\n"; } else { echo " ✗ DefaultIcbcClient 类不存在\n"; } if (function_exists('createUniqueNo')) { echo " ✓ createUniqueNo 函数存在\n"; $testId = createUniqueNo('test', time()); echo " 测试生成: {$testId}\n"; } else { echo " ✗ createUniqueNo 函数不存在\n"; } echo "\n"; // 显示最近的失败任务 echo "[6] 显示最近5条失败的任务...\n"; $failedTasks = \think\Db::name('icbc_queue') ->where('status', 3) ->order('id', 'desc') ->limit(5) ->select(); if (count($failedTasks) > 0) { foreach ($failedTasks as $task) { echo " ID: {$task['id']}\n"; echo " 手机号: {$task['mobile_phone']}\n"; echo " 积分: {$task['integral_value']}\n"; echo " 重试次数: {$task['retry_count']}\n"; echo " 错误信息: {$task['error_msg']}\n"; echo " ---\n"; } } else { echo " ✓ 没有失败的任务\n"; } echo "\n"; // 测试调用 echo "[7] 是否测试调用工行接口? (y/n): "; $handle = fopen("php://stdin", "r"); $line = fgets($handle); if(trim($line) == 'y' || trim($line) == 'Y') { echo " 执行测试调用...\n"; $testPhone = '15388010006'; $testScore = 1; // 插入测试任务 $testId = \think\Db::name('icbc_queue')->insertGetId([ 'mobile_phone' => $testPhone, 'integral_value' => $testScore, 'integral_type' => '10938', 'nickname' => '测试用户', 'status' => 0, 'retry_count' => 0, 'createtime' => time(), 'updatetime' => time(), ]); echo " 已创建测试任务 ID: {$testId}\n"; echo " 请运行: php think icbc_queue\n"; } fclose($handle); echo "\n==========================================\n"; echo "测试完成\n"; echo "==========================================\n";