|
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
namespace App\Models;
|
|
|
|
|
|
|
|
|
|
|
|
use App\Notifications\AuditEmailNotify;
|
|
|
|
|
|
use App\Notifications\CancelEmailNotify;
|
|
|
|
|
|
|
|
|
|
|
|
class VisitAudit extends SoftDeletesModel
|
|
|
|
|
|
{
|
|
|
|
|
|
protected $guarded = ['id'];
|
|
|
|
|
|
|
|
|
|
|
|
public function visit()
|
|
|
|
|
|
{
|
|
|
|
|
|
return $this->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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|