first(); return $config ? $config->value : $default; } /** * 设置配置值 */ public static function set($key, $value, $name = null) { $config = self::where('key', $key)->first(); if ($config) { $config->value = $value; if ($name) { $config->name = $name; } $config->save(); } else { self::create([ 'key' => $key, 'value' => $value, 'name' => $name ?: $key, ]); } } /** * 获取系统名称 */ public static function getSystemName() { return self::get(self::KEY_SYSTEM_NAME, '访客管理系统'); } /** * 获取系统Logo */ public static function getSystemLogo() { return self::get(self::KEY_SYSTEM_LOGO); } /** * 获取预约提前天数 */ public static function getVisitAdvanceDays() { return (int) self::get(self::KEY_VISIT_ADVANCE_DAYS, 1); } /** * 获取预约最大天数 */ public static function getVisitMaxDays() { return (int) self::get(self::KEY_VISIT_MAX_DAYS, 30); } /** * 是否必须学习 */ public static function isStudyRequired() { return (bool) self::get(self::KEY_STUDY_REQUIRED, true); } /** * 获取学习有效期 */ public static function getStudyExpireDays() { return (int) self::get(self::KEY_STUDY_EXPIRE_DAYS, 30); } /** * 是否自动审核 */ public static function isAuditAutoApprove() { return (bool) self::get(self::KEY_AUDIT_AUTO_APPROVE, false); } /** * 是否检查黑名单 */ public static function isBlacklistCheckEnabled() { return (bool) self::get(self::KEY_BLACKLIST_CHECK, true); } /** * 是否启用短信通知 */ public static function isSmsEnabled() { return (bool) self::get(self::KEY_SMS_ENABLED, true); } /** * 是否启用邮件通知 */ public static function isEmailEnabled() { return (bool) self::get(self::KEY_EMAIL_ENABLED, true); } /** * 是否启用微信通知 */ public static function isWechatEnabled() { return (bool) self::get(self::KEY_WECHAT_ENABLED, true); } /** * 获取门岗二维码有效期(小时) */ public static function getGateQrExpireHours() { return (int) self::get(self::KEY_GATE_QR_EXPIRE, 24); } /** * 获取访问提醒时间(小时) */ public static function getVisitReminderHours() { return (int) self::get(self::KEY_VISIT_REMINDER_HOURS, 2); } /** * 是否系统维护模式 */ public static function isSystemMaintenance() { return (bool) self::get(self::KEY_SYSTEM_MAINTENANCE, false); } /** * 获取所有配置 */ public static function getAllConfigs() { return self::all()->pluck('value', 'key')->toArray(); } /** * 批量设置配置 */ public static function setBatch($configs) { foreach ($configs as $key => $value) { self::set($key, $value); } } /** * 获取系统配置统计 */ public static function getStatistics() { $total = self::count(); $systemConfigs = self::whereIn('key', [ self::KEY_SYSTEM_NAME, self::KEY_SYSTEM_LOGO, self::KEY_SYSTEM_MAINTENANCE, ])->count(); $visitConfigs = self::whereIn('key', [ self::KEY_VISIT_ADVANCE_DAYS, self::KEY_VISIT_MAX_DAYS, self::KEY_VISIT_REMINDER_HOURS, ])->count(); $studyConfigs = self::whereIn('key', [ self::KEY_STUDY_REQUIRED, self::KEY_STUDY_EXPIRE_DAYS, ])->count(); $notificationConfigs = self::whereIn('key', [ self::KEY_SMS_ENABLED, self::KEY_EMAIL_ENABLED, self::KEY_WECHAT_ENABLED, ])->count(); return [ 'total' => $total, 'system_configs' => $systemConfigs, 'visit_configs' => $visitConfigs, 'study_configs' => $studyConfigs, 'notification_configs' => $notificationConfigs, ]; } /** * 初始化默认配置 */ public static function initDefaultConfigs() { $defaultConfigs = [ self::KEY_SYSTEM_NAME => '访客管理系统', self::KEY_VISIT_ADVANCE_DAYS => 1, self::KEY_VISIT_MAX_DAYS => 30, self::KEY_STUDY_REQUIRED => true, self::KEY_STUDY_EXPIRE_DAYS => 30, self::KEY_AUDIT_AUTO_APPROVE => false, self::KEY_BLACKLIST_CHECK => true, self::KEY_SMS_ENABLED => true, self::KEY_EMAIL_ENABLED => true, self::KEY_WECHAT_ENABLED => true, self::KEY_GATE_QR_EXPIRE => 24, self::KEY_VISIT_REMINDER_HOURS => 2, self::KEY_SYSTEM_MAINTENANCE => false, ]; foreach ($defaultConfigs as $key => $value) { if (!self::where('key', $key)->exists()) { self::create([ 'key' => $key, 'value' => $value, 'name' => $key, ]); } } } /** * 获取配置详情 */ public function getDetails() { return [ 'id' => $this->id, 'key' => $this->key, 'name' => $this->name, 'value' => $this->value, 'created_at' => $this->created_at->format('Y-m-d H:i:s'), 'updated_at' => $this->updated_at->format('Y-m-d H:i:s'), ]; } /** * 验证配置值 */ public function validate() { $errors = []; if (empty($this->key)) { $errors[] = '配置键不能为空'; } if (empty($this->name)) { $errors[] = '配置名称不能为空'; } // 根据不同的配置键进行特殊验证 switch ($this->key) { case self::KEY_VISIT_ADVANCE_DAYS: case self::KEY_VISIT_MAX_DAYS: case self::KEY_STUDY_EXPIRE_DAYS: case self::KEY_GATE_QR_EXPIRE: case self::KEY_VISIT_REMINDER_HOURS: if (!is_numeric($this->value) || $this->value < 0) { $errors[] = '数值配置必须为非负数'; } break; case self::KEY_STUDY_REQUIRED: case self::KEY_AUDIT_AUTO_APPROVE: case self::KEY_BLACKLIST_CHECK: case self::KEY_SMS_ENABLED: case self::KEY_EMAIL_ENABLED: case self::KEY_WECHAT_ENABLED: case self::KEY_SYSTEM_MAINTENANCE: if (!in_array($this->value, ['0', '1', 'true', 'false'])) { $errors[] = '布尔配置值必须为0/1或true/false'; } break; } return $errors; } }