Compare commits

...

2 Commits

19 changed files with 527 additions and 63 deletions

View File

@@ -1,5 +1,6 @@
package com.yolo.keyboard.controller.admin.aicompanion; package com.yolo.keyboard.controller.admin.aicompanion;
import com.yolo.keyboard.dal.dataobject.aicompanion.AiCompanionI18nDO;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@@ -101,4 +102,56 @@ public class KeyboardAiCompanionController {
BeanUtils.toBean(list, KeyboardAiCompanionRespVO.class)); BeanUtils.toBean(list, KeyboardAiCompanionRespVO.class));
} }
// ==================== 子表AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍 ====================
@GetMapping("/ai-companion-i18n/page")
@Operation(summary = "获得AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍分页")
@Parameter(name = "id", description = "主键ID")
@PreAuthorize("@ss.hasPermission('keyboard:ai-companion:query')")
public CommonResult<PageResult<AiCompanionI18nDO>> getAiCompanionI18nPage(PageParam pageReqVO,
@RequestParam("id") Long id) {
return success(aiCompanionService.getAiCompanionI18nPage(pageReqVO, id));
}
@PostMapping("/ai-companion-i18n/create")
@Operation(summary = "创建AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍")
@PreAuthorize("@ss.hasPermission('keyboard:ai-companion:create')")
public CommonResult<Long> createAiCompanionI18n(@Valid @RequestBody AiCompanionI18nDO aiCompanionI18n) {
return success(aiCompanionService.createAiCompanionI18n(aiCompanionI18n));
}
@PutMapping("/ai-companion-i18n/update")
@Operation(summary = "更新AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍")
@PreAuthorize("@ss.hasPermission('keyboard:ai-companion:update')")
public CommonResult<Boolean> updateAiCompanionI18n(@Valid @RequestBody AiCompanionI18nDO aiCompanionI18n) {
aiCompanionService.updateAiCompanionI18n(aiCompanionI18n);
return success(true);
}
@DeleteMapping("/ai-companion-i18n/delete")
@Parameter(name = "id", description = "编号", required = true)
@Operation(summary = "删除AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍")
@PreAuthorize("@ss.hasPermission('keyboard:ai-companion:delete')")
public CommonResult<Boolean> deleteAiCompanionI18n(@RequestParam("id") Long id) {
aiCompanionService.deleteAiCompanionI18n(id);
return success(true);
}
@DeleteMapping("/ai-companion-i18n/delete-list")
@Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍")
@PreAuthorize("@ss.hasPermission('keyboard:ai-companion:delete')")
public CommonResult<Boolean> deleteAiCompanionI18nList(@RequestParam("ids") List<Long> ids) {
aiCompanionService.deleteAiCompanionI18nListByIds(ids);
return success(true);
}
@GetMapping("/ai-companion-i18n/get")
@Operation(summary = "获得AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('keyboard:ai-companion:query')")
public CommonResult<AiCompanionI18nDO> getAiCompanionI18n(@RequestParam("id") Long id) {
return success(aiCompanionService.getAiCompanionI18n(id));
}
} }

View File

