Commit e39a6c3467489af442f8b4e54d20b3c9d5f11c46

Authored by YunaiV
1 parent d6b3b5e9

【代码新增】AI:写作管理界面

yudao-module-ai/yudao-module-ai-biz/pom.xml
... ... @@ -60,5 +60,9 @@
60 60 <groupId>cn.iocoder.boot</groupId>
61 61 <artifactId>yudao-spring-boot-starter-test</artifactId>
62 62 </dependency>
  63 + <dependency>
  64 + <groupId>cn.iocoder.boot</groupId>
  65 + <artifactId>yudao-spring-boot-starter-excel</artifactId>
  66 + </dependency>
63 67 </dependencies>
64 68 </project>
65 69 \ No newline at end of file
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/write/AiWriteController.java
1 1 package cn.iocoder.yudao.module.ai.controller.admin.write;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  4 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  5 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
4 6 import cn.iocoder.yudao.module.ai.controller.admin.write.vo.AiWriteGenerateReqVO;
  7 +import cn.iocoder.yudao.module.ai.controller.admin.write.vo.AiWritePageReqVO;
  8 +import cn.iocoder.yudao.module.ai.controller.admin.write.vo.AiWriteRespVO;
  9 +import cn.iocoder.yudao.module.ai.dal.dataobject.write.AiWriteDO;
5 10 import cn.iocoder.yudao.module.ai.service.write.AiWriteService;
6 11 import io.swagger.v3.oas.annotations.Operation;
  12 +import io.swagger.v3.oas.annotations.Parameter;
7 13 import io.swagger.v3.oas.annotations.tags.Tag;
8 14 import jakarta.annotation.Resource;
9 15 import jakarta.annotation.security.PermitAll;
10 16 import jakarta.validation.Valid;
11 17 import org.springframework.http.MediaType;
12   -import org.springframework.web.bind.annotation.PostMapping;
13   -import org.springframework.web.bind.annotation.RequestBody;
14   -import org.springframework.web.bind.annotation.RequestMapping;
15   -import org.springframework.web.bind.annotation.RestController;
  18 +import org.springframework.security.access.prepost.PreAuthorize;
  19 +import org.springframework.web.bind.annotation.*;
16 20 import reactor.core.publisher.Flux;
17 21  
  22 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
18 23 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
19 24  
20 25 @Tag(name = "管理后台 - AI 写作")
... ... @@ -32,4 +37,23 @@ public class AiWriteController {
32 37 return writeService.generateWriteContent(generateReqVO, getLoginUserId());
33 38 }
34 39  
  40 + // ================ 写作管理 ================
  41 +
  42 + @DeleteMapping("/delete")
  43 + @Operation(summary = "删除写作")
  44 + @Parameter(name = "id", description = "编号", required = true)
  45 + @PreAuthorize("@ss.hasPermission('ai:write:delete')")
  46 + public CommonResult<Boolean> deleteWrite(@RequestParam("id") Long id) {
  47 + writeService.deleteWrite(id);
  48 + return success(true);
  49 + }
  50 +
  51 + @GetMapping("/page")
  52 + @Operation(summary = "获得写作分页")
  53 + @PreAuthorize("@ss.hasPermission('ai:write:query')")
  54 + public CommonResult<PageResult<AiWriteRespVO>> getWritePage(@Valid AiWritePageReqVO pageReqVO) {
  55 + PageResult<AiWriteDO> pageResult = writeService.getWritePage(pageReqVO);
  56 + return success(BeanUtils.toBean(pageResult, AiWriteRespVO.class));
  57 + }
  58 +
35 59 }
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/write/vo/AiWritePageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.ai.controller.admin.write.vo;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +import org.springframework.format.annotation.DateTimeFormat;
  9 +
  10 +import java.time.LocalDateTime;
  11 +
  12 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  13 +
  14 +@Schema(description = "管理后台 - AI 写作分页 Request VO")
  15 +@Data
  16 +@EqualsAndHashCode(callSuper = true)
  17 +@ToString(callSuper = true)
  18 +public class AiWritePageReqVO extends PageParam {
  19 +
  20 + @Schema(description = "用户编号", example = "28404")
  21 + private Long userId;
  22 +
  23 + @Schema(description = "写作类型", example = "1")
  24 + private Integer type;
  25 +
  26 + @Schema(description = "平台", example = "TongYi")
  27 + private String platform;
  28 +
  29 + @Schema(description = "创建时间")
  30 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  31 + private LocalDateTime[] createTime;
  32 +
  33 +}
0 34 \ No newline at end of file
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/write/vo/AiWriteRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.ai.controller.admin.write.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import java.time.LocalDateTime;
  7 +
  8 +@Schema(description = "管理后台 - AI 写作 Response VO")
  9 +@Data
  10 +public class AiWriteRespVO {
  11 +
  12 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5311")
  13 + private Long id;
  14 +
  15 + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "28404")
  16 + private Long userId;
  17 +
  18 + @Schema(description = "写作类型", example = "1")
  19 + private Integer type;
  20 +
  21 + @Schema(description = "平台", requiredMode = Schema.RequiredMode.REQUIRED, example = "TongYi")
  22 + private String platform;
  23 +
  24 + @Schema(description = "模型", requiredMode = Schema.RequiredMode.REQUIRED, example = "qwen")
  25 + private String model;
  26 +
  27 + @Schema(description = "生成内容提示", requiredMode = Schema.RequiredMode.REQUIRED, example = "撰写:田忌赛马")
  28 + private String prompt;
  29 +
  30 + @Schema(description = "生成的内容", example = "你非常不错")
  31 + private String generatedContent;
  32 +
  33 + @Schema(description = "原文", example = "真的么?")
  34 + private String originalContent;
  35 +
  36 + @Schema(description = "长度提示词", example = "1")
  37 + private Integer length;
  38 +
  39 + @Schema(description = "格式提示词", example = "2")
  40 + private Integer format;
  41 +
  42 + @Schema(description = "语气提示词", example = "3")
  43 + private Integer tone;
  44 +
  45 + @Schema(description = "语言提示词", example = "4")
  46 + private Integer language;
  47 +
  48 + @Schema(description = "错误信息")
  49 + private String errorMessage;
  50 +
  51 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  52 + private LocalDateTime createTime;
  53 +
  54 +}
