Skip to content

Commit ac6ebbf

Browse files
committed
Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/yudao-cloud
# Conflicts: # yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessageSendReqVO.java # yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/mindmap/AiMindMapController.java # yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/apikey/AiApiKeySaveReqVO.java # yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatModel/AiChatModelSaveReqVO.java # yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/model/vo/chatRole/AiChatRoleSaveReqVO.java # yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/ProductPropertyController.java # yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/ProductPropertyValueController.java
2 parents 373c780 + 720b426 commit ac6ebbf

File tree

51 files changed

+1029
-73
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+1029
-73
lines changed

yudao-module-ai/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
<name>${project.artifactId}</name>
2020
<description>
21-
ai 模块下,接入 LLM 大模型,支持聊天、绘图、音乐、写作、思维脑图等功能
21+
ai 模块下,接入 LLM 大模型,支持聊天、绘图、音乐、写作、思维导图等功能
2222
目前已接入各种模型,不限于:
2323
国内:通义千问、文心一言、讯飞星火、智谱 GLM、DeepSeek
2424
国外:OpenAI、Ollama、Midjourney、StableDiffusion、Suno

yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/AiChatRoleEnum.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public enum AiChatRoleEnum implements IntArrayValuable {
2222
除此之外不需要除了正文内容外的其他回复,如标题、开头、任何解释性语句或道歉。
2323
"""),
2424

25-
AI_MIND_MAP_ROLE(2, "脑图助手", """
25+
AI_MIND_MAP_ROLE(2, "导图助手", """
2626
你是一位非常优秀的思维导图助手,你会把用户的所有提问都总结成思维导图,然后以 Markdown 格式输出。markdown 只需要输出一级标题,二级标题,三级标题,四级标题,最多输出四级,除此之外不要输出任何其他 markdown 标记。下面是一个合格的例子:
2727
# Geek-AI 助手
2828
## 完整的开源系统

yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/ErrorCodeConstants.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,11 @@ public interface ErrorCodeConstants {
4545
// ========== API 音乐 1-040-006-000 ==========
4646
ErrorCode MUSIC_NOT_EXISTS = new ErrorCode(1_022_006_000, "音乐不存在!");
4747

48-
4948
// ========== API 写作 1-022-007-000 ==========
5049
ErrorCode WRITE_NOT_EXISTS = new ErrorCode(1_022_007_000, "作文不存在!");
5150
ErrorCode WRITE_STREAM_ERROR = new ErrorCode(1_022_07_001, "写作生成异常!");
5251

52+
// ========== API 思维导图 1-040-008-000 ==========
53+
ErrorCode MIND_MAP_NOT_EXISTS = new ErrorCode(1_040_008_000, "思维导图不存在!");
54+
5355
}

yudao-module-ai/yudao-module-ai-biz/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<name>${project.artifactId}</name>
1414
<description>
15-
ai 模块下,接入 LLM 大模型,支持聊天、绘图、音乐、写作、思维脑图等功能
15+
ai 模块下,接入 LLM 大模型,支持聊天、绘图、音乐、写作、思维导图等功能
1616
目前已接入各种模型,不限于:
1717
国内:通义千问、文心一言、讯飞星火、智谱 GLM、DeepSeek
1818
国外:OpenAI、Ollama、Midjourney、StableDiffusion、Suno

yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/chat/vo/message/AiChatMessageSendReqVO.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package cn.iocoder.yudao.module.ai.controller.admin.chat.vo.message;
22

33
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotEmpty;
5+
import jakarta.validation.constraints.NotNull;
46
import lombok.Data;
57

6-
import javax.validation.constraints.NotEmpty;
7-
import javax.validation.constraints.NotNull;
8-
98
@Schema(description = "管理后台 - AI 聊天消息发送 Request VO")
109
@Data
1110
public class AiChatMessageSendReqVO {

yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/AiImageController.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@
55
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
66
import cn.iocoder.yudao.framework.common.pojo.PageResult;
77
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
8-
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageDrawReqVO;
9-
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImagePageReqVO;
10-
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageRespVO;
11-
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageUpdateReqVO;
8+
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.*;
129
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.midjourney.AiMidjourneyActionReqVO;
1310
import cn.iocoder.yudao.module.ai.controller.admin.image.vo.midjourney.AiMidjourneyImagineReqVO;
1411
import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO;
@@ -45,6 +42,13 @@ public CommonResult<PageResult<AiImageRespVO>> getImagePageMy(@Validated AiImage
4542
return success(BeanUtils.toBean(pageResult, AiImageRespVO.class));
4643
}
4744

45+
@GetMapping("/public-page")
46+
@Operation(summary = "获取公开的绘图分页")
47+
public CommonResult<PageResult<AiImageRespVO>> getImagePagePublic(AiImagePublicPageReqVO pageReqVO) {
48+
PageResult<AiImageDO> pageResult = imageService.getImagePagePublic(pageReqVO);
49+
return success(BeanUtils.toBean(pageResult, AiImageRespVO.class));
50+
}
51+
4852
@GetMapping("/get-my")
4953
@Operation(summary = "获取【我的】绘图记录")
5054
@Parameter(name = "id", required = true, description = "绘画编号", example = "1024")
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package cn.iocoder.yudao.module.ai.controller.admin.image.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+
7+
@Schema(description = "管理后台 - AI 绘画公开的分页 Request VO")
8+
@Data
9+
public class AiImagePublicPageReqVO extends PageParam {
10+
11+
@Schema(description = "提示词")
12+
private String prompt;
13+
14+
}
Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
11
package cn.iocoder.yudao.module.ai.controller.admin.mindmap;
22

33
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;
46
import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapGenerateReqVO;
7+
import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapPageReqVO;
8+
import cn.iocoder.yudao.module.ai.controller.admin.mindmap.vo.AiMindMapRespVO;
9+
import cn.iocoder.yudao.module.ai.dal.dataobject.mindmap.AiMindMapDO;
510
import cn.iocoder.yudao.module.ai.service.mindmap.AiMindMapService;
611
import io.swagger.v3.oas.annotations.Operation;
12+
import io.swagger.v3.oas.annotations.Parameter;
713
import io.swagger.v3.oas.annotations.tags.Tag;
14+
import jakarta.annotation.Resource;
15+
import jakarta.annotation.security.PermitAll;
16+
import jakarta.validation.Valid;
817
import org.springframework.http.MediaType;
9-
import org.springframework.web.bind.annotation.PostMapping;
10-
import org.springframework.web.bind.annotation.RequestBody;
11-
import org.springframework.web.bind.annotation.RequestMapping;
12-
import org.springframework.web.bind.annotation.RestController;
18+
import org.springframework.security.access.prepost.PreAuthorize;
19+
import org.springframework.web.bind.annotation.*;
1320
import reactor.core.publisher.Flux;
1421

15-
import javax.annotation.Resource;
16-
import javax.annotation.security.PermitAll;
17-
import javax.validation.Valid;
18-
22+
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
1923
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
2024

2125
@Tag(name = "管理后台 - AI 思维导图")
@@ -27,10 +31,29 @@ public class AiMindMapController {
2731
private AiMindMapService mindMapService;
2832

2933
@PostMapping(value = "/generate-stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
30-
@Operation(summary = "脑图生成(流式)", description = "流式返回,响应较快")
34+
@Operation(summary = "导图生成(流式)", description = "流式返回,响应较快")
3135
@PermitAll // 解决 SSE 最终响应的时候,会被 Access Denied 拦截的问题
3236
public Flux<CommonResult<String>> generateMindMap(@RequestBody @Valid AiMindMapGenerateReqVO generateReqVO) {
3337
return mindMapService.generateMindMap(generateReqVO, getLoginUserId());
3438
}
3539

40+
// ================ 导图管理 ================
41+
42+
@DeleteMapping("/delete")
43+
@Operation(summary = "删除思维导图")
44+
@Parameter(name = "id", description = "编号", required = true)
45+
@PreAuthorize("@ss.hasPermission('ai:mind-map:delete')")
46+
public CommonResult<Boolean> deleteMindMap(@RequestParam("id") Long id) {
47+
mindMapService.deleteMindMap(id);
48+
return success(true);
49+
}
50+
51+
@GetMapping("/page")
52+
@Operation(summary = "获得思维导图分页")
53+
@PreAuthorize("@ss.hasPermission('ai:mind-map:query')")
54+
public CommonResult<PageResult<AiMindMapRespVO>> getMindMapPage(@Valid AiMindMapPageReqVO pageReqVO) {
55+
PageResult<AiMindMapDO> pageResult = mindMapService.getMindMapPage(pageReqVO);
56+
return success(BeanUtils.toBean(pageResult, AiMindMapRespVO.class));
57+
}
58+
3659
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package cn.iocoder.yudao.module.ai.controller.admin.mindmap.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 AiMindMapPageReqVO extends PageParam {
19+
20+
@Schema(description = "用户编号", example = "4325")
21+
private Long userId;
22+
23+
@Schema(description = "生成内容提示", example = "Java 学习路线")
24+
private String prompt;
25+
26+
@Schema(description = "创建时间")
27+
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
28+
private LocalDateTime[] createTime;
29+
30+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package cn.iocoder.yudao.module.ai.controller.admin.mindmap.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 AiMindMapRespVO {
11+
12+
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3373")
13+
private Long id;
14+
15+
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4325")
16+
private Long userId;
17+
18+
@Schema(description = "生成内容提示", requiredMode = Schema.RequiredMode.REQUIRED, example = "Java 学习路线")
19+
private String prompt;
20+
21+
@Schema(description = "生成的思维导图内容")
22+
private String generatedContent;
23+
24+
@Schema(description = "平台", requiredMode = Schema.RequiredMode.REQUIRED, example = "OpenAI")
25+
private String platform;
26+
27+
@Schema(description = "模型", requiredMode = Schema.RequiredMode.REQUIRED, example = "gpt-3.5-turbo-0125")
28+
private String model;
29+
30+
@Schema(description = "错误信息")
31+
private String errorMessage;
32+
33+
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
34+
private LocalDateTime createTime;
35+
36+
}

0 commit comments

Comments
 (0)