|
@@ -0,0 +1,199 @@
|
|
|
|
|
+<?php
|
|
|
|
|
+
|
|
|
|
|
+namespace App\Services\PromptTemplate;
|
|
|
|
|
+
|
|
|
|
|
+use App\Consts\ErrorConst;
|
|
|
|
|
+use App\Exceptions\ApiException;
|
|
|
|
|
+use App\Facade\Site;
|
|
|
|
|
+use App\Libs\Utils;
|
|
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
|
|
+
|
|
|
|
|
+class PromptTemplateService
|
|
|
|
|
+{
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取提示词模板列表
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param array $data
|
|
|
|
|
+ * @return array
|
|
|
|
|
+ */
|
|
|
|
|
+ public function getTemplates($data = [])
|
|
|
|
|
+ {
|
|
|
|
|
+ $cpid = Site::getCpid();
|
|
|
|
|
+ $templateId = getProp($data, 'template_id');
|
|
|
|
|
+ $templateName = getProp($data, 'template_name');
|
|
|
|
|
+ $remark = getProp($data, 'remark');
|
|
|
|
|
+
|
|
|
|
|
+ $query = DB::table('mp_prompt_templates')->where('cpid', $cpid)->where('is_deleted', 0)->select('id as template_id', 'template_name', 'template_prompt', 'remark');
|
|
|
|
|
+
|
|
|
|
|
+ // 模板ID精确查询
|
|
|
|
|
+ if (!empty($templateId)) {
|
|
|
|
|
+ $query->where('id', $templateId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 模板名称模糊查询
|
|
|
|
|
+ if (!empty($templateName)) {
|
|
|
|
|
+ $query->where('template_name', 'like', "%{$templateName}%");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 备注标签模糊查询
|
|
|
|
|
+ if (!empty($remark)) {
|
|
|
|
|
+ $query->where('remark', 'like', "%{$remark}%");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 查询所有数据
|
|
|
|
|
+ $list = $query->orderBy('id', 'desc')->get();
|
|
|
|
|
+
|
|
|
|
|
+ return $list;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 创建提示词模板
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param array $data
|
|
|
|
|
+ * @return array
|
|
|
|
|
+ * @throws ApiException
|
|
|
|
|
+ */
|
|
|
|
|
+ public function createTemplate($data)
|
|
|
|
|
+ {
|
|
|
|
|
+ $cpid = Site::getCpid();
|
|
|
|
|
+ $templateName = trim($data['template_name']);
|
|
|
|
|
+ $templatePrompt = trim($data['template_prompt']);
|
|
|
|
|
+ $remark = $data['remark'] ?? '';
|
|
|
|
|
+
|
|
|
|
|
+ // 检查模板名称是否已存在(同cpid下)
|
|
|
|
|
+ $exists = DB::table('mp_prompt_templates')
|
|
|
|
|
+ ->where('cpid', $cpid)
|
|
|
|
|
+ ->where('template_name', $templateName)
|
|
|
|
|
+ ->where('is_deleted', 0)
|
|
|
|
|
+ ->exists();
|
|
|
|
|
+
|
|
|
|
|
+ if ($exists) {
|
|
|
|
|
+ Utils::throwError('20003:模版名已存在,请调整');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $insertData = [
|
|
|
|
|
+ 'cpid' => $cpid,
|
|
|
|
|
+ 'template_name' => $templateName,
|
|
|
|
|
+ 'template_prompt' => $templatePrompt,
|
|
|
|
|
+ 'remark' => $remark,
|
|
|
|
|
+ 'created_at' => date('Y-m-d H:i:s'),
|
|
|
|
|
+ 'updated_at' => date('Y-m-d H:i:s'),
|
|
|
|
|
+ ];
|
|
|
|
|
+
|
|
|
|
|
+ $templateId = DB::table('mp_prompt_templates')->insertGetId($insertData);
|
|
|
|
|
+
|
|
|
|
|
+ return [
|
|
|
|
|
+ 'template_id' => $templateId,
|
|
|
|
|
+ 'template_name' => $templateName,
|
|
|
|
|
+ 'template_prompt' => $templatePrompt,
|
|
|
|
|
+ 'remark' => $remark,
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 编辑提示词模板
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param array $data
|
|
|
|
|
+ * @return array
|
|
|
|
|
+ * @throws ApiException
|
|
|
|
|
+ */
|
|
|
|
|
+ public function editTemplate($data)
|
|
|
|
|
+ {
|
|
|
|
|
+ $cpid = Site::getCpid();
|
|
|
|
|
+ $templateId = $data['template_id'];
|
|
|
|
|
+
|
|
|
|
|
+ // 检查模板是否存在
|
|
|
|
|
+ $template = DB::table('mp_prompt_templates')
|
|
|
|
|
+ ->where('id', $templateId)
|
|
|
|
|
+ ->where('is_deleted', 0)
|
|
|
|
|
+ ->first();
|
|
|
|
|
+
|
|
|
|
|
+ if (!$template) {
|
|
|
|
|
+ Utils::throwError('20003:模板不存在');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 验证cpid权限
|
|
|
|
|
+ if ($template->cpid != $cpid) {
|
|
|
|
|
+ Utils::throwError('20003:没有权限操作此模板');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $updateData = ['updated_at' => date('Y-m-d H:i:s')];
|
|
|
|
|
+
|
|
|
|
|
+ // 如果要更新模板名称,检查是否重复(同cpid下)
|
|
|
|
|
+ if (isset($data['template_name'])) {
|
|
|
|
|
+ $templateName = trim($data['template_name']);
|
|
|
|
|
+
|
|
|
|
|
+ $exists = DB::table('mp_prompt_templates')
|
|
|
|
|
+ ->where('cpid', $cpid)
|
|
|
|
|
+ ->where('template_name', $templateName)
|
|
|
|
|
+ ->where('id', '<>', $templateId)
|
|
|
|
|
+ ->where('is_deleted', 0)
|
|
|
|
|
+ ->exists();
|
|
|
|
|
+
|
|
|
|
|
+ if ($exists) {
|
|
|
|
|
+ Utils::throwError('20003:模版名已存在,请调整');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $updateData['template_name'] = $templateName;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (isset($data['template_prompt'])) {
|
|
|
|
|
+ $updateData['template_prompt'] = trim($data['template_prompt']);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (isset($data['remark'])) {
|
|
|
|
|
+ $updateData['remark'] = $data['remark'];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ DB::table('mp_prompt_templates')
|
|
|
|
|
+ ->where('id', $templateId)
|
|
|
|
|
+ ->update($updateData);
|
|
|
|
|
+
|
|
|
|
|
+ // 返回更新后的数据
|
|
|
|
|
+ $updatedTemplate = DB::table('mp_prompt_templates')
|
|
|
|
|
+ ->where('id', $templateId)
|
|
|
|
|
+ ->first();
|
|
|
|
|
+
|
|
|
|
|
+ return [
|
|
|
|
|
+ 'template_id' => $updatedTemplate->id,
|
|
|
|
|
+ 'template_name' => $updatedTemplate->template_name,
|
|
|
|
|
+ 'template_prompt' => $updatedTemplate->template_prompt,
|
|
|
|
|
+ 'remark' => $updatedTemplate->remark ?? '',
|
|
|
|
|
+ 'updated_at' => $updatedTemplate->updated_at,
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 删除提示词模板
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param int $templateId
|
|
|
|
|
+ * @return array
|
|
|
|
|
+ * @throws ApiException
|
|
|
|
|
+ */
|
|
|
|
|
+ public function deleteTemplate($templateId)
|
|
|
|
|
+ {
|
|
|
|
|
+ $cpid = Site::getCpid();
|
|
|
|
|
+
|
|
|
|
|
+ // 检查模板是否存在
|
|
|
|
|
+ $template = DB::table('mp_prompt_templates')
|
|
|
|
|
+ ->where('id', $templateId)
|
|
|
|
|
+ ->where('is_deleted', 0)
|
|
|
|
|
+ ->first();
|
|
|
|
|
+
|
|
|
|
|
+ if (!$template) {
|
|
|
|
|
+ Utils::throwError('20003:模板不存在');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 验证cpid权限
|
|
|
|
|
+ if ($template->cpid != $cpid) {
|
|
|
|
|
+ Utils::throwError('20003:没有权限操作此模板');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return DB::table('mp_prompt_templates')
|
|
|
|
|
+ ->where('id', $templateId)
|
|
|
|
|
+ ->update([
|
|
|
|
|
+ 'is_deleted' => 1,
|
|
|
|
|
+ 'updated_at' => date('Y-m-d H:i:s')
|
|
|
|
|
+ ]);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|