getTemplates(); foreach ($templates as $template) { if ($template['id'] === $templateId) { return $template; } } return null; } /** * 应用模板到终端 * * @param Terminal $terminal * @param string $templateId * @return string */ public function applyTemplate(Terminal $terminal, string $templateId): string { $template = $this->getTemplate($templateId); if (!$template) { throw new \InvalidArgumentException("模板不存在: {$templateId}"); } return $template['content']; } /** * 替换模板中的变量 * * @param string $template * @param Terminal $terminal * @param array $additionalVars * @return string */ public function replaceVariables(string $template, Terminal $terminal, array $additionalVars = []): string { $variables = $this->getVariableValues($terminal, $additionalVars); foreach ($variables as $key => $value) { // 处理数组类型的变量 if (is_array($value)) { $value = implode(', ', $value); } $template = str_replace('{' . $key . '}', $value, $template); } return $template; } /** * 获取变量的实际值 * * @param Terminal $terminal * @param array $additionalVars * @return array */ public function getVariableValues(Terminal $terminal, array $additionalVars = []): array { $user = Auth::user(); $now = now(); $variables = [ 'user' => $user?->name ?? '访客', 'user_id' => $user?->id ?? 0, 'user_role' => $user?->roles?->first()?->name ?? '未知', 'department' => $user?->department ?? '未知部门', 'station' => $terminal->station_id ? "工作站 {$terminal->station_id}" : '未绑定工作站', 'station_id' => $terminal->station_id ?? '未绑定', 'terminal_name' => $terminal->name, 'terminal_code' => $terminal->code, 'time' => $now->format('Y-m-d H:i:s'), 'date' => $now->format('Y-m-d'), 'time_only' => $now->format('H:i:s'), 'shift' => $this->getCurrentShift($now), 'knowledge_bases' => $terminal->knowledgeBases->pluck('name')->toArray(), 'company_name' => config('app.name', '公司名称'), ]; return array_merge($variables, $additionalVars); } /** * 根据时间判断当前班次 * * @param \Illuminate\Support\Carbon $time * @return string */ protected function getCurrentShift($time): string { $hour = $time->hour; if ($hour >= 8 && $hour < 16) { return '早班'; } elseif ($hour >= 16 && $hour < 24) { return '中班'; } else { return '夜班'; } } /** * 预览模板(替换变量后的结果) * * @param string $template * @param Terminal $terminal * @return string */ public function preview(string $template, Terminal $terminal): string { return $this->replaceVariables($template, $terminal); } /** * 验证模板中的变量是否都是有效的 * * @param string $template * @return array 返回无效的变量列表 */ public function validateVariables(string $template): array { $validVariables = array_column(config('prompt_variables.variables', []), 'name'); // 提取模板中的所有变量 preg_match_all('/\{([a-z_]+)\}/', $template, $matches); $usedVariables = $matches[1] ?? []; // 找出无效的变量 $invalidVariables = array_diff($usedVariables, $validVariables); return array_values(array_unique($invalidVariables)); } }