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

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

126 lines
4.4 KiB
PHP

<?php
/**
* 会签场景测试脚本
*
* 测试场景:
* 1. 选择3个审批人提交申请
* 2. 第一个审批人通过 → 状态仍为 pending
* 3. 第二个审批人通过 → 状态仍为 pending
* 4. 第三个审批人通过 → 状态变为 approved
*/
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\service\BusinessTripService;
use app\service\ApprovalService;
use support\Db;
echo "=== 会签场景测试 ===\n\n";
// 获取测试用户
$applicant = User::where('status', 1)->first();
if (!$applicant) {
echo "❌ 没有找到用户\n";
exit(1);
}
echo "👤 申请人: {$applicant->name} (ID: {$applicant->id})\n";
// 获取审批人
$approvers = User::where('status', 1)
->where('id', '!=', $applicant->id)
->limit(3)
->get();
if ($approvers->count() < 3) {
echo "❌ 审批人数量不足,需要至少3个\n";
exit(1);
}
echo "👥 审批人: " . $approvers->pluck('name')->join(', ') . "\n\n";
Db::transaction(function () use ($applicant, $approvers) {
$businessTripService = new \app\service\BusinessTripService();
// 1. 创建草稿
echo "【步骤1】创建草稿\n";
$draft = $businessTripService->createDraft($applicant->id, [
'reason' => '会签测试',
'itineraries' => [
[
'start_time' => date('Y-m-d H:i:s'),
'end_time' => date('Y-m-d H:i:s', strtotime('+1 day')),
'departure' => '长沙',
'destination' => '北京',
'transport' => '飞机',
],
],
]);
echo "✅ 草稿创建成功: ID={$draft->id}\n\n";
// 2. 提交申请
echo "【步骤2】提交申请(会签,3个审批人)\n";
$approverIds = $approvers->pluck('id')->toArray();
$businessTrip = $businessTripService->submit($applicant->id, $draft->id, $approverIds, []);
$approvalOrder = $businessTrip->approvalOrder;
echo "✅ 申请提交成功\n";
echo " 订单ID: {$approvalOrder->id}\n";
echo " 当前状态: {$approvalOrder->status}\n";
echo " 当前节点: " . json_encode($approvalOrder->current_nodes) . "\n";
echo " 审批人: " . json_encode($approvalOrder->form_data['approvers'] ?? []) . "\n\n";
// 3. 第一个审批人通过
echo "【步骤3】第一个审批人通过\n";
$approver1 = $approvers[0];
$approvalService = new \app\service\ApprovalService();
$order1 = $approvalService->approve($approvalOrder->id, $approver1->id);
echo " 审批人: {$approver1->name}\n";
echo " 订单状态: {$order1->status}\n";
echo " 审批记录数: " . ApprovalRecord::where('order_id', $order1->id)->where('action', 'approve')->count() . "\n";
echo " 预期: 状态仍为 pending(需要其他人审批)\n\n";
// 4. 第二个审批人通过
echo "【步骤4】第二个审批人通过\n";
$approver2 = $approvers[1];
$order2 = $approvalService->approve($approvalOrder->id, $approver2->id);
echo " 审批人: {$approver2->name}\n";
echo " 订单状态: {$order2->status}\n";
echo " 审批记录数: " . ApprovalRecord::where('order_id', $order2->id)->where('action', 'approve')->count() . "\n";
echo " 预期: 状态仍为 pending(需要最后一人审批)\n\n";
// 5. 第三个审批人通过
echo "【步骤5】第三个审批人通过\n";
$approver3 = $approvers[2];
$order3 = $approvalService->approve($approvalOrder->id, $approver3->id);
echo " 审批人: {$approver3->name}\n";
echo " 订单状态: {$order3->status}\n";
echo " 审批记录数: " . ApprovalRecord::where('order_id', $order3->id)->where('action', 'approve')->count() . "\n";
echo " 预期: 状态变为 approved(所有人都已审批)\n\n";
});
// 6. 检查消息日志
echo "【检查】消息日志\n";
$logCount = \app\model\FeishuMessageLog::where('order_id', $approvalOrder->id)->count();
echo " 消息日志数量: {$logCount}\n";
if ($logCount > 0) {
$logs = \app\model\FeishuMessageLog::where('order_id', $approvalOrder->id)
->orderBy('created_at')
->get();
foreach ($logs as $log) {
echo " - {$log->action}: {$log->status} (user_id={$log->user_id})\n";
}
}
echo "\n=== 测试完成 ===\n";