feat: 完善业务审批消息链路

修改内容:
1. TestController - 添加 real 参数支持发送真实业务通知
2. BusinessTripService.sendApprovalNotification() - 传递 order_id

业务流程:
1. 用户创建申请 → 审批人收到带按钮的通知
2. 点击"通过"/"拒绝"按钮 → 跳转到审批详情页
3. 自动弹出确认框 → 完成审批
4. 通知下一节点审批人/申请人

按钮链接:
- 通过/拒绝:/approval/detail/{order_id}?action=approve|reject
- 查看详情:/business-trip/detail/{business_id}

测试命令:
- 测试消息: /api/v1/test/notification?user_id=1&order_id=64
- 真实业务: /api/v1/test/notification?user_id=1&order_id=64&real=1

相关文件:
- backend/app/controller/TestController.php
- backend/app/service/BusinessTripService.php

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-02-26 19:07:09 +08:00
parent 7ee92d68fe
commit 68e0c261d8
2 changed files with 75 additions and 14 deletions
+17 -3
View File
@@ -285,7 +285,20 @@ class BusinessTripService
$notificationService = new \app\service\FeishuNotificationService();
// 构建详情链接
// 获取 approval_order_id
$approvalOrder = \app\model\ApprovalOrder::where('business_type', 'business_trip')
->where('business_id', $businessTrip->id)
->first();
if (!$approvalOrder) {
error_log("⚠️ 未找到审批单,无法发送通知");
return;
}
// 构建审批链接(使用 approval_order 的 ID)
$approvalUrl = "https://xsm.dev.hnxinyouhe.com/approval/detail/{$approvalOrder->id}";
// 构建业务详情链接(用于查看详情按钮)
$detailUrl = "https://xsm.dev.hnxinyouhe.com/business-trip/detail/{$businessTrip->id}";
// 构建内容
@@ -293,7 +306,7 @@ class BusinessTripService
$content .= "**目的地**: {$businessTrip->destination}\n";
$content .= "**时间**: {$businessTrip->start_date} 至 {$businessTrip->end_date}";
// 通知审批人
// 通知审批人(带审批按钮)
foreach ($approverIds as $approverId) {
try {
error_log("📧 通知审批人: approver_id={$approverId}");
@@ -305,6 +318,7 @@ class BusinessTripService
'type' => '出差申请',
'content' => $content,
'url' => $detailUrl,
'order_id' => $approvalOrder->id, // 添加 order_id 以显示审批按钮
]);
error_log("✅ 审批人通知成功: approver_id={$approverId}");
} catch (\Exception $e) {
@@ -312,7 +326,7 @@ class BusinessTripService
}
}
// 通知抄送人
// 通知抄送人(不带审批按钮)
foreach ($ccUserIds as $ccUserId) {
try {
error_log("📧 通知抄送人: cc_user_id={$ccUserId}");