Commit ecf4df86204e278cc1c66f788947b4eb9906bc87
1 parent
7b3401e2
【功能新增】AI:腾讯图像创作
Showing
13 changed files
with
353 additions
and
0 deletions
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/creation/AiartCreationController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.controller.admin.creation; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 4 | +import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.AiartReplaceBackgroundReqVO; | |
| 5 | +import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.AiartReplaceBackgroundResVO; | |
| 6 | +import cn.iocoder.yudao.module.ai.service.creation.AiartCreationService; | |
| 7 | +import io.swagger.v3.oas.annotations.Operation; | |
| 8 | +import io.swagger.v3.oas.annotations.tags.Tag; | |
| 9 | +import jakarta.annotation.Resource; | |
| 10 | +import jakarta.validation.Valid; | |
| 11 | +import org.springframework.validation.annotation.Validated; | |
| 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; | |
| 16 | + | |
| 17 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 18 | +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | |
| 19 | + | |
| 20 | +@Tag(name = "管理后台 - 艺术创作") | |
| 21 | +@RestController | |
| 22 | +@RequestMapping("/ai/artcreation") | |
| 23 | +@Validated | |
| 24 | +public class AiartCreationController { | |
| 25 | + | |
| 26 | + @Resource | |
| 27 | + private AiartCreationService aiartCreationService; | |
| 28 | + | |
| 29 | + @Operation(summary = "商品图替换背景") | |
| 30 | + @PostMapping("/replacebackground") | |
| 31 | + public CommonResult<AiartReplaceBackgroundResVO> replaceBackground(@Valid @RequestBody AiartReplaceBackgroundReqVO replaceBackgroundReqVO) { | |
| 32 | + return success(aiartCreationService.replaceBackground(getLoginUserId(), replaceBackgroundReqVO)); | |
| 33 | + } | |
| 34 | + | |
| 35 | + | |
| 36 | +} | |
| 0 | 37 | \ No newline at end of file | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/creation/AiartStyleController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.controller.admin.creation; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 4 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | |
| 5 | +import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateReqVO; | |
| 6 | +import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateResVO; | |
| 7 | +import cn.iocoder.yudao.module.ai.dal.dataobject.creation.AiartStyleBackgroundTemplateDO; | |
| 8 | +import cn.iocoder.yudao.module.ai.service.creation.AiartStyleService; | |
| 9 | +import io.swagger.v3.oas.annotations.Operation; | |
| 10 | +import io.swagger.v3.oas.annotations.tags.Tag; | |
| 11 | +import jakarta.annotation.Resource; | |
| 12 | +import jakarta.validation.Valid; | |
| 13 | +import org.springframework.security.access.prepost.PreAuthorize; | |
| 14 | +import org.springframework.validation.annotation.Validated; | |
| 15 | +import org.springframework.web.bind.annotation.PostMapping; | |
| 16 | +import org.springframework.web.bind.annotation.RequestBody; | |
| 17 | +import org.springframework.web.bind.annotation.RequestMapping; | |
| 18 | +import org.springframework.web.bind.annotation.RestController; | |
| 19 | + | |
| 20 | +import java.util.List; | |
| 21 | + | |
| 22 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 23 | + | |
| 24 | +@Tag(name = "管理后台 - 艺术创作模版") | |
| 25 | +@RestController | |
| 26 | +@RequestMapping("/ai/artstyle") | |
| 27 | +@Validated | |
| 28 | +public class AiartStyleController { | |
| 29 | + | |
| 30 | + @Resource | |
| 31 | + private AiartStyleService aiartStyleService; | |
| 32 | + | |
| 33 | + @PostMapping("/backgroundtemplate-list") | |
| 34 | + @Operation(summary = "获取商品背景模版列表") | |
| 35 | + @PreAuthorize("@ss.hasPermission('ai:artstyle-background:query')") | |
| 36 | + public CommonResult<List<BackgroundTemplateResVO>> queryBackgroundStyle(@Valid @RequestBody BackgroundTemplateReqVO backgroundTemplateReqVO) { | |
| 37 | + List<AiartStyleBackgroundTemplateDO> res = aiartStyleService.queryBackgroundStyle(backgroundTemplateReqVO); | |
| 38 | + return success(BeanUtils.toBean(res,BackgroundTemplateResVO.class)); | |
| 39 | + } | |
| 40 | +} | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/creation/vo/style/AiartReplaceBackgroundReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import jakarta.validation.constraints.NotEmpty; | |
| 5 | +import jakarta.validation.constraints.Size; | |
| 6 | +import lombok.Data; | |
| 7 | + | |
| 8 | +@Schema(description = "管理后台 - 商品替换背景请求 VO") | |
| 9 | +@Data | |
| 10 | +public class AiartReplaceBackgroundReqVO { | |
| 11 | + | |
| 12 | + @Schema(description = "提示词", requiredMode = Schema.RequiredMode.REQUIRED, example = "画一个长城") | |
| 13 | + @NotEmpty(message = "提示词不能为空") | |
| 14 | + @Size(max = 1200, message = "提示词最大 1200") | |
| 15 | + private String prompt; | |
| 16 | + | |
| 17 | +} | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/creation/vo/style/AiartReplaceBackgroundResVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +@Schema(description = "管理后台 - 商品替换背景结果 VO") | |
| 7 | +@Data | |
| 8 | +public class AiartReplaceBackgroundResVO { | |
| 9 | + | |
| 10 | + @Schema(description = "结果url", requiredMode = Schema.RequiredMode.REQUIRED, example = "根据参数不同不一样") | |
| 11 | + private String resultImage; | |
| 12 | + | |
| 13 | + @Schema(description = "唯一请求 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "由服务端生成") | |
| 14 | + private String requestId; | |
| 15 | + | |
| 16 | + @Schema(description = "MaskUrl", requiredMode = Schema.RequiredMode.REQUIRED, example = "如果 MaskUrl 未传,则返回使用内置商品分割算法得到的 Mask 结果") | |
| 17 | + private String maskImage; | |
| 18 | +} | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/creation/vo/style/BackgroundTemplateReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +@Schema(description = "管理后台 - AI API 密钥新增/修改 Request VO") | |
| 7 | +@Data | |
| 8 | +public class BackgroundTemplateReqVO { | |
| 9 | + | |
| 10 | + @Schema(description = "一级级次名称", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "通用") | |
| 11 | + private String fistLevelName; | |
| 12 | + | |
| 13 | + @Schema(description = "二级级次名称", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "色彩背景") | |
| 14 | + private String secondLevelName; | |
| 15 | + | |
| 16 | +} | |
| 0 | 17 | \ No newline at end of file | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/creation/vo/style/BackgroundTemplateResVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style; | |
| 2 | + | |
| 3 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +@Schema(description = "管理后台 - 商品替换背景模版 VO") | |
| 7 | +@Data | |
| 8 | +public class BackgroundTemplateResVO { | |
| 9 | + | |
| 10 | + @Schema(description = "一级分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "汽车、通用") | |
| 11 | + private String levelFirst; | |
| 12 | + | |
| 13 | + @Schema(description = "二级分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "色彩背景") | |
| 14 | + private String levelSecond; | |
| 15 | + | |
| 16 | + @Schema(description = "背景模版名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "彩虹渐变") | |
| 17 | + private String name; | |
| 18 | + | |
| 19 | + @Schema(description = "背景模版提示词", requiredMode = Schema.RequiredMode.REQUIRED, example = "背景为彩虹渐变墙面,亮暖色,清新简约风格,喷涂效果") | |
| 20 | + private String prompt; | |
| 21 | + | |
| 22 | + @Schema(description = "背景模版商品示例", requiredMode = Schema.RequiredMode.REQUIRED, example = "小熊玩偶") | |
| 23 | + private String demProduct; | |
| 24 | + | |
| 25 | + @Schema(description = "背景模版商品示例效果", requiredMode = Schema.RequiredMode.REQUIRED, example = "url") | |
| 26 | + private String demUrl; | |
| 27 | +} | |
| 28 | + | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/creation/AiartStyleBackgroundTemplateDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.dal.dataobject.creation; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | |
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | |
| 5 | +import com.baomidou.mybatisplus.annotation.KeySequence; | |
| 6 | +import com.baomidou.mybatisplus.annotation.TableId; | |
| 7 | +import com.baomidou.mybatisplus.annotation.TableName; | |
| 8 | +import lombok.AllArgsConstructor; | |
| 9 | +import lombok.Builder; | |
| 10 | +import lombok.Data; | |
| 11 | +import lombok.NoArgsConstructor; | |
| 12 | + | |
| 13 | +/** | |
| 14 | + * AI art商品背景风格 DO | |
| 15 | + * | |
| 16 | + * @author 芋道源码 | |
| 17 | + */ | |
| 18 | +@TableName("ai_backgroundtemplate") | |
| 19 | +@KeySequence("ai_chat_conversation_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | |
| 20 | +@Data | |
| 21 | +@Builder | |
| 22 | +@NoArgsConstructor | |
| 23 | +@AllArgsConstructor | |
| 24 | +public class AiartStyleBackgroundTemplateDO extends BaseDO { | |
| 25 | + /** | |
| 26 | + * 编号 | |
| 27 | + */ | |
| 28 | + @TableId | |
| 29 | + private Long id; | |
| 30 | + | |
| 31 | + /** | |
| 32 | + * 名称 | |
| 33 | + */ | |
| 34 | + private String levelFirst; | |
| 35 | + | |
| 36 | + /** | |
| 37 | + * 名称 | |
| 38 | + */ | |
| 39 | + private String levelSecond; | |
| 40 | + /** | |
| 41 | + * 模版名称 | |
| 42 | + */ | |
| 43 | + private String name; | |
| 44 | + /** | |
| 45 | + * 模版提示词 | |
| 46 | + */ | |
| 47 | + private String prompt; | |
| 48 | + /** | |
| 49 | + * 示例商品 | |
| 50 | + */ | |
| 51 | + private String demoProduct; | |
| 52 | + | |
| 53 | + /** | |
| 54 | + * 示例效果 | |
| 55 | + */ | |
| 56 | + private String demoUrl; | |
| 57 | + | |
| 58 | + /** | |
| 59 | + * 状态 | |
| 60 | + * | |
| 61 | + * 枚举 {@link CommonStatusEnum} | |
| 62 | + */ | |
| 63 | + private Integer status; | |
| 64 | + | |
| 65 | +} | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/mysql/creation/AiartStyleBackgroundTemplateMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.dal.mysql.creation; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | |
| 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.creation.vo.style.BackgroundTemplateReqVO; | |
| 7 | +import cn.iocoder.yudao.module.ai.dal.dataobject.creation.AiartStyleBackgroundTemplateDO; | |
| 8 | +import org.apache.ibatis.annotations.Mapper; | |
| 9 | + | |
| 10 | +import java.util.List; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * AI style分隔 Mapper | |
| 14 | + * | |
| 15 | + * @author 芋道源码 | |
| 16 | + */ | |
| 17 | +@Mapper | |
| 18 | +public interface AiartStyleBackgroundTemplateMapper extends BaseMapperX<AiartStyleBackgroundTemplateDO> { | |
| 19 | + | |
| 20 | + /** | |
| 21 | + * 获取有效的商品后端模版 | |
| 22 | + * @param reqVO 请求对象 | |
| 23 | + * @return 结果 | |
| 24 | + */ | |
| 25 | + default List<AiartStyleBackgroundTemplateDO> selectList(BackgroundTemplateReqVO reqVO) { | |
| 26 | + return selectList(new LambdaQueryWrapperX<AiartStyleBackgroundTemplateDO>() | |
| 27 | + .eqIfPresent(AiartStyleBackgroundTemplateDO::getLevelFirst,reqVO.getFistLevelName()) | |
| 28 | + .eqIfPresent(AiartStyleBackgroundTemplateDO::getLevelSecond,reqVO.getSecondLevelName()) | |
| 29 | + .eqIfPresent(AiartStyleBackgroundTemplateDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) | |
| 30 | + .orderByDesc(AiartStyleBackgroundTemplateDO::getId)); | |
| 31 | + } | |
| 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/service/creation/AiartCreationService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.service.creation; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.AiartReplaceBackgroundReqVO; | |
| 4 | +import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.AiartReplaceBackgroundResVO; | |
| 5 | + | |
| 6 | +/** | |
| 7 | + * AI创作Service 接口 | |
| 8 | + * | |
| 9 | + * @author zzt | |
| 10 | + */ | |
| 11 | +public interface AiartCreationService { | |
| 12 | + | |
| 13 | + | |
| 14 | + /** | |
| 15 | + * 替换商品背景图片 | |
| 16 | + * @param loginUserId 当前登录用户 | |
| 17 | + * @param replaceBackgroundReqVO 请求对象 | |
| 18 | + * @return 结果 | |
| 19 | + */ | |
| 20 | + AiartReplaceBackgroundResVO replaceBackground(Long loginUserId, AiartReplaceBackgroundReqVO replaceBackgroundReqVO); | |
| 21 | +} | |
| 0 | 22 | \ No newline at end of file | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/creation/AiartCreationServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.service.creation; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.AiartReplaceBackgroundReqVO; | |
| 4 | +import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.AiartReplaceBackgroundResVO; | |
| 5 | +import org.springframework.stereotype.Service; | |
| 6 | +import org.springframework.validation.annotation.Validated; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * AI创作Service 实现类 | |
| 10 | + * | |
| 11 | + * @author zzt | |
| 12 | + */ | |
| 13 | +@Service | |
| 14 | +@Validated | |
| 15 | +public class AiartCreationServiceImpl implements AiartCreationService { | |
| 16 | + | |
| 17 | + | |
| 18 | + @Override | |
| 19 | + public AiartReplaceBackgroundResVO replaceBackground(Long loginUserId, AiartReplaceBackgroundReqVO replaceBackgroundReqVO) { | |
| 20 | + return null; | |
| 21 | + } | |
| 22 | +} | |
| 0 | 23 | \ No newline at end of file | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/creation/AiartStyleService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.service.creation; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateReqVO; | |
| 4 | +import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateResVO; | |
| 5 | +import cn.iocoder.yudao.module.ai.dal.dataobject.creation.AiartStyleBackgroundTemplateDO; | |
| 6 | + | |
| 7 | +import java.util.List; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * AI风格Service 接口 | |
| 11 | + * | |
| 12 | + * @author zzt | |
| 13 | + */ | |
| 14 | +public interface AiartStyleService { | |
| 15 | + | |
| 16 | + | |
| 17 | + /** | |
| 18 | + * 查询商品背景模版列表 | |
| 19 | + * @param backgroundTemplateReqVO 商品背景模版请求对象 | |
| 20 | + * @return 结果 | |
| 21 | + */ | |
| 22 | + List<AiartStyleBackgroundTemplateDO> queryBackgroundStyle(BackgroundTemplateReqVO backgroundTemplateReqVO); | |
| 23 | +} | |
| 0 | 24 | \ No newline at end of file | ... | ... |
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/creation/AiartStyleServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.ai.service.creation; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateReqVO; | |
| 4 | +import cn.iocoder.yudao.module.ai.controller.admin.creation.vo.style.BackgroundTemplateResVO; | |
| 5 | +import cn.iocoder.yudao.module.ai.dal.dataobject.creation.AiartStyleBackgroundTemplateDO; | |
| 6 | +import cn.iocoder.yudao.module.ai.dal.mysql.creation.AiartStyleBackgroundTemplateMapper; | |
| 7 | +import cn.iocoder.yudao.module.ai.dal.mysql.model.AiApiKeyMapper; | |
| 8 | +import jakarta.annotation.Resource; | |
| 9 | + | |
| 10 | +import java.util.List; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * AI风格Service 接口 | |
| 14 | + * | |
| 15 | + * @author zzt | |
| 16 | + */ | |
| 17 | +public class AiartStyleServiceImpl implements AiartStyleService{ | |
| 18 | + | |
| 19 | + @Resource | |
| 20 | + private AiartStyleBackgroundTemplateMapper backgroundTemplateMapper; | |
| 21 | + | |
| 22 | + | |
| 23 | + @Override | |
| 24 | + public List<AiartStyleBackgroundTemplateDO> queryBackgroundStyle(BackgroundTemplateReqVO backgroundTemplateReqVO) { | |
| 25 | + return backgroundTemplateMapper.selectList(backgroundTemplateReqVO); | |
| 26 | + } | |
| 27 | +} | |
| 0 | 28 | \ No newline at end of file | ... | ... |
yudao-module-ai/yudao-spring-boot-starter-ai/pom.xml
| ... | ... | @@ -117,6 +117,13 @@ |
| 117 | 117 | </exclusions> |
| 118 | 118 | </dependency> |
| 119 | 119 | |
| 120 | + <!-- 腾讯大模型图像创作引擎--> | |
| 121 | + <dependency> | |
| 122 | + <groupId>com.tencentcloudapi</groupId> | |
| 123 | + <artifactId>tencentcloud-sdk-java-aiart</artifactId> | |
| 124 | + <version>3.1.1215</version> | |
| 125 | + </dependency> | |
| 126 | + | |
| 120 | 127 | <!-- Test 测试相关 --> |
| 121 | 128 | <dependency> |
| 122 | 129 | <groupId>org.springframework.boot</groupId> | ... | ... |