0 55 \ No newline at end of file
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/write/AiWriteMapper.java
1 1 package cn.iocoder.yudao.module.ai.dal.mysql.write;
2 2  
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
3 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  5 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  6 +import cn.iocoder.yudao.module.ai.controller.admin.write.vo.AiWritePageReqVO;
4 7 import cn.iocoder.yudao.module.ai.dal.dataobject.write.AiWriteDO;
5 8 import org.apache.ibatis.annotations.Mapper;
6 9  
7 10 /**
8   - * AI 音乐 Mapper
  11 + * AI 写作 Mapper
9 12 *
10 13 * @author xiaoxin
11 14 */
12 15 @Mapper
13 16 public interface AiWriteMapper extends BaseMapperX<AiWriteDO> {
  17 +
  18 + default PageResult<AiWriteDO> selectPage(AiWritePageReqVO reqVO) {
  19 + return selectPage(reqVO, new LambdaQueryWrapperX<AiWriteDO>()
  20 + .eqIfPresent(AiWriteDO::getUserId, reqVO.getUserId())
  21 + .eqIfPresent(AiWriteDO::getType, reqVO.getType())
  22 + .eqIfPresent(AiWriteDO::getPlatform, reqVO.getPlatform())
  23 + .betweenIfPresent(AiWriteDO::getCreateTime, reqVO.getCreateTime())
  24 + .orderByDesc(AiWriteDO::getId));
  25 + }
  26 +
14 27 }
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/write/AiWriteService.java
1 1 package cn.iocoder.yudao.module.ai.service.write;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  4 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 5 import cn.iocoder.yudao.module.ai.controller.admin.write.vo.AiWriteGenerateReqVO;
  6 +import cn.iocoder.yudao.module.ai.controller.admin.write.vo.AiWritePageReqVO;
  7 +import cn.iocoder.yudao.module.ai.dal.dataobject.write.AiWriteDO;
5 8 import reactor.core.publisher.Flux;
6 9  
7 10 /**
... ... @@ -20,4 +23,19 @@ public interface AiWriteService {
20 23 */
21 24 Flux<CommonResult<String>> generateWriteContent(AiWriteGenerateReqVO generateReqVO, Long userId);
22 25  
  26 + /**
  27 + * 删除写作
  28 + *
  29 + * @param id 编号
  30 + */
  31 + void deleteWrite(Long id);
  32 +
  33 + /**
  34 + * 获得写作分页
  35 + *
  36 + * @param pageReqVO 分页查询
  37 + * @return AI 写作分页
  38 + */
  39 + PageResult<AiWriteDO> getWritePage(AiWritePageReqVO pageReqVO);
  40 +
23 41 }
... ...
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/write/AiWriteServiceImpl.java
... ... @@ -5,9 +5,11 @@ import cn.hutool.core.util.StrUtil;
5 5 import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum;
6 6 import cn.iocoder.yudao.framework.ai.core.util.AiUtils;
7 7 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  8 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
8 9 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
9 10 import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
10 11 import cn.iocoder.yudao.module.ai.controller.admin.write.vo.AiWriteGenerateReqVO;
  12 +import cn.iocoder.yudao.module.ai.controller.admin.write.vo.AiWritePageReqVO;
11 13 import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatModelDO;
12 14 import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiChatRoleDO;
13 15 import cn.iocoder.yudao.module.ai.dal.dataobject.write.AiWriteDO;
... ... @@ -36,8 +38,10 @@ import java.util.ArrayList;
36 38 import java.util.List;
37 39 import java.util.Objects;
38 40  
  41 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
39 42 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error;
40 43 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  44 +import static cn.iocoder.yudao.module.ai.enums.ErrorCodeConstants.WRITE_NOT_EXISTS;
41 45  
42 46 /**
43 47 * AI 写作 Service 实现类
... ... @@ -132,4 +136,23 @@ public class AiWriteServiceImpl implements AiWriteService {
132 136 }
133 137 }
134 138  
  139 + @Override
  140 + public void deleteWrite(Long id) {
  141 + // 校验存在
  142 + validateWriteExists(id);
  143 + // 删除
  144 + writeMapper.deleteById(id);
  145 + }
  146 +
  147 + private void validateWriteExists(Long id) {
  148 + if (writeMapper.selectById(id) == null) {
  149 + throw exception(WRITE_NOT_EXISTS);
  150 + }
  151 + }
  152 +
  153 + @Override
  154 + public PageResult<AiWriteDO> getWritePage(AiWritePageReqVO pageReqVO) {
  155 + return writeMapper.selectPage(pageReqVO);
  156 + }
  157 +
135 158 }
... ...