fix: 修复会签场景下消息卡片更新问题
- 添加 updateMessageCardsForPartialApprove 方法处理会签部分通过 - 会签一人通过后,其他人的消息卡片显示进度并保留按钮 - 修复 Dockerfile 构建顺序问题 - 修复前端类型定义问题 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
<?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";
|
||||
Reference in New Issue
Block a user