Files
x-server-mobile/backend/test_approval_message.php
T
root e13574f6f1 fix: 修复会签场景下消息卡片更新问题
- 添加 updateMessageCardsForPartialApprove 方法处理会签部分通过
- 会签一人通过后,其他人的消息卡片显示进度并保留按钮
- 修复 Dockerfile 构建顺序问题
- 修复前端类型定义问题

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 10:33:40 +08:00

136 lines
4.5 KiB
PHP

<?php
/**
* 审批和消息模块测试脚本
*
* 使用方法:docker exec x-server-backend php /app/test_approval_message.php
*/
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/support/bootstrap.php';
use app\model\User;
use app\model\ApprovalFlow;
use app\model\ApprovalNode;
use app\model\ApprovalOrder;
use app\model\ApprovalRecord;
use app\model\BusinessTrip;
use app\model\FeishuMessage;
use app\model\FeishuMessageLog;
use app\service\ApprovalService;
use app\service\FeishuNotificationService;
use support\Db;
echo "=== 审批和消息模块测试 ===\n\n";
// 测试1:检查基础数据
echo "【测试1】检查基础数据\n";
echo "-------------------------------------------\n";
$userCount = User::where('status', 1)->count();
echo "✅ 用户数量: {$userCount}\n";
$flow = ApprovalFlow::where('business_type', 'business_trip')->where('status', 1)->first();
if ($flow) {
echo "✅ 审批流程: {$flow->name} (ID: {$flow->id})\n";
$nodes = ApprovalNode::where('flow_id', $flow->id)->get();
foreach ($nodes as $node) {
echo " - 节点: {$node->name}, 类型: {$node->type}, 审批人: " . json_encode($node->approvers) . "\n";
}
} else {
echo "❌ 未找到审批流程\n";
}
// 测试2:检查现有审批订单
echo "\n【测试2】检查现有审批订单\n";
echo "-------------------------------------------\n";
$pendingOrders = ApprovalOrder::where('status', 'pending')->get();
echo "✅ 待审批订单数量: {$pendingOrders->count()}\n";
foreach ($pendingOrders as $order) {
$applicant = User::find($order->applicant_id);
$formData = $order->form_data ?? [];
$approvers = $formData['approvers'] ?? [];
echo " 订单 {$order->id}: {$order->title}\n";
echo " 申请人: {$applicant->name}\n";
echo " 审批人: " . json_encode($approvers) . "\n";
echo " 当前节点: " . json_encode($order->current_nodes) . "\n";
// 检查审批记录
$records = ApprovalRecord::where('order_id', $order->id)->get();
echo " 审批记录数量: {$records->count()}\n";
// 检查消息映射
$messages = FeishuMessage::where('order_id', $order->id)->get();
echo " 消息映射数量: {$messages->count()}\n";
}
// 测试3:验证节点完成逻辑
echo "\n【测试3】验证节点完成逻辑\n";
echo "-------------------------------------------\n";
// 使用反射来测试私有方法
$approvalService = new ApprovalService();
$reflection = new ReflectionClass($approvalService);
$method = $reflection->getMethod('isNodeCompleted');
$method->setAccessible(true);
// 测试订单132(待审批,节点7)
echo "订单132(节点7,会签):\n";
try {
$isCompleted = $method->invoke($approvalService, 132, 7);
echo " 节点是否完成: " . ($isCompleted ? '是' : '否') . "\n";
// 查看审批记录
$records = ApprovalRecord::where('order_id', 132)
->where('node_id', 7)
->where('action', 'approve')
->get();
echo " 已审批人数: {$records->count()}\n";
// 查看form_data中的审批人
$order = ApprovalOrder::find(132);
$formData = $order->form_data ?? [];
$approvers = $formData['approvers'] ?? [];
echo " 需要审批人数: " . count($approvers) . "\n";
echo " 审批人列表: " . json_encode($approvers) . "\n";
} catch (Exception $e) {
echo " ❌ 错误: {$e->getMessage()}\n";
}
// 测试4:检查消息映射
echo "\n【测试4】检查消息映射\n";
echo "-------------------------------------------\n";
$feishuMessages = FeishuMessage::all();
echo "消息映射总数: {$feishuMessages->count()}\n";
// 测试5:检查消息日志
echo "\n【测试5】检查消息日志\n";
echo "-------------------------------------------\n";
$logCount = FeishuMessageLog::count();
echo "消息日志总数: {$logCount}\n";
// 测试6:验证或签场景配置
echo "\n【测试6】验证不同节点类型配置\n";
echo "-------------------------------------------\n";
echo "当前需要测试的场景:\n";
echo "1. 单人审批 (approver): 1人通过即可\n";
echo "2. 会签 (and_approve): 所有人通过\n";
echo "3. 或签 (or_approve): 1人通过即可\n";
echo "\n建议测试步骤:\n";
echo "-------------------------------------------\n";
echo "1. 修改节点类型为 'approver' 或 'or_approve'\n";
echo "2. 选择多个审批人提交申请\n";
echo "3. 测试第一个审批人通过\n";
echo "4. 检查消息日志和消息映射\n";
echo "5. 验证其他审批人的消息是否更新\n";
echo "\n=== 测试完成 ===\n";