Commit ecf4df86204e278cc1c66f788947b4eb9906bc87

Authored by zzt
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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 28 \ No newline at end of file
yudao-module-ai/yudao-spring-boot-starter-ai/pom.xml
@@ -117,6 +117,13 @@ @@ -117,6 +117,13 @@
117 </exclusions> 117 </exclusions>
118 </dependency> 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 <!-- Test 测试相关 --> 127 <!-- Test 测试相关 -->
121 <dependency> 128 <dependency>
122 <groupId>org.springframework.boot</groupId> 129 <groupId>org.springframework.boot</groupId>