126 lines
4.4 KiB
PHP
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";
|