option('time'); $currentTime = Carbon::now(); // 检查是否到了提醒时间 if ($currentTime->format('H:i') !== $reminderTime) { $this->info("当前时间 {$currentTime->format('H:i')} 不是提醒时间 {$reminderTime},跳过执行"); return; } $this->info("开始检查未核销的拜访预约..."); try { // 获取当天18:00后仍未核销的预约记录 $unusedVisits = Visit::with(['visitArea', 'visitTime', 'acceptAdmin']) ->whereDate('date', Carbon::today()) ->where('audit_status', Visit::AUDIT_STATUS_APPROVED) // 已审核通过但未进厂 ->where(function ($query) use ($currentTime) { // 18:00后的记录 $query->whereHas('visitTime', function ($q) use ($currentTime) { $q->where('end_time', '<=', $currentTime->format('H:i:s')); }); }) ->get(); if ($unusedVisits->isEmpty()) { $this->info('没有需要提醒的未核销预约记录'); return; } $this->info("找到 {$unusedVisits->count()} 条未核销的预约记录"); foreach ($unusedVisits as $visit) { $this->sendReminder($visit); } $this->info('提醒发送完成'); } catch (\Exception $e) { Log::error('发送拜访提醒失败:' . $e->getMessage()); $this->error('发送提醒失败:' . $e->getMessage()); } } /** * 发送提醒 */ private function sendReminder(Visit $visit) { try { // 记录提醒日志 VisitLog::log($visit->id, VisitLog::TYPE_UPDATE, "系统自动提醒:访客 {$visit->name} 预约时间已过,请及时核销"); // 构建提醒消息 $message = "【访客系统提醒】访客 {$visit->name}({$visit->mobile})的预约时间已过,请及时核销。预约编号:{$visit->code}"; // 发送短信提醒给接待人员 if ($visit->acceptAdmin && $visit->acceptAdmin->mobile) { $this->sendSmsReminder($visit->acceptAdmin->mobile, $message); $this->info("已发送短信提醒给接待人员:{$visit->acceptAdmin->name}"); } // 发送短信提醒给访客 if ($visit->mobile) { $visitorMessage = "【访客系统提醒】您的预约时间已过,请及时联系接待人员。预约编号:{$visit->code}"; $this->sendSmsReminder($visit->mobile, $visitorMessage); $this->info("已发送短信提醒给访客:{$visit->name}"); } $this->info("已处理访客:{$visit->name}({$visit->code})"); } catch (\Exception $e) { Log::error("发送访客 {$visit->name} 提醒失败:" . $e->getMessage()); $this->error("发送访客 {$visit->name} 提醒失败:" . $e->getMessage()); } } /** * 发送短信提醒 */ private function sendSmsReminder($mobile, $message) { try { // 这里可以集成实际的短信发送服务 // 例如:阿里云短信、腾讯云短信等 Log::info("发送短信提醒到 {$mobile}:{$message}"); // 模拟短信发送 $this->info("模拟发送短信到 {$mobile}:{$message}"); // 实际项目中可以这样发送: // $smsNotify = new SmsNotify($message); // Notification::route('sms', $mobile)->notify($smsNotify); } catch (\Exception $e) { Log::error("发送短信到 {$mobile} 失败:" . $e->getMessage()); throw $e; } } }