diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/tag/KeyboardTagController.java b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/tag/KeyboardTagController.java index f91f215..83d12ed 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/tag/KeyboardTagController.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/tag/KeyboardTagController.java @@ -1,5 +1,6 @@ package com.yolo.keyboard.controller.admin.tag; +import com.yolo.keyboard.dal.dataobject.tag.TagI18nDO; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -100,5 +101,55 @@ public class KeyboardTagController { ExcelUtils.write(response, "人设标签.xls", "数据", 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> 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 createTagI18n(@Valid @RequestBody TagI18nDO tagI18n) { + return success(tagService.createTagI18n(tagI18n)); + } + + @PutMapping("/tag-i18n/update") + @Operation(summary = "更新人设标签国际化") + @PreAuthorize("@ss.hasPermission('keyboard:tag:update')") + public CommonResult 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 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 deleteTagI18nList(@RequestParam("ids") List 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 getTagI18n(@RequestParam("id") Long id) { + return success(tagService.getTagI18n(id)); + } } \ No newline at end of file diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/tag/KeyboardTagDO.java b/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/tag/KeyboardTagDO.java index 4361da1..cd125ed 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/tag/KeyboardTagDO.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/tag/KeyboardTagDO.java @@ -14,7 +14,7 @@ import com.yolo.keyboard.framework.mybatis.core.dataobject.BaseDO; * @author ziin */ @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 @ToString(callSuper = true) @Builder @@ -28,10 +28,6 @@ public class KeyboardTagDO{ */ @TableId private Integer id; - /** - * 标签名 - */ - private String tagName; /** * 创建时间 */ diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/tag/TagI18nDO.java b/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/tag/TagI18nDO.java new file mode 100644 index 0000000..1e7bdf3 --- /dev/null +++ b/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/tag/TagI18nDO.java @@ -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; + +} \ No newline at end of file diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/tag/KeyboardTagMapper.java b/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/tag/KeyboardTagMapper.java index 7874eaa..14f1298 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/tag/KeyboardTagMapper.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/tag/KeyboardTagMapper.java @@ -19,7 +19,6 @@ public interface KeyboardTagMapper extends BaseMapperX { default PageResult selectPage(KeyboardTagPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(KeyboardTagDO::getTagName, reqVO.getTagName()) .eqIfPresent(KeyboardTagDO::getCreatedAt, reqVO.getCreatedAt()) .eqIfPresent(KeyboardTagDO::getUpdatedAt, reqVO.getUpdatedAt()) .orderByDesc(KeyboardTagDO::getId)); diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/tag/TagI18nMapper.java b/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/tag/TagI18nMapper.java new file mode 100644 index 0000000..87a423e --- /dev/null +++ b/keyboard-server/src/main/java/com/yolo/keyboard/dal/mysql/tag/TagI18nMapper.java @@ -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 { + + default PageResult selectPage(PageParam reqVO, Integer tagId) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(TagI18nDO::getTagId, tagId) + .orderByDesc(TagI18nDO::getId)); + } + + default int deleteByTagId(Integer tagId) { + return delete(TagI18nDO::getTagId, tagId); + } + + default int deleteByTagIds(List tagIds) { + return deleteBatch(TagI18nDO::getTagId, tagIds); + } + +} \ No newline at end of file diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/service/tag/KeyboardTagService.java b/keyboard-server/src/main/java/com/yolo/keyboard/service/tag/KeyboardTagService.java index afbcf4f..6f14e69 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/service/tag/KeyboardTagService.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/service/tag/KeyboardTagService.java @@ -1,6 +1,8 @@ package com.yolo.keyboard.service.tag; import java.util.*; + +import com.yolo.keyboard.dal.dataobject.tag.TagI18nDO; import jakarta.validation.*; import com.yolo.keyboard.controller.admin.tag.vo.*; import com.yolo.keyboard.dal.dataobject.tag.KeyboardTagDO; @@ -58,5 +60,51 @@ public interface KeyboardTagService { * @return 人设标签分页 */ PageResult getTagPage(KeyboardTagPageReqVO pageReqVO); + // ==================== 子表(人设标签国际化) ==================== + /** + * 获得人设标签国际化分页 + * + * @param pageReqVO 分页查询 + * @param tagId 标签主表ID,对应 keyboard_tag.id + * @return 人设标签国际化分页 + */ + PageResult 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 ids); + + /** + * 获得人设标签国际化 + * + * @param id 编号 + * @return 人设标签国际化 + */ + TagI18nDO getTagI18n(Long id); } \ No newline at end of file diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/service/tag/KeyboardTagServiceImpl.java b/keyboard-server/src/main/java/com/yolo/keyboard/service/tag/KeyboardTagServiceImpl.java index ea626e3..4be7b3e 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/service/tag/KeyboardTagServiceImpl.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/service/tag/KeyboardTagServiceImpl.java @@ -1,6 +1,8 @@ package com.yolo.keyboard.service.tag; 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 jakarta.annotation.Resource; 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.util.collection.CollectionUtils.convertList; 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; /** @@ -32,6 +35,9 @@ public class KeyboardTagServiceImpl implements KeyboardTagService { @Resource private KeyboardTagMapper tagMapper; + @Resource + private TagI18nMapper tagI18nMapper; + @Override public Integer createTag(KeyboardTagSaveReqVO createReqVO) { // 插入 @@ -82,4 +88,55 @@ public class KeyboardTagServiceImpl implements KeyboardTagService { return tagMapper.selectPage(pageReqVO); } + // ==================== 子表(人设标签国际化) ==================== + + @Override + public PageResult 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 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 tagIds) { + tagI18nMapper.deleteByTagIds(tagIds); + } } \ No newline at end of file diff --git a/yolo-module-infra/src/main/java/com/yolo/keyboard/module/infra/enums/ErrorCodeConstants.java b/yolo-module-infra/src/main/java/com/yolo/keyboard/module/infra/enums/ErrorCodeConstants.java index 45621a8..e645271 100644 --- a/yolo-module-infra/src/main/java/com/yolo/keyboard/module/infra/enums/ErrorCodeConstants.java +++ b/yolo-module-infra/src/main/java/com/yolo/keyboard/module/infra/enums/ErrorCodeConstants.java @@ -98,5 +98,6 @@ public interface ErrorCodeConstants { ErrorCode WARNING_MESSAGE_NOT_EXISTS = new ErrorCode(1_001_202_024, "用户注销提示信息不存在"); ErrorCode APP_VERSIONS_NOT_EXISTS = new ErrorCode(1_001_202_025, "App 版本发布与更新检查表信息不存在"); ErrorCode CHARACTER_I18N_NOT_EXISTS = new ErrorCode(1_001_202_026, "键盘人设国际化内容不存在"); - ErrorCode AI_COMPANION_I18N_NOT_EXISTS = new ErrorCode(1_001_202_027, "键盘人设国际化内容不存在"); + ErrorCode AI_COMPANION_I18N_NOT_EXISTS = new ErrorCode(1_001_202_027, "AI陪聊人设国际化内容不存在"); + ErrorCode TAG_I18N_NOT_EXISTS = new ErrorCode(1_001_202_028, "人设标签国际化内容不存在"); }