@@ -13,9 +13,6 @@ import static com.yolo.keyboard.framework.common.util.date.DateUtils.FORMAT_YEAR
@Data @Data
public class KeyboardAiCompanionPageReqVO extends PageParam { public class KeyboardAiCompanionPageReqVO extends PageParam {
@Schema(description = "角色名称展示用Katie Leona", example = "张三")
private String name;
@Schema(description = "角色头像URL用于列表页和聊天页", example = "https://www.iocoder.cn") @Schema(description = "角色头像URL用于列表页和聊天页", example = "https://www.iocoder.cn")
private String avatarUrl; private String avatarUrl;
@@ -28,14 +25,8 @@ public class KeyboardAiCompanionPageReqVO extends PageParam {
@Schema(description = "角色年龄段描述20s、25-30") @Schema(description = "角色年龄段描述20s、25-30")
private String ageRange; private String ageRange;
@Schema(description = "一句话人设描述,用于卡片或列表展示")
private String shortDesc;
@Schema(description = "角色详细介绍文案,用于角色详情页")
private String introText;
@Schema(description = "角色性格标签数组(如:温柔、黏人、治愈)") @Schema(description = "角色性格标签数组(如:温柔、黏人、治愈)")
private List<String> personalityTags; private Object personalityTags;
@Schema(description = "角色说话风格(如:撒娇型、理性型、活泼型)") @Schema(description = "角色说话风格(如:撒娇型、理性型、活泼型)")
private String speakingStyle; private String speakingStyle;
@@ -67,7 +58,7 @@ public class KeyboardAiCompanionPageReqVO extends PageParam {
@Schema(description = "开场白音频") @Schema(description = "开场白音频")
private String prologueAudio; private String prologueAudio;
@Schema(description = "音频Id", example = "31328") @Schema(description = "音频Id", example = "4155")
private String voiceId; private String voiceId;
} }

View File

@@ -12,14 +12,10 @@ import cn.idev.excel.annotation.*;
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
public class KeyboardAiCompanionRespVO { public class KeyboardAiCompanionRespVO {
@Schema(description = "陪聊角色唯一ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7816") @Schema(description = "陪聊角色唯一ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28180")
@ExcelProperty("陪聊角色唯一ID") @ExcelProperty("陪聊角色唯一ID")
private Long id; private Long id;
@Schema(description = "角色名称展示用Katie Leona", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@ExcelProperty("角色名称展示用Katie Leona")
private String name;
@Schema(description = "角色头像URL用于列表页和聊天页", example = "https://www.iocoder.cn") @Schema(description = "角色头像URL用于列表页和聊天页", example = "https://www.iocoder.cn")
@ExcelProperty("角色头像URL用于列表页和聊天页") @ExcelProperty("角色头像URL用于列表页和聊天页")
private String avatarUrl; private String avatarUrl;
@@ -36,17 +32,9 @@ public class KeyboardAiCompanionRespVO {
@ExcelProperty("角色年龄段描述20s、25-30") @ExcelProperty("角色年龄段描述20s、25-30")
private String ageRange; private String ageRange;
@Schema(description = "一句话人设描述,用于卡片或列表展示")
@ExcelProperty("一句话人设描述,用于卡片或列表展示")
private String shortDesc;
@Schema(description = "角色详细介绍文案,用于角色详情页")
@ExcelProperty("角色详细介绍文案,用于角色详情页")
private String introText;
@Schema(description = "角色性格标签数组(如:温柔、黏人、治愈)") @Schema(description = "角色性格标签数组(如:温柔、黏人、治愈)")
@ExcelProperty("角色性格标签数组(如:温柔、黏人、治愈)") @ExcelProperty("角色性格标签数组(如:温柔、黏人、治愈)")
private List<String> personalityTags; private Object personalityTags;
@Schema(description = "角色说话风格(如:撒娇型、理性型、活泼型)") @Schema(description = "角色说话风格(如:撒娇型、理性型、活泼型)")
@ExcelProperty("角色说话风格(如:撒娇型、理性型、活泼型)") @ExcelProperty("角色说话风格(如:撒娇型、理性型、活泼型)")
@@ -88,7 +76,7 @@ public class KeyboardAiCompanionRespVO {
@ExcelProperty("开场白音频") @ExcelProperty("开场白音频")
private String prologueAudio; private String prologueAudio;
@Schema(description = "音频Id", example = "31328") @Schema(description = "音频Id", example = "4155")
@ExcelProperty("音频Id") @ExcelProperty("音频Id")
private String voiceId; private String voiceId;

View File

@@ -11,13 +11,9 @@ import java.time.LocalDateTime;
@Data @Data
public class KeyboardAiCompanionSaveReqVO { public class KeyboardAiCompanionSaveReqVO {
@Schema(description = "陪聊角色唯一ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7816") @Schema(description = "陪聊角色唯一ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28180")
private Long id; private Long id;
@Schema(description = "角色名称展示用Katie Leona", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@NotEmpty(message = "角色名称展示用Katie Leona不能为空")
private String name;
@Schema(description = "角色头像URL用于列表页和聊天页", example = "https://www.iocoder.cn") @Schema(description = "角色头像URL用于列表页和聊天页", example = "https://www.iocoder.cn")
private String avatarUrl; private String avatarUrl;
@@ -30,14 +26,8 @@ public class KeyboardAiCompanionSaveReqVO {
@Schema(description = "角色年龄段描述20s、25-30") @Schema(description = "角色年龄段描述20s、25-30")
private String ageRange; private String ageRange;
@Schema(description = "一句话人设描述,用于卡片或列表展示")
private String shortDesc;
@Schema(description = "角色详细介绍文案,用于角色详情页")
private String introText;
@Schema(description = "角色性格标签数组(如:温柔、黏人、治愈)") @Schema(description = "角色性格标签数组(如:温柔、黏人、治愈)")
private List<String> personalityTags; private Object personalityTags;
@Schema(description = "角色说话风格(如:撒娇型、理性型、活泼型)") @Schema(description = "角色说话风格(如:撒娇型、理性型、活泼型)")
private String speakingStyle; private String speakingStyle;
@@ -60,13 +50,21 @@ public class KeyboardAiCompanionSaveReqVO {
@Schema(description = "角色热度评分,用于推荐排序") @Schema(description = "角色热度评分,用于推荐排序")
private Integer popularityScore; private Integer popularityScore;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "创建时间不能为空")
private LocalDateTime createdAt;
@Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "更新时间不能为空")
private LocalDateTime updatedAt;
@Schema(description = "开场白") @Schema(description = "开场白")
private String prologue; private String prologue;
@Schema(description = "开场白音频") @Schema(description = "开场白音频")
private String prologueAudio; private String prologueAudio;
@Schema(description = "音频Id", example = "31328") @Schema(description = "音频Id", example = "4155")
private String voiceId; private String voiceId;
} }

View File

@@ -1,5 +1,6 @@
package com.yolo.keyboard.controller.admin.tag; package com.yolo.keyboard.controller.admin.tag;
import com.yolo.keyboard.dal.dataobject.tag.TagI18nDO;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@@ -100,5 +101,55 @@ public class KeyboardTagController {
ExcelUtils.write(response, "人设标签.xls", "数据", KeyboardTagRespVO.class, ExcelUtils.write(response, "人设标签.xls", "数据", KeyboardTagRespVO.class,
BeanUtils.toBean(list, KeyboardTagRespVO.class)); BeanUtils.toBean(list, KeyboardTagRespVO.class));
} }
// ==================== 子表(人设标签国际化) ====================
@GetMapping("/tag-i18n/page")
@Operation(summary = "获得人设标签国际化分页")
@Parameter(name = "tagId", description = "标签主表ID对应 keyboard_tag.id")
@PreAuthorize("@ss.hasPermission('keyboard:tag:query')")
public CommonResult<PageResult<TagI18nDO>> getTagI18nPage(PageParam pageReqVO,
@RequestParam("tagId") Integer tagId) {
return success(tagService.getTagI18nPage(pageReqVO, tagId));
}
@PostMapping("/tag-i18n/create")
@Operation(summary = "创建人设标签国际化")
@PreAuthorize("@ss.hasPermission('keyboard:tag:create')")
public CommonResult<Long> createTagI18n(@Valid @RequestBody TagI18nDO tagI18n) {
return success(tagService.createTagI18n(tagI18n));
}
@PutMapping("/tag-i18n/update")
@Operation(summary = "更新人设标签国际化")
@PreAuthorize("@ss.hasPermission('keyboard:tag:update')")
public CommonResult<Boolean> updateTagI18n(@Valid @RequestBody TagI18nDO tagI18n) {
tagService.updateTagI18n(tagI18n);
return success(true);
}
@DeleteMapping("/tag-i18n/delete")
@Parameter(name = "id", description = "编号", required = true)
@Operation(summary = "删除人设标签国际化")
@PreAuthorize("@ss.hasPermission('keyboard:tag:delete')")
public CommonResult<Boolean> deleteTagI18n(@RequestParam("id") Long id) {
tagService.deleteTagI18n(id);
return success(true);
}
@DeleteMapping("/tag-i18n/delete-list")
@Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除人设标签国际化")
@PreAuthorize("@ss.hasPermission('keyboard:tag:delete')")
public CommonResult<Boolean> deleteTagI18nList(@RequestParam("ids") List<Long> ids) {
tagService.deleteTagI18nListByIds(ids);
return success(true);
}
@GetMapping("/tag-i18n/get")
@Operation(summary = "获得人设标签国际化")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('keyboard:tag:query')")
public CommonResult<TagI18nDO> getTagI18n(@RequestParam("id") Long id) {
return success(tagService.getTagI18n(id));
}
} }

View File

@@ -0,0 +1,60 @@
package com.yolo.keyboard.dal.dataobject.aicompanion;
import com.yolo.keyboard.framework.tenant.core.aop.TenantIgnore;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.yolo.keyboard.framework.mybatis.core.dataobject.BaseDO;
/**
* AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍 DO
*
* @author ziin
*/
@TableName("keyboard_ai_companion_i18n")
@KeySequence("keyboard_ai_companion_i18n_id_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TenantIgnore
public class AiCompanionI18nDO {
/**
* 主键ID
*/
@TableId
private Long id;
/**
* 陪聊角色主表ID对应 keyboard_ai_companion.id
*/
private Long companionId;
/**
* 语言标识,如 zh-CN、en-US、ja-JP
*/
private String locale;
/**
* 角色名称(多语言)
*/
private String name;
/**
* 一句话人设描述(多语言)
*/
private String shortDesc;
/**
* 角色详细介绍文案(多语言)
*/
private String introText;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
}

View File

@@ -29,10 +29,7 @@ public class KeyboardAiCompanionDO {
*/ */
@TableId @TableId
private Long id; private Long id;
/**
* 角色名称展示用Katie Leona
*/
private String name;
/** /**
* 角色头像URL用于列表页和聊天页 * 角色头像URL用于列表页和聊天页
*/ */
@@ -49,14 +46,6 @@ public class KeyboardAiCompanionDO {
* 角色年龄段描述20s、25-30 * 角色年龄段描述20s、25-30
*/ */
private String ageRange; private String ageRange;
/**
* 一句话人设描述,用于卡片或列表展示
*/
private String shortDesc;
/**
* 角色详细介绍文案,用于角色详情页
*/
private String introText;
/** /**
* 角色性格标签数组(如:温柔、黏人、治愈) * 角色性格标签数组(如:温柔、黏人、治愈)
*/ */

View File

@@ -14,7 +14,7 @@ import com.yolo.keyboard.framework.mybatis.core.dataobject.BaseDO;
* @author ziin * @author ziin
*/ */
@TableName("keyboard_character_i18n") @TableName("keyboard_character_i18n")
@KeySequence("keyboard_character_i18n_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @KeySequence("keyboard_character_i18n_id_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data @Data
@ToString(callSuper = true) @ToString(callSuper = true)
@Builder @Builder

View File

@@ -14,7 +14,7 @@ import com.yolo.keyboard.framework.mybatis.core.dataobject.BaseDO;
* @author ziin * @author ziin
*/ */
@TableName("keyboard_tag") @TableName("keyboard_tag")
@KeySequence("keyboard_tag_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @KeySequence("keyboard_tag_id_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data @Data
@ToString(callSuper = true) @ToString(callSuper = true)
@Builder @Builder
@@ -28,10 +28,6 @@ public class KeyboardTagDO{
*/ */
@TableId @TableId
private Integer id; private Integer id;
/**
* 标签名
*/
private String tagName;
/** /**
* 创建时间 * 创建时间
*/ */

View File

@@ -0,0 +1,52 @@
package com.yolo.keyboard.dal.dataobject.tag;
import com.yolo.keyboard.framework.tenant.core.aop.TenantIgnore;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.yolo.keyboard.framework.mybatis.core.dataobject.BaseDO;
/**
* 人设标签国际化 DO
*
* @author 芋道源码
*/
@TableName("keyboard_tag_i18n")
@KeySequence("keyboard_tag_i18n_id_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TenantIgnore
public class TagI18nDO {
/**
* 主键 Id
*/
@TableId
private Long id;
/**
* 标签主表ID对应 keyboard_tag.id
*/
private Integer tagId;
/**
* 语言标识,如 zh-CN、en-US、ja-JP
*/
private String locale;
/**
* 标签名称(多语言)
*/
private String tagName;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
}

View File

@@ -0,0 +1,34 @@
package com.yolo.keyboard.dal.mysql.aicompanion;
import java.util.*;
import com.yolo.keyboard.dal.dataobject.aicompanion.AiCompanionI18nDO;
import com.yolo.keyboard.framework.common.pojo.PageResult;
import com.yolo.keyboard.framework.common.pojo.PageParam;
import com.yolo.keyboard.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yolo.keyboard.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
/**
* AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍 Mapper
*
* @author ziin
*/
@Mapper
public interface AiCompanionI18nMapper extends BaseMapperX<AiCompanionI18nDO> {
default PageResult<AiCompanionI18nDO> selectPage(PageParam reqVO, Long id) {
return selectPage(reqVO, new LambdaQueryWrapperX<AiCompanionI18nDO>()
.eq(AiCompanionI18nDO::getCompanionId, id)
.orderByDesc(AiCompanionI18nDO::getId));
}
default int deleteById(Long id) {
return delete(AiCompanionI18nDO::getId, id);
}
default int deleteByIds(List<Long> ids) {
return deleteBatch(AiCompanionI18nDO::getId, ids);
}
}

View File

@@ -19,13 +19,10 @@ public interface KeyboardAiCompanionMapper extends BaseMapperX<KeyboardAiCompani
default PageResult<KeyboardAiCompanionDO> selectPage(KeyboardAiCompanionPageReqVO reqVO) { default PageResult<KeyboardAiCompanionDO> selectPage(KeyboardAiCompanionPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<KeyboardAiCompanionDO>() return selectPage(reqVO, new LambdaQueryWrapperX<KeyboardAiCompanionDO>()
.likeIfPresent(KeyboardAiCompanionDO::getName, reqVO.getName())
.eqIfPresent(KeyboardAiCompanionDO::getAvatarUrl, reqVO.getAvatarUrl()) .eqIfPresent(KeyboardAiCompanionDO::getAvatarUrl, reqVO.getAvatarUrl())
.eqIfPresent(KeyboardAiCompanionDO::getCoverImageUrl, reqVO.getCoverImageUrl()) .eqIfPresent(KeyboardAiCompanionDO::getCoverImageUrl, reqVO.getCoverImageUrl())
.eqIfPresent(KeyboardAiCompanionDO::getGender, reqVO.getGender()) .eqIfPresent(KeyboardAiCompanionDO::getGender, reqVO.getGender())
.eqIfPresent(KeyboardAiCompanionDO::getAgeRange, reqVO.getAgeRange()) .eqIfPresent(KeyboardAiCompanionDO::getAgeRange, reqVO.getAgeRange())
.eqIfPresent(KeyboardAiCompanionDO::getShortDesc, reqVO.getShortDesc())
.eqIfPresent(KeyboardAiCompanionDO::getIntroText, reqVO.getIntroText())
.eqIfPresent(KeyboardAiCompanionDO::getPersonalityTags, reqVO.getPersonalityTags()) .eqIfPresent(KeyboardAiCompanionDO::getPersonalityTags, reqVO.getPersonalityTags())
.eqIfPresent(KeyboardAiCompanionDO::getSpeakingStyle, reqVO.getSpeakingStyle()) .eqIfPresent(KeyboardAiCompanionDO::getSpeakingStyle, reqVO.getSpeakingStyle())
.eqIfPresent(KeyboardAiCompanionDO::getSystemPrompt, reqVO.getSystemPrompt()) .eqIfPresent(KeyboardAiCompanionDO::getSystemPrompt, reqVO.getSystemPrompt())

View File

@@ -19,7 +19,6 @@ public interface KeyboardTagMapper extends BaseMapperX<KeyboardTagDO> {
default PageResult<KeyboardTagDO> selectPage(KeyboardTagPageReqVO reqVO) { default PageResult<KeyboardTagDO> selectPage(KeyboardTagPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<KeyboardTagDO>() return selectPage(reqVO, new LambdaQueryWrapperX<KeyboardTagDO>()
.likeIfPresent(KeyboardTagDO::getTagName, reqVO.getTagName())
.eqIfPresent(KeyboardTagDO::getCreatedAt, reqVO.getCreatedAt()) .eqIfPresent(KeyboardTagDO::getCreatedAt, reqVO.getCreatedAt())
.eqIfPresent(KeyboardTagDO::getUpdatedAt, reqVO.getUpdatedAt()) .eqIfPresent(KeyboardTagDO::getUpdatedAt, reqVO.getUpdatedAt())
.orderByDesc(KeyboardTagDO::getId)); .orderByDesc(KeyboardTagDO::getId));

View File

@@ -0,0 +1,34 @@
package com.yolo.keyboard.dal.mysql.tag;
import java.util.*;
import com.yolo.keyboard.dal.dataobject.tag.TagI18nDO;
import com.yolo.keyboard.framework.common.pojo.PageResult;
import com.yolo.keyboard.framework.common.pojo.PageParam;
import com.yolo.keyboard.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yolo.keyboard.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
/**
* 人设标签国际化 Mapper
*
* @author 芋道源码
*/
@Mapper
public interface TagI18nMapper extends BaseMapperX<TagI18nDO> {
default PageResult<TagI18nDO> selectPage(PageParam reqVO, Integer tagId) {
return selectPage(reqVO, new LambdaQueryWrapperX<TagI18nDO>()
.eq(TagI18nDO::getTagId, tagId)
.orderByDesc(TagI18nDO::getId));
}
default int deleteByTagId(Integer tagId) {
return delete(TagI18nDO::getTagId, tagId);
}
default int deleteByTagIds(List<Integer> tagIds) {
return deleteBatch(TagI18nDO::getTagId, tagIds);
}
}

View File

@@ -2,7 +2,9 @@ package com.yolo.keyboard.service.aicompanion;
import com.yolo.keyboard.controller.admin.aicompanion.vo.KeyboardAiCompanionPageReqVO; import com.yolo.keyboard.controller.admin.aicompanion.vo.KeyboardAiCompanionPageReqVO;
import com.yolo.keyboard.controller.admin.aicompanion.vo.KeyboardAiCompanionSaveReqVO; import com.yolo.keyboard.controller.admin.aicompanion.vo.KeyboardAiCompanionSaveReqVO;
import com.yolo.keyboard.dal.dataobject.aicompanion.AiCompanionI18nDO;
import com.yolo.keyboard.dal.dataobject.aicompanion.KeyboardAiCompanionDO; import com.yolo.keyboard.dal.dataobject.aicompanion.KeyboardAiCompanionDO;
import com.yolo.keyboard.framework.common.pojo.PageParam;
import com.yolo.keyboard.framework.common.pojo.PageResult; import com.yolo.keyboard.framework.common.pojo.PageResult;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@@ -59,5 +61,51 @@ public interface KeyboardAiCompanionService {
* @return AI陪聊角色表用于定义恋爱/陪伴型虚拟角色的基础信息与人设分页 * @return AI陪聊角色表用于定义恋爱/陪伴型虚拟角色的基础信息与人设分页
*/ */
PageResult<KeyboardAiCompanionDO> getAiCompanionPage(KeyboardAiCompanionPageReqVO pageReqVO); PageResult<KeyboardAiCompanionDO> getAiCompanionPage(KeyboardAiCompanionPageReqVO pageReqVO);
// ==================== 子表AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍 ====================
/**
* 获得AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍分页
*
* @param pageReqVO 分页查询
* @param id 主键ID
* @return AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍分页
*/
PageResult<AiCompanionI18nDO> getAiCompanionI18nPage(PageParam pageReqVO, Long id);
/**
* 创建AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍
*
* @param aiCompanionI18n 创建信息
* @return 编号
*/
Long createAiCompanionI18n(@Valid AiCompanionI18nDO aiCompanionI18n);
/**
* 更新AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍
*
* @param aiCompanionI18n 更新信息
*/
void updateAiCompanionI18n(@Valid AiCompanionI18nDO aiCompanionI18n);
/**
* 删除AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍
*
* @param id 编号
*/
void deleteAiCompanionI18n(Long id);
/**
* 批量删除AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍
*
* @param ids 编号
*/
void deleteAiCompanionI18nListByIds(List<Long> ids);
/**
* 获得AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍
*
* @param id 编号
* @return AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍
*/
AiCompanionI18nDO getAiCompanionI18n(Long id);
} }

View File

@@ -2,17 +2,22 @@ package com.yolo.keyboard.service.aicompanion;
import com.yolo.keyboard.controller.admin.aicompanion.vo.KeyboardAiCompanionPageReqVO; import com.yolo.keyboard.controller.admin.aicompanion.vo.KeyboardAiCompanionPageReqVO;
import com.yolo.keyboard.controller.admin.aicompanion.vo.KeyboardAiCompanionSaveReqVO; import com.yolo.keyboard.controller.admin.aicompanion.vo.KeyboardAiCompanionSaveReqVO;
import com.yolo.keyboard.dal.dataobject.aicompanion.AiCompanionI18nDO;
import com.yolo.keyboard.dal.dataobject.aicompanion.KeyboardAiCompanionDO; import com.yolo.keyboard.dal.dataobject.aicompanion.KeyboardAiCompanionDO;
import com.yolo.keyboard.dal.mysql.aicompanion.AiCompanionI18nMapper;
import com.yolo.keyboard.dal.mysql.aicompanion.KeyboardAiCompanionMapper; import com.yolo.keyboard.dal.mysql.aicompanion.KeyboardAiCompanionMapper;
import com.yolo.keyboard.framework.common.pojo.PageParam;
import com.yolo.keyboard.framework.common.pojo.PageResult; import com.yolo.keyboard.framework.common.pojo.PageResult;
import com.yolo.keyboard.framework.common.util.object.BeanUtils; import com.yolo.keyboard.framework.common.util.object.BeanUtils;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import java.util.List; import java.util.List;
import static com.yolo.keyboard.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.yolo.keyboard.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.yolo.keyboard.module.infra.enums.ErrorCodeConstants.AI_COMPANION_I18N_NOT_EXISTS;
import static com.yolo.keyboard.module.infra.enums.ErrorCodeConstants.AI_COMPANION_NOT_EXISTS; import static com.yolo.keyboard.module.infra.enums.ErrorCodeConstants.AI_COMPANION_NOT_EXISTS;
/** /**
@@ -26,6 +31,8 @@ public class KeyboardAiCompanionServiceImpl implements KeyboardAiCompanionServic
@Resource @Resource
private KeyboardAiCompanionMapper aiCompanionMapper; private KeyboardAiCompanionMapper aiCompanionMapper;
@Resource
private AiCompanionI18nMapper aiCompanionI18nMapper;
@Override @Override
public Long createAiCompanion(KeyboardAiCompanionSaveReqVO createReqVO) { public Long createAiCompanion(KeyboardAiCompanionSaveReqVO createReqVO) {
@@ -47,17 +54,25 @@ public class KeyboardAiCompanionServiceImpl implements KeyboardAiCompanionServic
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void deleteAiCompanion(Long id) { public void deleteAiCompanion(Long id) {
// 校验存在 // 校验存在
validateAiCompanionExists(id); validateAiCompanionExists(id);
// 删除 // 删除
aiCompanionMapper.deleteById(id); aiCompanionMapper.deleteById(id);
// 删除子表
deleteAiCompanionI18nById(id);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void deleteAiCompanionListByIds(List<Long> ids) { public void deleteAiCompanionListByIds(List<Long> ids) {
// 删除 // 删除
aiCompanionMapper.deleteByIds(ids); aiCompanionMapper.deleteByIds(ids);
// 删除子表
deleteAiCompanionI18nByIds(ids);
} }
@@ -77,4 +92,56 @@ public class KeyboardAiCompanionServiceImpl implements KeyboardAiCompanionServic
return aiCompanionMapper.selectPage(pageReqVO); return aiCompanionMapper.selectPage(pageReqVO);
} }
// ==================== 子表AI陪聊角色国际化表用于存储不同语言下的角色名称、一句话描述和详细介绍 ====================
@Override
public PageResult<AiCompanionI18nDO> getAiCompanionI18nPage(PageParam pageReqVO, Long id) {
return aiCompanionI18nMapper.selectPage(pageReqVO, id);
}
@Override
public Long createAiCompanionI18n(AiCompanionI18nDO aiCompanionI18n) {
aiCompanionI18nMapper.insert(aiCompanionI18n);
return aiCompanionI18n.getId();
}
@Override
public void updateAiCompanionI18n(AiCompanionI18nDO aiCompanionI18n) {
// 校验存在
validateAiCompanionI18nExists(aiCompanionI18n.getId());
// 更新
aiCompanionI18nMapper.updateById(aiCompanionI18n);
}
@Override
public void deleteAiCompanionI18n(Long id) {
// 删除
aiCompanionI18nMapper.deleteById(id);
}
@Override
public void deleteAiCompanionI18nListByIds(List<Long> ids) {
// 删除
aiCompanionI18nMapper.deleteByIds(ids);
}
@Override
public AiCompanionI18nDO getAiCompanionI18n(Long id) {
return aiCompanionI18nMapper.selectById(id);
}
private void validateAiCompanionI18nExists(Long id) {
if (aiCompanionI18nMapper.selectById(id) == null) {
throw exception(AI_COMPANION_I18N_NOT_EXISTS);
}
}
private void deleteAiCompanionI18nById(Long id) {
aiCompanionI18nMapper.deleteById(id);
}
private void deleteAiCompanionI18nByIds(List<Long> ids) {
aiCompanionI18nMapper.deleteByIds(ids);
}
} }

View File

@@ -1,6 +1,8 @@
package com.yolo.keyboard.service.tag; package com.yolo.keyboard.service.tag;
import java.util.*; import java.util.*;
import com.yolo.keyboard.dal.dataobject.tag.TagI18nDO;
import jakarta.validation.*; import jakarta.validation.*;
import com.yolo.keyboard.controller.admin.tag.vo.*; import com.yolo.keyboard.controller.admin.tag.vo.*;
import com.yolo.keyboard.dal.dataobject.tag.KeyboardTagDO; import com.yolo.keyboard.dal.dataobject.tag.KeyboardTagDO;
@@ -58,5 +60,51 @@ public interface KeyboardTagService {
* @return 人设标签分页 * @return 人设标签分页
*/ */
PageResult<KeyboardTagDO> getTagPage(KeyboardTagPageReqVO pageReqVO); PageResult<KeyboardTagDO> getTagPage(KeyboardTagPageReqVO pageReqVO);
// ==================== 子表(人设标签国际化) ====================
/**
* 获得人设标签国际化分页
*
* @param pageReqVO 分页查询
* @param tagId 标签主表ID对应 keyboard_tag.id
* @return 人设标签国际化分页
*/
PageResult<TagI18nDO> getTagI18nPage(PageParam pageReqVO, Integer tagId);
/**
* 创建人设标签国际化
*
* @param tagI18n 创建信息
* @return 编号
*/
Long createTagI18n(@Valid TagI18nDO tagI18n);
/**
* 更新人设标签国际化
*
* @param tagI18n 更新信息
*/
void updateTagI18n(@Valid TagI18nDO tagI18n);
/**
* 删除人设标签国际化
*
* @param id 编号
*/
void deleteTagI18n(Long id);
/**
* 批量删除人设标签国际化
*
* @param ids 编号
*/
void deleteTagI18nListByIds(List<Long> ids);
/**
* 获得人设标签国际化
*
* @param id 编号
* @return 人设标签国际化
*/
TagI18nDO getTagI18n(Long id);
} }

View File

@@ -1,6 +1,8 @@
package com.yolo.keyboard.service.tag; package com.yolo.keyboard.service.tag;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.yolo.keyboard.dal.dataobject.tag.TagI18nDO;
import com.yolo.keyboard.dal.mysql.tag.TagI18nMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@@ -18,6 +20,7 @@ import com.yolo.keyboard.dal.mysql.tag.KeyboardTagMapper;
import static com.yolo.keyboard.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.yolo.keyboard.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.yolo.keyboard.framework.common.util.collection.CollectionUtils.convertList; import static com.yolo.keyboard.framework.common.util.collection.CollectionUtils.convertList;
import static com.yolo.keyboard.framework.common.util.collection.CollectionUtils.diffList; import static com.yolo.keyboard.framework.common.util.collection.CollectionUtils.diffList;
import static com.yolo.keyboard.module.infra.enums.ErrorCodeConstants.TAG_I18N_NOT_EXISTS;
import static com.yolo.keyboard.module.infra.enums.ErrorCodeConstants.TAG_NOT_EXISTS; import static com.yolo.keyboard.module.infra.enums.ErrorCodeConstants.TAG_NOT_EXISTS;
/** /**
@@ -32,6 +35,9 @@ public class KeyboardTagServiceImpl implements KeyboardTagService {
@Resource @Resource
private KeyboardTagMapper tagMapper; private KeyboardTagMapper tagMapper;
@Resource
private TagI18nMapper tagI18nMapper;
@Override @Override
public Integer createTag(KeyboardTagSaveReqVO createReqVO) { public Integer createTag(KeyboardTagSaveReqVO createReqVO) {
// 插入 // 插入
@@ -82,4 +88,55 @@ public class KeyboardTagServiceImpl implements KeyboardTagService {
return tagMapper.selectPage(pageReqVO); return tagMapper.selectPage(pageReqVO);
} }
// ==================== 子表(人设标签国际化) ====================
@Override
public PageResult<TagI18nDO> getTagI18nPage(PageParam pageReqVO, Integer tagId) {
return tagI18nMapper.selectPage(pageReqVO, tagId);
}
@Override
public Long createTagI18n(TagI18nDO tagI18n) {
tagI18nMapper.insert(tagI18n);
return tagI18n.getId();
}
@Override
public void updateTagI18n(TagI18nDO tagI18n) {
// 校验存在
validateTagI18nExists(tagI18n.getId());
// 更新
tagI18nMapper.updateById(tagI18n);
}
@Override
public void deleteTagI18n(Long id) {
// 删除
tagI18nMapper.deleteById(id);
}
@Override
public void deleteTagI18nListByIds(List<Long> ids) {
// 删除
tagI18nMapper.deleteByIds(ids);
}
@Override
public TagI18nDO getTagI18n(Long id) {
return tagI18nMapper.selectById(id);
}
private void validateTagI18nExists(Long id) {
if (tagI18nMapper.selectById(id) == null) {
throw exception(TAG_I18N_NOT_EXISTS);
}
}
private void deleteTagI18nByTagId(Integer tagId) {
tagI18nMapper.deleteByTagId(tagId);
}
private void deleteTagI18nByTagIds(List<Integer> tagIds) {
tagI18nMapper.deleteByTagIds(tagIds);
}
} }

View File

@@ -98,4 +98,6 @@ public interface ErrorCodeConstants {
ErrorCode WARNING_MESSAGE_NOT_EXISTS = new ErrorCode(1_001_202_024, "用户注销提示信息不存在"); ErrorCode WARNING_MESSAGE_NOT_EXISTS = new ErrorCode(1_001_202_024, "用户注销提示信息不存在");
ErrorCode APP_VERSIONS_NOT_EXISTS = new ErrorCode(1_001_202_025, "App 版本发布与更新检查表信息不存在"); ErrorCode APP_VERSIONS_NOT_EXISTS = new ErrorCode(1_001_202_025, "App 版本发布与更新检查表信息不存在");
ErrorCode CHARACTER_I18N_NOT_EXISTS = new ErrorCode(1_001_202_026, "键盘人设国际化内容不存在"); ErrorCode CHARACTER_I18N_NOT_EXISTS = new ErrorCode(1_001_202_026, "键盘人设国际化内容不存在");
ErrorCode AI_COMPANION_I18N_NOT_EXISTS = new ErrorCode(1_001_202_027, "AI陪聊人设国际化内容不存在");
ErrorCode TAG_I18N_NOT_EXISTS = new ErrorCode(1_001_202_028, "人设标签国际化内容不存在");
} }