feat: 添加消息卡片更新功能,支持或签/单人审批场景
新增功能: 1. 创建 feishu_message 表,存储消息与审批订单/节点/用户的映射关系 2. 发送审批通知时保存 message_id 3. 审批完成后自动更新其他审批人的消息卡片 使用场景: - 或签(or_approve):一人通过后,更新其他审批人的消息卡片 - 单人审批(approver):一人通过后,更新其他审批人的消息卡片 - 拒绝(reject):拒绝后更新所有其他审批人的消息卡片 技术细节: - FeishuMessage 模型:管理消息映射 - FeishuNotificationService::updateMessageCards():更新消息卡片 - ApprovalService:审批完成后调用消息更新逻辑 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -111,6 +111,22 @@ class ApprovalService
|
||||
|
||||
// 判断节点是否完成
|
||||
if ($this->isNodeCompleted($order->id, $currentNode->id)) {
|
||||
// 对于或签和单人审批,更新其他审批人的消息卡片
|
||||
if ($currentNode->type === ApprovalNode::TYPE_OR_APPROVE || $currentNode->type === 'approver') {
|
||||
$approver = User::find($approverId);
|
||||
$approverName = $approver ? $approver->name : '未知';
|
||||
|
||||
if ($this->notificationService) {
|
||||
$this->notificationService->updateMessageCards(
|
||||
$order->id,
|
||||
$currentNode->id,
|
||||
$approverId,
|
||||
'approved',
|
||||
$approverName
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 移动到下一节点
|
||||
$nextNodes = $this->getNextNodes($order->flow, $currentNode->order);
|
||||
|
||||
@@ -178,6 +194,20 @@ class ApprovalService
|
||||
'comment' => $comment,
|
||||
]);
|
||||
|
||||
// 更新其他审批人的消息卡片(拒绝时所有人都需要更新)
|
||||
$approver = User::find($approverId);
|
||||
$approverName = $approver ? $approver->name : '未知';
|
||||
|
||||
if ($this->notificationService && $currentNode) {
|
||||
$this->notificationService->updateMessageCards(
|
||||
$order->id,
|
||||
$currentNode->id,
|
||||
$approverId,
|
||||
'rejected',
|
||||
$approverName
|
||||
);
|
||||
}
|
||||
|
||||
// 更新状态为已拒绝
|
||||
$order->status = ApprovalOrder::STATUS_REJECTED;
|
||||
$order->current_nodes = [];
|
||||
@@ -498,6 +528,9 @@ class ApprovalService
|
||||
|
||||
error_log("🔔 通知下一节点审批人: order_id={$order->id}, approverIds=" . json_encode($approverIds));
|
||||
|
||||
// 获取第一个下一节点的 ID(用于消息映射)
|
||||
$nextNodeId = $nextNodes[0]['id'] ?? null;
|
||||
|
||||
// 为每个审批人发送通知
|
||||
foreach ($approverIds as $approverId) {
|
||||
try {
|
||||
@@ -511,6 +544,7 @@ class ApprovalService
|
||||
'content' => "**申请标题**: {$order->title}\n**申请人**: {$order->applicant->name}",
|
||||
'url' => $detailUrl,
|
||||
'order_id' => $order->id,
|
||||
'node_id' => $nextNodeId, // 添加节点ID用于保存消息映射
|
||||
]);
|
||||
error_log("✅ 审批人通知成功: approver_id={$approverId}");
|
||||
} catch (\Exception $e) {
|
||||
|
||||
Reference in New Issue
Block a user