From a1730b2d5289adad98f8ca5f42e5966028ba60c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E9=9B=A8?= <2375294554@qq.com> Date: Fri, 21 Mar 2025 14:57:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=9F=B3=E8=89=B2=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E7=9A=84=E5=8A=9F=E8=83=BD=20--TimbreController.java?= =?UTF-8?q?=20=E9=9F=B3=E8=89=B2=E6=8E=A7=E5=88=B6=E5=B1=82=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=88=86=E9=A1=B5=EF=BC=8C=E5=88=A0?= =?UTF-8?q?=E9=99=A4=EF=BC=8C=E4=BF=9D=E5=AD=98=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20--TimbreDetailsVO.java=20=E9=9F=B3?= =?UTF-8?q?=E8=89=B2=E8=AF=A6=E6=83=85=E5=B1=95=E7=A4=BA=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=20--TimbrePageDTO.java=20=E9=9F=B3=E8=89=B2=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E5=8F=82=E6=95=B0=20--TimbreDataDTO.java=20=E9=9F=B3=E8=89=B2?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=95=B0=E6=8D=AE=E5=8F=82=E6=95=B0=20--Timb?= =?UTF-8?q?reDao.java=20=E9=9F=B3=E8=89=B2=E6=8C=81=E4=B9=85=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=20--TimbreService.java=20=E9=9F=B3=E8=89=B2=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E5=B1=82=E5=AE=9A=E4=B9=89=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=E5=88=86=E9=A1=B5=EF=BC=8C=E5=88=A0=E9=99=A4=EF=BC=8C?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=EF=BC=8C=E4=BF=AE=E6=94=B9=EF=BC=8C=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=AF=A6=E6=83=85=20--TimbreServiceImpl.java=20--Timb?= =?UTF-8?q?reEntity.java=20=E9=9F=B3=E8=89=B2=E8=A1=A8=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E7=9A=84=E5=AE=9E=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Timbre/controller/TimbreController.java | 57 +++++++++++++ .../xiaozhi/modules/Timbre/dao/TimbreDao.java | 14 +++ .../modules/Timbre/dto/TimbreDataDTO.java | 36 ++++++++ .../modules/Timbre/dto/TimbrePageDTO.java | 26 ++++++ .../modules/Timbre/entity/TimbreEntity.java | 48 +++++++++++ .../modules/Timbre/service/TimbreService.java | 49 +++++++++++ .../service/impl/TimbreServiceImpl.java | 85 +++++++++++++++++++ .../modules/Timbre/vo/TimbreDetailsVO.java | 35 ++++++++ 8 files changed, 350 insertions(+) create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/Timbre/controller/TimbreController.java create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/Timbre/dao/TimbreDao.java create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/Timbre/dto/TimbreDataDTO.java create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/Timbre/dto/TimbrePageDTO.java create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/Timbre/entity/TimbreEntity.java create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/Timbre/service/TimbreService.java create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/Timbre/service/impl/TimbreServiceImpl.java create mode 100644 main/manager-api/src/main/java/xiaozhi/modules/Timbre/vo/TimbreDetailsVO.java diff --git a/main/manager-api/src/main/java/xiaozhi/modules/Timbre/controller/TimbreController.java b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/controller/TimbreController.java new file mode 100644 index 00000000..41972f27 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/controller/TimbreController.java @@ -0,0 +1,57 @@ +package xiaozhi.modules.Timbre.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.*; +import xiaozhi.common.page.PageData; +import xiaozhi.common.utils.Result; +import xiaozhi.modules.Timbre.dto.TimbreDataDTO; +import xiaozhi.modules.Timbre.dto.TimbrePageDTO; +import xiaozhi.modules.Timbre.service.TimbreService; +import xiaozhi.modules.Timbre.vo.TimbreDetailsVO; + +/** + * 音色控制层 + * @author zjy + * @since 2025-3-21 + */ +@AllArgsConstructor +@RestController +@RequestMapping("/ttsVoice") +@Tag(name = "音色管理") +public class TimbreController { + private final TimbreService timbreService; + + @GetMapping + @Operation(summary = "分页查找") +// @RequiresPermissions("sys:role:normal") + public Result> page(@RequestParam TimbrePageDTO dto) { + PageData page = timbreService.page(dto); + return new Result>().ok(page); + } + @PostMapping + @Operation(summary = "音色保存") +// @RequiresPermissions("sys:role:normal") + public Result save(@RequestBody TimbreDataDTO dto) { + timbreService.save(dto); + return new Result<>(); + } + @PutMapping("/{id}") + @Operation(summary = "音色修改") +// @RequiresPermissions("sys:role:normal") + public Result update(@PathVariable Long id,@RequestBody TimbreDataDTO dto) { + timbreService.update(id,dto); + return new Result<>(); + } + @DeleteMapping("/{id}") + @Operation(summary = "音色删除") +// @RequiresPermissions("sys:role:normal") + public Result delete(@PathVariable Long id) { + timbreService.delete(new Long[]{id}); + return new Result<>(); + } + + + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/Timbre/dao/TimbreDao.java b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/dao/TimbreDao.java new file mode 100644 index 00000000..d3273eed --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/dao/TimbreDao.java @@ -0,0 +1,14 @@ +package xiaozhi.modules.Timbre.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import xiaozhi.modules.Timbre.entity.TimbreEntity; + +/** + * 音色持久层定义 + * @author zjy + * @since 2025-3-21 + */ +@Mapper +public interface TimbreDao extends BaseMapper { +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/Timbre/dto/TimbreDataDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/dto/TimbreDataDTO.java new file mode 100644 index 00000000..6ba7c47e --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/dto/TimbreDataDTO.java @@ -0,0 +1,36 @@ +package xiaozhi.modules.Timbre.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + + +/** + * 音色表数据DTO + * @author zjy + * @since 2025-3-21 + */ +@Data +@Schema(description = "音色表信息") +public class TimbreDataDTO { + + @Schema(description = "语言") + private String languages; + + @Schema(description = "音色名称") + private String name; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "排序") + private long sort; + + @Schema(description = "对应 TTS 模型主键") + private String ttsModelId; + + @Schema(description = "音色编码") + private String ttsVoice; + + @Schema(description = "音频播放地址") + private String voiceDemo; +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/Timbre/dto/TimbrePageDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/dto/TimbrePageDTO.java new file mode 100644 index 00000000..958d6d47 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/dto/TimbrePageDTO.java @@ -0,0 +1,26 @@ +package xiaozhi.modules.Timbre.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 音色分页参数DTO + * @author zjy + * @since 2025-3-21 + */ +@Data +@Schema(description = "音色分页参数") +public class TimbrePageDTO { + + @Schema(description = "对应 TTS 模型主键") + private String ttsModelId; + + @Schema(description = "音色名称") + private String name; + + @Schema(description = "页数") + private Long page; + + @Schema(description = "显示列数") + private Long limit; +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/Timbre/entity/TimbreEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/entity/TimbreEntity.java new file mode 100644 index 00000000..23f71c59 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/entity/TimbreEntity.java @@ -0,0 +1,48 @@ +package xiaozhi.modules.Timbre.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import xiaozhi.common.entity.BaseEntity; + +import java.util.Date; + +/** + * 音色表实体类 + * @author zjy + * @since 2025-3-21 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("ai_tts_voice") +@Schema(description = "音色信息") +public class TimbreEntity extends BaseEntity { + + @Schema(description = "语言") + private String languages; + + @Schema(description = "音色名称") + private String name; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "排序") + private long sort; + + @Schema(description = "对应 TTS 模型主键") + private String ttsModelId; + + @Schema(description = "音色编码") + private String ttsVoice; + + @Schema(description = "音频播放地址") + private String voiceDemo; + + @Schema(description = "更新者") + private Long updater; + + @Schema(description = "更新时间") + private Date updateDate; +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/Timbre/service/TimbreService.java b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/service/TimbreService.java new file mode 100644 index 00000000..7166c9c3 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/service/TimbreService.java @@ -0,0 +1,49 @@ +package xiaozhi.modules.Timbre.service; + +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.BaseService; +import xiaozhi.modules.Timbre.dto.TimbreDataDTO; +import xiaozhi.modules.Timbre.dto.TimbrePageDTO; +import xiaozhi.modules.Timbre.entity.TimbreEntity; +import xiaozhi.modules.Timbre.vo.TimbreDetailsVO; + + +/** + * 音色的业务层的定义 + * @author zjy + * @since 2025-3-21 + */ +public interface TimbreService extends BaseService { + /** + * 分页获取音色指定tts的下的音色 + * @param dto 分页查找参数 + * @return 音色列表分页数据 + */ + PageData page(TimbrePageDTO dto); + + /** + * 获取音色指定id的详情信息 + * @param timbreId 音色表id + * @return 音色信息 + */ + TimbreDetailsVO get(Long timbreId); + + /** + * 保存音色信息 + * @param dto 需要保存数据 + */ + void save(TimbreDataDTO dto); + + /** + * 保存音色信息 + * @param timbreId 需要修改的id + * @param dto 需要修改的数据 + */ + void update(Long timbreId,TimbreDataDTO dto); + + /** + * 批量删除音色 + * @param ids 需要被删除的音色id列表 + */ + void delete(Long[] ids); +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/Timbre/service/impl/TimbreServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/service/impl/TimbreServiceImpl.java new file mode 100644 index 00000000..dddd0103 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/service/impl/TimbreServiceImpl.java @@ -0,0 +1,85 @@ +package xiaozhi.modules.Timbre.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import xiaozhi.common.constant.Constant; +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.impl.BaseServiceImpl; +import xiaozhi.common.utils.ConvertUtils; +import xiaozhi.modules.Timbre.dao.TimbreDao; +import xiaozhi.modules.Timbre.dto.TimbreDataDTO; +import xiaozhi.modules.Timbre.dto.TimbrePageDTO; +import xiaozhi.modules.Timbre.service.TimbreService; +import xiaozhi.modules.Timbre.entity.TimbreEntity; +import xiaozhi.modules.Timbre.vo.TimbreDetailsVO; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +/** + * 音色的业务层的实现 + * @author zjy + * @since 2025-3-21 + */ +@Service +public class TimbreServiceImpl extends BaseServiceImpl implements TimbreService { + + + @Override + public PageData page(TimbrePageDTO dto) { + Map params = new HashMap(); + params.put(Constant.PAGE, dto.getPage()); + params.put(Constant.LIMIT,dto.getLimit()); + IPage page = baseDao.selectPage( + getPage(params, "sort", true), + //定义查询条件 + new QueryWrapper() + //必须按照ttsID查找 + .eq("tts_model_id",dto.getTtsModelId()) + //如果有音色名字,按照音色名模糊查找 + .like(StringUtils.isNotBlank(dto.getName()),"name",dto.getName()) + ); + + return getPageData(page, TimbreDetailsVO.class); + } + + @Override + public TimbreDetailsVO get(Long timbreId) { + TimbreEntity entity = baseDao.selectById(timbreId); + return ConvertUtils.sourceToTarget(entity, TimbreDetailsVO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(TimbreDataDTO dto) { + isTtsModelId(dto.getTtsModelId()); + TimbreEntity timbreEntity = ConvertUtils.sourceToTarget(dto, TimbreEntity.class); + baseDao.insert(timbreEntity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(Long timbreId, TimbreDataDTO dto) { + isTtsModelId(dto.getTtsModelId()); + TimbreEntity timbreEntity = ConvertUtils.sourceToTarget(dto, TimbreEntity.class); + timbreEntity.setId(timbreId); + baseDao.updateById(timbreEntity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long[] ids) { + baseDao.deleteBatchIds(Arrays.asList(ids)); + } + + /** + * 处理是不是tts模型的id + */ + private void isTtsModelId(String ttsModelId){ + //等模型配置那边写好调用方法判断 + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/Timbre/vo/TimbreDetailsVO.java b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/vo/TimbreDetailsVO.java new file mode 100644 index 00000000..5384d356 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/Timbre/vo/TimbreDetailsVO.java @@ -0,0 +1,35 @@ +package xiaozhi.modules.Timbre.vo; + +import io.swagger.v3.oas.annotations.media.Schema; + +/** + * 音色详情展示VO + * @author zjy + * @since 2025-3-21 + */ +public class TimbreDetailsVO { + @Schema(description = "音色id") + private Long id; + + @Schema(description = "语言") + private String languages; + + @Schema(description = "音色名称") + private String name; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "排序") + private long sort; + + @Schema(description = "对应 TTS 模型主键") + private String ttsModelId; + + @Schema(description = "音色编码") + private String ttsVoice; + + @Schema(description = "音频播放地址") + private String voiceDemo; + +}