You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.1 KiB

11 months ago
<?php
namespace App\Models;
11 months ago
use App\Notifications\AuditEmailNotify;
11 months ago
class VisitAudit extends SoftDeletesModel
{
11 months ago
protected $guarded = ['id'];
11 months ago
public function visit()
{
11 months ago
return $this->hasOne(Visit::class, 'id', 'visit_id');
11 months ago
}
public function auditAdmin()
{
11 months ago
return $this->hasOne(Admin::class, 'id', 'audit_admin_id');
11 months ago
}
11 months ago
/**
* 邮件通知下一个审核人
*/
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));
11 months ago
return true;
}
11 months ago
11 months ago
}