hasOne(Visit::class, 'id', 'visit_id'); } public function auditAdmin() { return $this->hasOne(Admin::class, 'id', 'audit_admin_id'); } /** * 邮件通知下一个审核人审核 */ public static function emailNextAudit($visit, $nowVisitAuditLevel = -1) { // 找到下一个审核人 if ($nowVisitAuditLevel == -1) { // 通知第一个审核人 $admin = Admin::where('id', function ($query) use ($visit) { $query->select('audit_admin_id') ->from('visit_audits') ->where('visit_id', $visit->id) ->orderBy('level', 'asc') ->limit(1); })->first(); $isFirstAudit = true; } else { // 通知下一级审核人 $admin = Admin::where('id', function ($query) use ($visit, $nowVisitAuditLevel) { $query->select('audit_admin_id') ->from('visit_audits') ->where('visit_id', $visit->id) ->where('level', '>', $nowVisitAuditLevel) ->orderBy('level', 'asc') ->limit(1); })->first(); $isFirstAudit = false; } if (empty($admin)) { return false; } // 准备邮件数据 $visitData = [ 'date' => $visit->date, 'name' => $visit->name, 'mobile' => $visit->mobile, 'reason' => $visit->reason ?? '' ]; if (!$isFirstAudit) { // 获取上一级审核人姓名 $previousAdmin = Admin::where('id', $visit->accept_admin_id)->value('name'); $visitData['previous_admin'] = $previousAdmin; } // 发送邮件通知 $admin->notify(new AuditEmailNotify($visitData, $isFirstAudit)); return true; } /** * 邮件通知被访人拜访已取消 */ public static function emailCancelNotify($visit) { // 获取被访人(第一个审核人,level最小的) $admin = Admin::where('id', function ($query) use ($visit) { $query->select('audit_admin_id') ->from('visit_audits') ->where('visit_id', $visit->id) ->orderBy('level', 'asc') ->limit(1); })->first(); if (empty($admin)) { return false; } // 准备邮件数据 $visitData = [ 'date' => $visit->date, 'name' => $visit->name, 'mobile' => $visit->mobile, 'reason' => $visit->reason ?? '' ]; // 发送取消邮件通知 $admin->notify(new CancelEmailNotify($visitData)); return true; } }