From ded79140cadaa6dad5a85c2e796edb768ffdc0ab Mon Sep 17 00:00:00 2001 From: Edward_89 Date: Thu, 2 Jan 2025 16:05:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=87=E4=BB=BDPrompt?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E8=AE=B0=E5=BD=95=E7=9A=84=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/llm/enums/ErrorCodeConstants.java | 4 + .../PromptTemplatesController.java | 8 + .../vo/PromptTemplatesRespVO.java | 6 + .../PromptTemplatesBackupController.java | 93 +++++++++ .../vo/PromptTemplatesBackupPageReqVO.java | 43 +++++ .../vo/PromptTemplatesBackupRespVO.java | 77 ++++++++ .../vo/PromptTemplatesBackupSaveReqVO.java | 38 ++++ .../PromptTemplatesBackupDO.java | 59 ++++++ .../PromptTemplatesBackupMapper.java | 33 ++++ .../PromptTemplatesService.java | 2 + .../PromptTemplatesServiceImpl.java | 29 +++ .../PromptTemplatesBackupService.java | 59 ++++++ .../PromptTemplatesBackupServiceImpl.java | 179 ++++++++++++++++++ .../PromptTemplatesBackupMapper.xml | 12 ++ 14 files changed, 642 insertions(+) create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/PromptTemplatesBackupController.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/vo/PromptTemplatesBackupPageReqVO.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/vo/PromptTemplatesBackupRespVO.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/vo/PromptTemplatesBackupSaveReqVO.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/prompttemplatesbackup/PromptTemplatesBackupDO.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/prompttemplatesbackup/PromptTemplatesBackupMapper.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplatesbackup/PromptTemplatesBackupService.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplatesbackup/PromptTemplatesBackupServiceImpl.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/resources/mapper/prompttemplatesbackup/PromptTemplatesBackupMapper.xml diff --git a/yudao-module-llm/yudao-module-llm-api/src/main/java/cn/iocoder/yudao/module/llm/enums/ErrorCodeConstants.java b/yudao-module-llm/yudao-module-llm-api/src/main/java/cn/iocoder/yudao/module/llm/enums/ErrorCodeConstants.java index 830b6bc0e..b46b70fe6 100644 --- a/yudao-module-llm/yudao-module-llm-api/src/main/java/cn/iocoder/yudao/module/llm/enums/ErrorCodeConstants.java +++ b/yudao-module-llm/yudao-module-llm-api/src/main/java/cn/iocoder/yudao/module/llm/enums/ErrorCodeConstants.java @@ -43,6 +43,10 @@ public interface ErrorCodeConstants { ErrorCode PROMPT_TEMPLATES_EXISTS = new ErrorCode(100_1001, "模板信息已存在"); + ErrorCode PROMPT_TEMPLATESBACKUP_EXISTS = new ErrorCode(100_1002, "模板信息已备份"); + + ErrorCode PROMPT_TEMPLATES_BACKUP_NOT_EXISTS = new ErrorCode(101_1000, "Prompt模板备份不存在"); + ErrorCode PROMPT_TEMPLATES_APPLICATIONS_NOT_EXISTS = new ErrorCode(10017, "模板信息不存在"); ErrorCode PROMPT_TEMPLATES_TAGS_NOT_EXISTS = new ErrorCode(10017, "模板信息不存在"); diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/PromptTemplatesController.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/PromptTemplatesController.java index 7e629aee5..00d5b9fb5 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/PromptTemplatesController.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/PromptTemplatesController.java @@ -76,4 +76,12 @@ public class PromptTemplatesController { HttpServletResponse response) throws Exception { this.promptTemplatesService.exportPromptTemplatesExcel(pageReqVO, response); } + + @PostMapping("/backup") + @Operation(summary = "备份Prompt模板") + @PreAuthorize("@ss.hasPermission('llm:prompt-templates:update')") + public CommonResult backupPromptTemplates(@Valid @RequestBody PromptTemplatesSaveReqVO updateReqVO) { + promptTemplatesService.backupPromptTemplates(updateReqVO); + return success(true); + } } \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/PromptTemplatesRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/PromptTemplatesRespVO.java index 5716171e4..0d1bb04ef 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/PromptTemplatesRespVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplates/vo/PromptTemplatesRespVO.java @@ -63,4 +63,10 @@ public class PromptTemplatesRespVO { @ExcelProperty("模板内容") private String templateText; + @Schema(description = "是否已备份") + private Boolean isBackup; + + @Schema(description = "备份模板Id") + private Long backupId; + } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/PromptTemplatesBackupController.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/PromptTemplatesBackupController.java new file mode 100644 index 000000000..754e1bac5 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/PromptTemplatesBackupController.java @@ -0,0 +1,93 @@ +package cn.iocoder.yudao.module.llm.controller.admin.prompttemplatesbackup; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.llm.controller.admin.prompttemplatesbackup.vo.*; +import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplatesbackup.PromptTemplatesBackupDO; +import cn.iocoder.yudao.module.llm.service.prompttemplatesbackup.PromptTemplatesBackupService; + +@Tag(name = "管理后台 - Prompt模板备份") +@RestController +@RequestMapping("/llm/prompt-templates-backup") +@Validated +public class PromptTemplatesBackupController { + + @Resource + private PromptTemplatesBackupService promptTemplatesBackupService; + + @PostMapping("/create") + @Operation(summary = "创建Prompt模板备份") + @PreAuthorize("@ss.hasPermission('llm:prompt-templates-backup:create')") + public CommonResult createPromptTemplatesBackup(@Valid @RequestBody PromptTemplatesBackupSaveReqVO createReqVO) { + return success(promptTemplatesBackupService.createPromptTemplatesBackup(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新Prompt模板备份") + @PreAuthorize("@ss.hasPermission('llm:prompt-templates-backup:update')") + public CommonResult updatePromptTemplatesBackup(@Valid @RequestBody PromptTemplatesBackupSaveReqVO updateReqVO) { + promptTemplatesBackupService.updatePromptTemplatesBackup(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除Prompt模板备份") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('llm:prompt-templates-backup:delete')") + public CommonResult deletePromptTemplatesBackup(@RequestParam("id") Long id) { + promptTemplatesBackupService.deletePromptTemplatesBackup(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得Prompt模板备份") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('llm:prompt-templates-backup:query')") + public CommonResult getPromptTemplatesBackup(@RequestParam("id") Long id) { + return success(promptTemplatesBackupService.getPromptTemplatesBackup(id)); + } + + @GetMapping("/page") + @Operation(summary = "获得Prompt模板备份分页") + @PreAuthorize("@ss.hasPermission('llm:prompt-templates-backup:query')") + public CommonResult> getPromptTemplatesBackupPage(@Valid PromptTemplatesBackupPageReqVO pageReqVO) { + return success(promptTemplatesBackupService.getPromptTemplatesBackupPage(pageReqVO)); + } + +// @GetMapping("/export-excel") +// @Operation(summary = "导出Prompt模板备份 Excel") +// @PreAuthorize("@ss.hasPermission('llm:prompt-templates-backup:export')") +// @ApiAccessLog(operateType = EXPORT) +// public void exportPromptTemplatesBackupExcel(@Valid PromptTemplatesBackupPageReqVO pageReqVO, +// HttpServletResponse response) throws IOException { +// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); +// List list = promptTemplatesBackupService.getPromptTemplatesBackupPage(pageReqVO).getList(); +// // 导出 Excel +// ExcelUtils.write(response, "Prompt模板备份.xls", "数据", PromptTemplatesBackupRespVO.class, +// BeanUtils.toBean(list, PromptTemplatesBackupRespVO.class)); +// } + +} \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/vo/PromptTemplatesBackupPageReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/vo/PromptTemplatesBackupPageReqVO.java new file mode 100644 index 000000000..1fc8b1a8c --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/vo/PromptTemplatesBackupPageReqVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.llm.controller.admin.prompttemplatesbackup.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - Prompt模板备份分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PromptTemplatesBackupPageReqVO extends PageParam { + + @Schema(description = "原模板Id", example = "31631") + private Long srcId; + + @Schema(description = "模板名称", example = "张三") + private String name; + + @Schema(description = "模板分类") + private Integer templateCategory; + + @Schema(description = "模板框架") + private Integer templateFramework; + + @Schema(description = "模板内容") + private String templateText; + + @Schema(description = "变量标识符") + private Integer variableIdentifier; + + @Schema(description = "模板类型", example = "1") + private Integer templateType; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/vo/PromptTemplatesBackupRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/vo/PromptTemplatesBackupRespVO.java new file mode 100644 index 000000000..c58ce5297 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/vo/PromptTemplatesBackupRespVO.java @@ -0,0 +1,77 @@ +package cn.iocoder.yudao.module.llm.controller.admin.prompttemplatesbackup.vo; + +import cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo.AbilityFramework; +import cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo.BriefFramework; +import cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo.SampleFramework; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - Prompt模板备份 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PromptTemplatesBackupRespVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "4054") + @ExcelProperty("主键") + private Long id; + + @Schema(description = "原模板Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "31631") + @ExcelProperty("原模板Id") + private Long srcId; + + @Schema(description = "模板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("模板名称") + private String name; + + @Schema(description = "模板分类") + @ExcelProperty("模板分类") + private Integer templateCategory; + + @Schema(description = "模板框架") + @ExcelProperty("模板框架") + private Integer templateFramework; + + @Schema(description = "模板内容") + @ExcelProperty("模板内容") + private String templateText; + + @Schema(description = "变量标识符") + @ExcelProperty("变量标识符") + private Integer variableIdentifier; + + @Schema(description = "模板类型", example = "1") + @ExcelProperty("模板类型") + private Integer templateType; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "使用量") + @ExcelProperty("使用量") + private int usedCount; + + @Schema(description = "标签Id列表", example = "[1, 2, 3]") + private List tagIds; + + @Schema(description = "应用Id列表", example = "[1, 2, 3]") + private List applicationIds; + + @Schema(description = "关联应用") + @ExcelProperty("关联应用") + private int applicationCount; + + @Schema(description = "简介框架") + private BriefFramework briefFramework; + + @Schema(description = "角色能力框架") + private AbilityFramework abilityFramework; + + @Schema(description = "角色能力框架") + private SampleFramework sampleFramework; + +} \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/vo/PromptTemplatesBackupSaveReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/vo/PromptTemplatesBackupSaveReqVO.java new file mode 100644 index 000000000..c35bb29d9 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/prompttemplatesbackup/vo/PromptTemplatesBackupSaveReqVO.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.llm.controller.admin.prompttemplatesbackup.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - Prompt模板备份新增/修改 Request VO") +@Data +public class PromptTemplatesBackupSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "4054") + private Long id; + + @Schema(description = "原模板Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "31631") + @NotNull(message = "原模板Id不能为空") + private Long srcId; + + @Schema(description = "模板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotEmpty(message = "模板名称不能为空") + private String name; + + @Schema(description = "模板分类") + private Integer templateCategory; + + @Schema(description = "模板框架") + private Integer templateFramework; + + @Schema(description = "模板内容") + private String templateText; + + @Schema(description = "变量标识符") + private Integer variableIdentifier; + + @Schema(description = "模板类型", example = "1") + private Integer templateType; + +} \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/prompttemplatesbackup/PromptTemplatesBackupDO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/prompttemplatesbackup/PromptTemplatesBackupDO.java new file mode 100644 index 000000000..8050488b2 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/prompttemplatesbackup/PromptTemplatesBackupDO.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplatesbackup; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * Prompt模板备份 DO + * + * @author 华大大模型 + */ +@TableName("llm_prompt_templates_backup") +@KeySequence("llm_prompt_templates_backup_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PromptTemplatesBackupDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Long id; + /** + * 原模板Id + */ + private Long srcId; + /** + * 模板名称 + */ + private String name; + /** + * 模板分类 + */ + private Integer templateCategory; + /** + * 模板框架 + */ + private Integer templateFramework; + /** + * 模板内容 + */ + private String templateText; + /** + * 变量标识符 + */ + private Integer variableIdentifier; + /** + * 模板类型 + */ + private Integer templateType; + +} \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/prompttemplatesbackup/PromptTemplatesBackupMapper.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/prompttemplatesbackup/PromptTemplatesBackupMapper.java new file mode 100644 index 000000000..a0de67d3d --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/prompttemplatesbackup/PromptTemplatesBackupMapper.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.llm.dal.mysql.prompttemplatesbackup; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplatesbackup.PromptTemplatesBackupDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.llm.controller.admin.prompttemplatesbackup.vo.*; + +/** + * Prompt模板备份 Mapper + * + * @author 华大大模型 + */ +@Mapper +public interface PromptTemplatesBackupMapper extends BaseMapperX { + + default PageResult selectPage(PromptTemplatesBackupPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PromptTemplatesBackupDO::getSrcId, reqVO.getSrcId()) + .likeIfPresent(PromptTemplatesBackupDO::getName, reqVO.getName()) + .eqIfPresent(PromptTemplatesBackupDO::getTemplateCategory, reqVO.getTemplateCategory()) + .eqIfPresent(PromptTemplatesBackupDO::getTemplateFramework, reqVO.getTemplateFramework()) + .eqIfPresent(PromptTemplatesBackupDO::getTemplateText, reqVO.getTemplateText()) + .eqIfPresent(PromptTemplatesBackupDO::getVariableIdentifier, reqVO.getVariableIdentifier()) + .eqIfPresent(PromptTemplatesBackupDO::getTemplateType, reqVO.getTemplateType()) + .betweenIfPresent(PromptTemplatesBackupDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(PromptTemplatesBackupDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplates/PromptTemplatesService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplates/PromptTemplatesService.java index 2744c49a2..603294ddc 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplates/PromptTemplatesService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplates/PromptTemplatesService.java @@ -18,4 +18,6 @@ public interface PromptTemplatesService { void exportPromptTemplatesExcel(PromptTemplatesPageReqVO pageReqVO, HttpServletResponse response) throws Exception; + + void backupPromptTemplates(@Valid PromptTemplatesSaveReqVO updateReqVO); } \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplates/PromptTemplatesServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplates/PromptTemplatesServiceImpl.java index f03742a59..d2fb2b4d9 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplates/PromptTemplatesServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplates/PromptTemplatesServiceImpl.java @@ -1,12 +1,15 @@ package cn.iocoder.yudao.module.llm.service.prompttemplates; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.llm.controller.admin.prompttemplatesbackup.vo.PromptTemplatesBackupSaveReqVO; import cn.iocoder.yudao.module.llm.dal.dataobject.label.LabelDO; import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplatesapplications.PromptTemplatesApplicationsDO; +import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplatesbackup.PromptTemplatesBackupDO; import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplatestags.PromptTemplatesTagsDO; import cn.iocoder.yudao.module.llm.dal.mysql.prompttemplatesapplications.PromptTemplatesApplicationsMapper; import cn.iocoder.yudao.module.llm.dal.mysql.prompttemplatestags.PromptTemplatesTagsMapper; import cn.iocoder.yudao.module.llm.service.label.LabelService; +import cn.iocoder.yudao.module.llm.service.prompttemplatesbackup.PromptTemplatesBackupService; import cn.iocoder.yudao.module.system.api.dict.DictDataApi; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -43,6 +46,8 @@ public class PromptTemplatesServiceImpl implements PromptTemplatesService { private DictDataApi dictDataApi; @Resource private LabelService labelService; + @Resource + private PromptTemplatesBackupService promptTemplatesBackupService; @Override public Long createPromptTemplates(PromptTemplatesSaveReqVO createReqVO) { @@ -244,6 +249,17 @@ public class PromptTemplatesServiceImpl implements PromptTemplatesService { } catch(Exception e) { e.printStackTrace(); } + try { + PromptTemplatesBackupDO backupDO = this.promptTemplatesBackupService.getPromptTemplatesBackupBySrcId(respVO.getId()); + if(backupDO == null) { + respVO.setIsBackup(false); + } else { + respVO.setIsBackup(true); + respVO.setBackupId(backupDO.getId()); + } + } catch(Exception e) { + respVO.setIsBackup(false); + } } return pageRespList; } @@ -278,4 +294,17 @@ public class PromptTemplatesServiceImpl implements PromptTemplatesService { ExcelUtils.write(response, "Prompt模板信息.xls", "数据", PromptTemplatesExcelVO.class, excelList); } + + @Override + public void backupPromptTemplates(PromptTemplatesSaveReqVO updateReqVO) { + PromptTemplatesDO templatesDo = this.promptTemplatesMapper.selectById(updateReqVO.getId()); + if(templatesDo == null) { + throw exception(PROMPT_TEMPLATES_NOT_EXISTS); + } + this.promptTemplatesBackupService.isBackup(updateReqVO.getId()); + PromptTemplatesBackupSaveReqVO templatesBackupDo = BeanUtils.toBean(templatesDo, PromptTemplatesBackupSaveReqVO.class); + templatesBackupDo.setId(null); + templatesBackupDo.setSrcId(updateReqVO.getId()); + this.promptTemplatesBackupService.createPromptTemplatesBackup(templatesBackupDo); + } } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplatesbackup/PromptTemplatesBackupService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplatesbackup/PromptTemplatesBackupService.java new file mode 100644 index 000000000..235627443 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplatesbackup/PromptTemplatesBackupService.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.llm.service.prompttemplatesbackup; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.llm.controller.admin.prompttemplatesbackup.vo.*; +import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplatesbackup.PromptTemplatesBackupDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * Prompt模板备份 Service 接口 + * + * @author 华大大模型 + */ +public interface PromptTemplatesBackupService { + + /** + * 创建Prompt模板备份 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPromptTemplatesBackup(@Valid PromptTemplatesBackupSaveReqVO createReqVO); + + /** + * 更新Prompt模板备份 + * + * @param updateReqVO 更新信息 + */ + void updatePromptTemplatesBackup(@Valid PromptTemplatesBackupSaveReqVO updateReqVO); + + /** + * 删除Prompt模板备份 + * + * @param id 编号 + */ + void deletePromptTemplatesBackup(Long id); + + /** + * 获得Prompt模板备份 + * + * @param id 编号 + * @return Prompt模板备份 + */ + PromptTemplatesBackupRespVO getPromptTemplatesBackup(Long id); + + /** + * 获得Prompt模板备份分页 + * + * @param pageReqVO 分页查询 + * @return Prompt模板备份分页 + */ + PageResult getPromptTemplatesBackupPage(PromptTemplatesBackupPageReqVO pageReqVO); + + void isBackup(Long srcId); + + PromptTemplatesBackupDO getPromptTemplatesBackupBySrcId(Long srcId); + +} \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplatesbackup/PromptTemplatesBackupServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplatesbackup/PromptTemplatesBackupServiceImpl.java new file mode 100644 index 000000000..f0104cd0e --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/prompttemplatesbackup/PromptTemplatesBackupServiceImpl.java @@ -0,0 +1,179 @@ +package cn.iocoder.yudao.module.llm.service.prompttemplatesbackup; + +import cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo.AbilityFramework; +import cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo.BriefFramework; +import cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo.PromptTemplatesRespVO; +import cn.iocoder.yudao.module.llm.controller.admin.prompttemplates.vo.SampleFramework; +import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplates.PromptTemplatesDO; +import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplatesapplications.PromptTemplatesApplicationsDO; +import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplatestags.PromptTemplatesTagsDO; +import cn.iocoder.yudao.module.llm.dal.mysql.prompttemplatesapplications.PromptTemplatesApplicationsMapper; +import cn.iocoder.yudao.module.llm.dal.mysql.prompttemplatestags.PromptTemplatesTagsMapper; +import cn.iocoder.yudao.module.system.api.dict.DictDataApi; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.module.llm.controller.admin.prompttemplatesbackup.vo.*; +import cn.iocoder.yudao.module.llm.dal.dataobject.prompttemplatesbackup.PromptTemplatesBackupDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.llm.dal.mysql.prompttemplatesbackup.PromptTemplatesBackupMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.llm.enums.ErrorCodeConstants.*; + +/** + * Prompt模板备份 Service 实现类 + * + * @author 华大大模型 + */ +@Service +@Validated +public class PromptTemplatesBackupServiceImpl implements PromptTemplatesBackupService { + + @Resource + private PromptTemplatesBackupMapper promptTemplatesBackupMapper; + @Resource + private PromptTemplatesTagsMapper promptTemplatesTagsMapper; + @Resource + private PromptTemplatesApplicationsMapper promptTemplatesApplicationsMapper; + @Resource + private DictDataApi dictDataApi; + + @Override + public Long createPromptTemplatesBackup(PromptTemplatesBackupSaveReqVO createReqVO) { + // 插入 + PromptTemplatesBackupDO promptTemplatesBackup = BeanUtils.toBean(createReqVO, PromptTemplatesBackupDO.class); + promptTemplatesBackupMapper.insert(promptTemplatesBackup); + // 返回 + return promptTemplatesBackup.getId(); + } + + @Override + public void updatePromptTemplatesBackup(PromptTemplatesBackupSaveReqVO updateReqVO) { + // 校验存在 + validatePromptTemplatesBackupExists(updateReqVO.getId()); + // 更新 + PromptTemplatesBackupDO updateObj = BeanUtils.toBean(updateReqVO, PromptTemplatesBackupDO.class); + promptTemplatesBackupMapper.updateById(updateObj); + } + + @Override + public void deletePromptTemplatesBackup(Long id) { + // 校验存在 + validatePromptTemplatesBackupExists(id); + // 删除 + promptTemplatesBackupMapper.deleteById(id); + } + + private void validatePromptTemplatesBackupExists(Long id) { + if (promptTemplatesBackupMapper.selectById(id) == null) { + throw exception(PROMPT_TEMPLATES_BACKUP_NOT_EXISTS); + } + } + + @Override + public PromptTemplatesBackupRespVO getPromptTemplatesBackup(Long id) { + PromptTemplatesBackupDO templatesDO = this.promptTemplatesBackupMapper.selectById(id); + if(templatesDO == null) { + return null; + } + PromptTemplatesBackupRespVO promptTemplates = BeanUtils.toBean(templatesDO, PromptTemplatesBackupRespVO.class); + List tagDOList = this.promptTemplatesTagsMapper + .selectList("prompt_template_id", id); + if(tagDOList!=null && !tagDOList.isEmpty()) { + List tagIds = tagDOList.stream() + .map(p->p.getTagId().toString()) + .collect(Collectors.toList()); + promptTemplates.setTagIds(tagIds); + } + List applicationDOList = this.promptTemplatesApplicationsMapper + .selectList("prompt_template_id", id); + if(applicationDOList!=null && !applicationDOList.isEmpty()) { + List applicationIds = applicationDOList.stream() + .map(p->p.getApplicationId().toString()) + .collect(Collectors.toList()); + promptTemplates.setApplicationIds(applicationIds); + } + String categoryName = this.dictDataApi.getDictDataLabel("llm_prompt_template_framework",Integer.valueOf(templatesDO.getTemplateFramework())); + switch (categoryName) { + case "简介框架": + promptTemplates.setBriefFramework(JSON.parseObject(promptTemplates + .getTemplateText(), BriefFramework.class)); + promptTemplates.setTemplateText(""); + break; + case "角色能力框架": + promptTemplates.setAbilityFramework(JSON.parseObject(promptTemplates + .getTemplateText(), AbilityFramework.class)); + promptTemplates.setTemplateText(""); + break; + case "样例提示框架": + promptTemplates.setSampleFramework(JSON.parseObject(promptTemplates + .getTemplateText(), SampleFramework.class)); + promptTemplates.setTemplateText(""); + break; + default: + break; + } + return promptTemplates; + } + + @Override + public PageResult getPromptTemplatesBackupPage(PromptTemplatesBackupPageReqVO pageReqVO) { + PageResult pageDoList = this.promptTemplatesBackupMapper.selectPage(pageReqVO); + PageResult pageRespList = BeanUtils.toBean(pageDoList, PromptTemplatesBackupRespVO.class); + List templatesRespList = pageRespList.getList(); + for(PromptTemplatesBackupRespVO respVO : templatesRespList) { + // TODO 使用量查询暂时设置为0 + respVO.setUsedCount(0); + try { + List tagDOList = this.promptTemplatesTagsMapper + .selectList("prompt_template_id", respVO.getId()); + if(tagDOList!=null && !tagDOList.isEmpty()) { + List tagIds = tagDOList.stream() + .map(p->p.getTagId().toString()) + .collect(Collectors.toList()); + respVO.setTagIds(tagIds); + } + } catch(Exception e) { + e.printStackTrace(); + } + try { + Long applicationCount = this.promptTemplatesApplicationsMapper.selectCount( + new QueryWrapper() + .eq("prompt_template_id", respVO.getId())); + respVO.setApplicationCount(Integer.parseInt(applicationCount.toString())); + } catch(Exception e) { + e.printStackTrace(); + } + } + return pageRespList; + } + + @Override + public void isBackup(Long srcId) { + List templateBackupDOList = this.promptTemplatesBackupMapper.selectList("src_id", srcId); + if(templateBackupDOList!=null && !templateBackupDOList.isEmpty()) { + throw exception(PROMPT_TEMPLATESBACKUP_EXISTS); + } + } + + @Override + public PromptTemplatesBackupDO getPromptTemplatesBackupBySrcId(Long srcId) { + List templateBackupDOList = this.promptTemplatesBackupMapper.selectList("src_id", srcId); + if(templateBackupDOList==null || templateBackupDOList.isEmpty()) { + return null; + } + return templateBackupDOList.get(0); + } + +} \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/resources/mapper/prompttemplatesbackup/PromptTemplatesBackupMapper.xml b/yudao-module-llm/yudao-module-llm-biz/src/main/resources/mapper/prompttemplatesbackup/PromptTemplatesBackupMapper.xml new file mode 100644 index 000000000..308bee24f --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/resources/mapper/prompttemplatesbackup/PromptTemplatesBackupMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file