From d62c39996b7720aa4a123fa05c682e120b2bd882 Mon Sep 17 00:00:00 2001 From: ziin Date: Tue, 10 Feb 2026 19:41:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(aicompanion):=20=E9=87=8D=E6=9E=84AI?= =?UTF-8?q?=E9=99=AA=E8=81=8ADO=E5=B9=B6=E6=96=B0=E5=A2=9E=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E6=95=B0=E7=BB=84=E5=A4=84=E7=90=86=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将personalityTags字段由Object改为List并引入TextArrayTypeHandler - 在DO中增加deleted逻辑删除字段并启用autoResultMap - 简化SaveReqVO,移除创建/更新时间字段并补充prologue等字段描述 - 新增.gitignore忽略/.omc/目录 --- .gitignore | 1 + .../vo/KeyboardAiCompanionPageReqVO.java | 2 +- .../vo/KeyboardAiCompanionRespVO.java | 2 +- .../vo/KeyboardAiCompanionSaveReqVO.java | 10 +--- .../aicompanion/KeyboardAiCompanionDO.java | 21 +++++--- .../core/type/TextArrayTypeHandler.java | 51 +++++++++++++++++++ 6 files changed, 69 insertions(+), 18 deletions(-) create mode 100644 yolo-framework/yolo-spring-boot-starter-mybatis/src/main/java/com/yolo/keyboard/framework/mybatis/core/type/TextArrayTypeHandler.java diff --git a/.gitignore b/.gitignore index 86cd04b..d10bf43 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,4 @@ application-my.yaml /yolo-ui-app/unpackage/ **/.DS_Store +/.omc/ diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionPageReqVO.java b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionPageReqVO.java index 1353e2d..00d3cca 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionPageReqVO.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionPageReqVO.java @@ -35,7 +35,7 @@ public class KeyboardAiCompanionPageReqVO extends PageParam { private String introText; @Schema(description = "角色性格标签数组(如:温柔、黏人、治愈)") - private Object personalityTags; + private List personalityTags; @Schema(description = "角色说话风格(如:撒娇型、理性型、活泼型)") private String speakingStyle; diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionRespVO.java b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionRespVO.java index d32317b..8b504aa 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionRespVO.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionRespVO.java @@ -46,7 +46,7 @@ public class KeyboardAiCompanionRespVO { @Schema(description = "角色性格标签数组(如:温柔、黏人、治愈)") @ExcelProperty("角色性格标签数组(如:温柔、黏人、治愈)") - private Object personalityTags; + private List personalityTags; @Schema(description = "角色说话风格(如:撒娇型、理性型、活泼型)") @ExcelProperty("角色说话风格(如:撒娇型、理性型、活泼型)") diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionSaveReqVO.java b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionSaveReqVO.java index f0bec0f..f80dfe6 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionSaveReqVO.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/controller/admin/aicompanion/vo/KeyboardAiCompanionSaveReqVO.java @@ -37,7 +37,7 @@ public class KeyboardAiCompanionSaveReqVO { private String introText; @Schema(description = "角色性格标签数组(如:温柔、黏人、治愈)") - private Object personalityTags; + private List personalityTags; @Schema(description = "角色说话风格(如:撒娇型、理性型、活泼型)") private String speakingStyle; @@ -60,14 +60,6 @@ public class KeyboardAiCompanionSaveReqVO { @Schema(description = "角色热度评分,用于推荐排序") 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 = "开场白") private String prologue; diff --git a/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/aicompanion/KeyboardAiCompanionDO.java b/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/aicompanion/KeyboardAiCompanionDO.java index 59b6f41..56e2eed 100644 --- a/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/aicompanion/KeyboardAiCompanionDO.java +++ b/keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/aicompanion/KeyboardAiCompanionDO.java @@ -1,10 +1,12 @@ 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.type.TextArrayTypeHandler; +import com.yolo.keyboard.framework.tenant.core.aop.TenantIgnore; +import lombok.*; + +import java.time.LocalDateTime; +import java.util.List; import com.yolo.keyboard.framework.mybatis.core.dataobject.BaseDO; /** @@ -12,7 +14,7 @@ import com.yolo.keyboard.framework.mybatis.core.dataobject.BaseDO; * * @author ziin */ -@TableName("keyboard_ai_companion") +@TableName(value = "keyboard_ai_companion", autoResultMap = true) @KeySequence("keyboard_ai_companion_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data @ToString(callSuper = true) @@ -58,7 +60,8 @@ public class KeyboardAiCompanionDO { /** * 角色性格标签数组(如:温柔、黏人、治愈) */ - private Object personalityTags; + @TableField(typeHandler = TextArrayTypeHandler.class) + private List personalityTags; /** * 角色说话风格(如:撒娇型、理性型、活泼型) */ @@ -103,6 +106,10 @@ public class KeyboardAiCompanionDO { * 音频Id */ private String voiceId; - + /** + * 是否删除 + */ + @TableLogic + private Byte deleted; } \ No newline at end of file diff --git a/yolo-framework/yolo-spring-boot-starter-mybatis/src/main/java/com/yolo/keyboard/framework/mybatis/core/type/TextArrayTypeHandler.java b/yolo-framework/yolo-spring-boot-starter-mybatis/src/main/java/com/yolo/keyboard/framework/mybatis/core/type/TextArrayTypeHandler.java new file mode 100644 index 0000000..db2542d --- /dev/null +++ b/yolo-framework/yolo-spring-boot-starter-mybatis/src/main/java/com/yolo/keyboard/framework/mybatis/core/type/TextArrayTypeHandler.java @@ -0,0 +1,51 @@ +package com.yolo.keyboard.framework.mybatis.core.type; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; + +import java.sql.*; +import java.util.Arrays; +import java.util.List; + +/** + * PostgreSQL text[] 数组类型处理器 + * 将 Java List 与 PostgreSQL text[] 互相转换 + * + * @author ziin + */ +@MappedJdbcTypes(JdbcType.ARRAY) +@MappedTypes(List.class) +public class TextArrayTypeHandler extends BaseTypeHandler> { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + Connection conn = ps.getConnection(); + Array array = conn.createArrayOf("text", parameter.toArray(new String[0])); + ps.setArray(i, array); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + return toList(rs.getArray(columnName)); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return toList(rs.getArray(columnIndex)); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return toList(cs.getArray(columnIndex)); + } + + private List toList(Array array) throws SQLException { + if (array == null) { + return null; + } + String[] strings = (String[]) array.getArray(); + return Arrays.asList(strings); + } +}