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 | \ 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> |