master
cody 9 months ago
parent 0589d4b0e5
commit 872bcd397b

@ -82,65 +82,63 @@ class VisitController extends CommonController
try {
if (isset($all['id'])) {
$model = Visit::find($all['id']);
$model->fill($all);
$model->save();
VisitLog::add('', $this->getUser(), $model->id, isset($all['id']) ? '更新拜访记录' : '新增拜访记录');
DB::commit();
// 当状态为取消(status=5)时,给被访人发送取消邮件
if (isset($all['audit_status']) && $all['audit_status'] == Visit::AUDIT_STATUS_CANCELLED) {
VisitAudit::emailCancelNotify($model);
}
} else {
// 新增拜访
$model = new Visit();
$all['user_id'] = $this->getUserId();
$all['code'] = randStr(6, true);
}
$model->fill($all);
$model->save();
// 创建时候审核流程写入
// 被访问做第一级审核
VisitAudit::create([
'visit_id' => $model->id,
'audit_admin_id' => $all['accompany_id'],
'status' => 0,
'level' => 0
]);
$area = VisitArea::find($all['visit_area_id']);
if ($area->audit_admin && !isset($all['id'])) {
// 其他按设置审核
$audit_admin = collect($area->audit_admin)->sortBy('level');
foreach ($audit_admin as $key => $item) {
if (empty($item['admin_id'])) {
// 上级审核
$admin = Admin::find($all['accept_admin_id']);
if (empty($admin->department_id)) {
return $this->fail([ResponseCode::ERROR_BUSINESS, '接待人部门不存在']);
$model->fill($all);
$model->save();
// 创建时候审核流程写入
// 被访问做第一级审核
VisitAudit::create([
'visit_id' => $model->id,
'audit_admin_id' => $all['accompany_id'],
'status' => 0,
'level' => 0
]);
$area = VisitArea::find($all['visit_area_id']);
if ($area->audit_admin && !isset($all['id'])) {
// 其他按设置审核
$audit_admin = collect($area->audit_admin)->sortBy('level');
foreach ($audit_admin as $key => $item) {
if (empty($item['admin_id'])) {
// 上级审核
$admin = Admin::find($all['accept_admin_id']);
if (empty($admin->department_id)) {
return $this->fail([ResponseCode::ERROR_BUSINESS, '接待人部门不存在']);
}
$department = Department::find($admin->department_id);
if (empty($department->manager_id)) {
return $this->fail([ResponseCode::ERROR_BUSINESS, '接待人部门不存在负责人']);
}
$item['admin_id'] = $department->manager_id;
}
$department = Department::find($admin->department_id);
if (empty($department->manager_id)) {
return $this->fail([ResponseCode::ERROR_BUSINESS, '接待人部门不存在负责人']);
// 判断不能重复
if ($item['admin_id'] == $all['accept_admin_id']) {
continue;
}
$item['admin_id'] = $department->manager_id;
VisitAudit::create([
'visit_id' => $model->id,
'audit_admin_id' => $item['admin_id'],
'status' => 0,
'level' => $item['level'] + 1
]);
}
// 判断不能重复
if ($item['admin_id'] == $all['accept_admin_id']) {
continue;
}
VisitAudit::create([
'visit_id' => $model->id,
'audit_admin_id' => $item['admin_id'],
'status' => 0,
'level' => $item['level'] + 1
]);
}
VisitLog::add('', $this->getUser(), $model->id, isset($all['id']) ? '更新拜访记录' : '新增拜访记录');
DB::commit();
// 邮件通知第一个审核人
VisitAudit::emailNextAudit($model, -1);
}
VisitLog::add('', $this->getUser(), $model->id, isset($all['id']) ? '更新拜访记录' : '新增拜访记录');
// 被访人信息
$acceptAdmin = Admin::find($all['accept_admin_id']);
// 邮件通知被访人
$visitData = [
'date' => $all['date'],
'name' => $all['name'],
'mobile' => $all['mobile'],
'reason' => $all['reason'] ?? ''
];
$acceptAdmin->notify(new VisitEmailNotify($visitData));
// 邮件通知第一个审核人
VisitAudit::emailNextAudit($model, -1);
DB::commit();
return $this->success('更新成功');
} catch (\Exception $exception) {
DB::rollBack();

@ -3,6 +3,7 @@
namespace App\Models;
use App\Notifications\AuditEmailNotify;
use App\Notifications\CancelEmailNotify;
class VisitAudit extends SoftDeletesModel
{
@ -19,7 +20,7 @@ class VisitAudit extends SoftDeletesModel
}
/**
* 邮件通知下一个审核人
* 邮件通知下一个审核人审核
*/
public static function emailNextAudit($visit, $nowVisitAuditLevel = -1)
{
@ -71,4 +72,36 @@ class VisitAudit extends SoftDeletesModel
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;
}
}

@ -0,0 +1,56 @@
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class CancelEmailNotify extends Notification
{
use Queueable;
protected $visitData;
/**
* Create a new notification instance.
*
* @param array $visitData
*/
public function __construct($visitData)
{
$this->visitData = $visitData;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$visitData = $this->visitData;
return (new MailMessage)
->subject('拜访预约取消通知 - ' . $visitData['name'])
->greeting('您好 ' . $notifiable->name . '')
->line('访客 ' . $visitData['name'] . ' 原预约于 ' . $visitData['date'] . ' 的拜访已取消。')
->line('访客联系电话:' . $visitData['mobile'])
->line('拜访事由:' . ($visitData['reason'] ?? '无'))
->line('如有疑问,请联系访客确认。');
}
}
Loading…
Cancel
Save