From 544598258cb9ee22ce60a65bdb24979901575c99 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Fri, 19 Sep 2025 14:02:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Admin/GateController.php | 5 -- .../Admin/VisitAuditController.php | 52 ++++++++--------- .../Controllers/Mobile/CommonController.php | 53 ----------------- .../Controllers/Mobile/VisitController.php | 19 ++++--- app/Models/VisitAudit.php | 57 ++++++++++++++++++- app/Notifications/AuditEmailNotify.php | 2 - app/Notifications/VisitEmailNotify.php | 1 - 7 files changed, 92 insertions(+), 97 deletions(-) diff --git a/app/Http/Controllers/Admin/GateController.php b/app/Http/Controllers/Admin/GateController.php index 85ca655..5f8cbeb 100644 --- a/app/Http/Controllers/Admin/GateController.php +++ b/app/Http/Controllers/Admin/GateController.php @@ -132,11 +132,6 @@ class GateController extends CommonController if ($all['type'] == 1) { // 入场 Visit::where('code', $all['code'])->update(['audit_status' => 3, 'person_no' => $all['person_no'] ?? '', 'car_no' => $all['car_no'] ?? '']); - // 通知被访人 - $vars = ['date' => $check->date, 'name' => $check->name, 'phone_number' => $check->mobile]; - $template_id = 'zPtka4'; - $acceptAdmin = Admin::find($check->accept_admin_id); - sms($acceptAdmin->mobile, $vars, $template_id); } if ($all['type'] == 2) { Visit::where('code', $all['code'])->update(['audit_status' => 4]); diff --git a/app/Http/Controllers/Admin/VisitAuditController.php b/app/Http/Controllers/Admin/VisitAuditController.php index 500d4ce..8217397 100644 --- a/app/Http/Controllers/Admin/VisitAuditController.php +++ b/app/Http/Controllers/Admin/VisitAuditController.php @@ -163,36 +163,32 @@ class VisitAuditController extends CommonController $auditResult = '通过'; Visit::where('id', $all['visit_id'])->update(['audit_status' => 1]); // 发短信 - if (!empty($acceptAdmin->mobile)) { - $vars = ['date' => $visit->date, 'name' => $visit->name, 'phone_number' => $visit->mobile]; - $template_id = '5wReg1'; - sms($acceptAdmin->mobile, $vars, $template_id); - } +// if (!empty($acceptAdmin->mobile)) { +// $vars = ['date' => $visit->date, 'name' => $visit->name, 'phone_number' => $visit->mobile]; +// $template_id = '5wReg1'; +// sms($acceptAdmin->mobile, $vars, $template_id); +// } } if ($auditResult) { - // 发通知订阅消息 - $templateData = [ - 'date1' => [ - 'value' => $visit->date - ], - 'name3' => [ - 'value' => $acceptAdmin->name, - ], - 'thing4' => [ - 'value' => $visit->name - ], - 'thing13' => [ - 'value' => $auditResult, - ], - 'thing9' => [ - 'value' => $visit->company_name - ], - ]; - Visit::subMsg('IczaKkCmwf55tAAzCcxb_fbbf5L25SWrSKvaBrkIyk4', $user->openid, $templateData, $all['visit_id']); - // 发通知短信消息 - $vars = ['result' => $auditResult]; - $template_id = 'G5W6Y3'; - sms($visit->mobile, $vars, $template_id); +// // 发通知订阅消息 +// $templateData = [ +// 'date1' => [ +// 'value' => $visit->date +// ], +// 'name3' => [ +// 'value' => $acceptAdmin->name, +// ], +// 'thing4' => [ +// 'value' => $visit->name +// ], +// 'thing13' => [ +// 'value' => $auditResult, +// ], +// 'thing9' => [ +// 'value' => $visit->company_name +// ], +// ]; +// Visit::subMsg('IczaKkCmwf55tAAzCcxb_fbbf5L25SWrSKvaBrkIyk4', $user->openid, $templateData, $all['visit_id']); } } // 审核记录 diff --git a/app/Http/Controllers/Mobile/CommonController.php b/app/Http/Controllers/Mobile/CommonController.php index 852b4ed..d44f0a9 100644 --- a/app/Http/Controllers/Mobile/CommonController.php +++ b/app/Http/Controllers/Mobile/CommonController.php @@ -27,57 +27,4 @@ class CommonController extends Controller return $this->guard()->id(); } - /** - * @OA\Get ( - * path="/api/mobile/common/send-sms", - * tags={"小程序-通用"}, - * summary="短信发送", - * description="", - * @OA\Parameter(name="type", in="query", @OA\Schema(type="int"), required=true, description="类型,1参观预约验证码 2活动预约验证码"), - * @OA\Parameter(name="mobile", in="query", @OA\Schema(type="string"), required=true, description="手机号"), - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Response( - * response="200", - * description="" - * ) - * ) - */ - public function sendSms(){ - $all = \request()->all(); - $messages = [ - 'mobile.required' => '手机号必填', - 'mobile.numeric' => '手机号格式错误', - 'type.numeric' => '类型必填', - ]; - $validator = Validator::make($all, [ - 'mobile' => 'required|numeric', - 'type' => 'required', - ], $messages); - if ($validator->fails()) { - return $this->fail([StarterResponseCode::START_ERROR_PARAMETER, implode(',', $validator->errors()->all())]); - } - $key = $all['mobile']; - if($all['type'] == 1){ - // 参观预约验证码 - $key = 'visit_'.$key; - } - if($all['type'] == 2){ - // 参观预约验证码 - $key = 'activity_'.$key; - } - $check = Cache::get($key); - if(isset($check) && time() - $check['time'] <= 60){ - return $this->fail([ResponseCode::ERROR_BUSINESS, '请勿频繁发送']); - } - $code = randStr(4,true); - $template_id = 'Pat5Z3'; - $result = sms($all['mobile'], ['code'=>$code,'minutes'=>5], $template_id); - if($result){ - // 缓存 - Cache::put($key,['code'=>$code,'time'=>time()],5); - return $this->success("发送成功"); - } - return $this->fail([StarterResponseCode::START_ERROR_PARAMETER,"发送失败"]); - } - } diff --git a/app/Http/Controllers/Mobile/VisitController.php b/app/Http/Controllers/Mobile/VisitController.php index 91ef7dd..84746b5 100644 --- a/app/Http/Controllers/Mobile/VisitController.php +++ b/app/Http/Controllers/Mobile/VisitController.php @@ -12,6 +12,7 @@ use App\Models\VisitArea; use App\Models\VisitAudit; use App\Models\VisitLog; use App\Models\VisitTime; +use App\Notifications\VisitEmailNotify; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; @@ -148,13 +149,17 @@ class VisitController extends CommonController 'value' => $accpetDepartment->name ?? '' ], ]; - Visit::subMsg('DmzNRREPFdZrMWconNDdbj_ebtVPRWufq27kRQ25eNg', $this->getUser()->openid, $templateData, $model->id); - // 短信通知被访人 - $vars = ['date' => $all['date'], 'name' => $all['name'], 'phone_number' => $all['mobile']]; - $template_id = '5wReg1'; - sms($acceptAdmin->mobile, $vars, $template_id); - // 短信通知第一个审核人 - VisitAudit::smsNextAudit($model, -1); + Visit::subMsg('OfDFwAIZyXqvPgmc_czIXhveVtp3n_ftyWJEks1DSi4', $this->getUser()->openid, $templateData, $model->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) { diff --git a/app/Models/VisitAudit.php b/app/Models/VisitAudit.php index 1b0dc0c..81ca4f9 100644 --- a/app/Models/VisitAudit.php +++ b/app/Models/VisitAudit.php @@ -2,6 +2,8 @@ namespace App\Models; +use App\Notifications\AuditEmailNotify; + class VisitAudit extends SoftDeletesModel { protected $guarded = ['id']; @@ -45,7 +47,60 @@ class VisitAudit extends SoftDeletesModel $vars = ['date' => $visit->date, 'name' => $visit->name, 'phone_number' => $visit->mobile, 'uname' => $uname]; $template_id = 'QXPs33'; } - sms($mobile, $vars, $template_id); + //sms($mobile, $vars, $template_id); + return true; + } + + /** + * 邮件通知下一个审核人 + */ + 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; } diff --git a/app/Notifications/AuditEmailNotify.php b/app/Notifications/AuditEmailNotify.php index cf467d2..23217f2 100644 --- a/app/Notifications/AuditEmailNotify.php +++ b/app/Notifications/AuditEmailNotify.php @@ -55,7 +55,6 @@ class AuditEmailNotify extends Notification ->line('您有一个新的拜访申请需要审核,访客 ' . $visitData['name'] . ' 预约于 ' . $visitData['date'] . ' 到访。') ->line('访客联系电话:' . $visitData['mobile']) ->line('拜访事由:' . ($visitData['reason'] ?? '无')) - ->action('立即审核', url('/admin/visit-audits')) ->line('请及时审核此拜访申请。'); } else { // 后续审核人的邮件 @@ -65,7 +64,6 @@ class AuditEmailNotify extends Notification ->line('拜访申请 ' . $visitData['name'] . ' 预约于 ' . $visitData['date'] . ' 的审核已流转到您这里,上一级审核人:' . ($visitData['previous_admin'] ?? '') . '。') ->line('访客联系电话:' . $visitData['mobile']) ->line('拜访事由:' . ($visitData['reason'] ?? '无')) - ->action('立即审核', url('/admin/visit-audits')) ->line('请及时处理此审核流转。'); } } diff --git a/app/Notifications/VisitEmailNotify.php b/app/Notifications/VisitEmailNotify.php index 49c9aa2..48bb41d 100644 --- a/app/Notifications/VisitEmailNotify.php +++ b/app/Notifications/VisitEmailNotify.php @@ -50,7 +50,6 @@ class VisitEmailNotify extends Notification ->line('您有一个新的拜访预约,访客 ' . $visitData['name'] . ' 预约于 ' . $visitData['date'] . ' 到访。') ->line('访客联系电话:' . $visitData['mobile']) ->line('拜访事由:' . ($visitData['reason'] ?? '无')) - ->action('查看详情', url('/admin/visits')) ->line('请及时处理此拜访预约。'); } }