From f391f9dfe1ae8912c1e92e6bb1538c9f12f3d775 Mon Sep 17 00:00:00 2001 From: ziin Date: Thu, 11 Dec 2025 20:51:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(user):=20=E6=96=B0=E5=A2=9EVIP=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=8F=8A=E5=AE=8C=E5=96=84MyBatis-Plus=E6=98=A0?= =?UTF-8?q?=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyborad/controller/UserController.java | 14 ++- .../keyborad/mapper/KeyboardUserMapper.java | 10 +- .../keyborad/model/entity/KeyboardUser.java | 111 ++++++++++++------ .../model/vo/user/KeyboardUserInfoRespVO.java | 14 +++ .../model/vo/user/KeyboardUserRespVO.java | 13 ++ .../resources/mapper/KeyboardUserMapper.xml | 4 +- 6 files changed, 124 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/yolo/keyborad/controller/UserController.java b/src/main/java/com/yolo/keyborad/controller/UserController.java index 413e43d..14a1e13 100644 --- a/src/main/java/com/yolo/keyborad/controller/UserController.java +++ b/src/main/java/com/yolo/keyborad/controller/UserController.java @@ -22,6 +22,8 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.text.SimpleDateFormat; + /** * 用户前端控制器 * @@ -76,7 +78,17 @@ public class UserController { public BaseResponse detail() { long loginId = StpUtil.getLoginIdAsLong(); KeyboardUser keyboardUser = userService.getById(loginId); - return ResultUtils.success(BeanUtil.copyProperties(keyboardUser, KeyboardUserInfoRespVO.class)); + KeyboardUserInfoRespVO respVO = BeanUtil.copyProperties(keyboardUser, KeyboardUserInfoRespVO.class); + + // 格式化VIP到期时间 + if (keyboardUser.getVipExpiry() != null) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + respVO.setVipExpiry(sdf.format(keyboardUser.getVipExpiry())); + } else { + respVO.setVipExpiry(null); + } + + return ResultUtils.success(respVO); } @PostMapping("/register") diff --git a/src/main/java/com/yolo/keyborad/mapper/KeyboardUserMapper.java b/src/main/java/com/yolo/keyborad/mapper/KeyboardUserMapper.java index bee92dc..55cdff4 100644 --- a/src/main/java/com/yolo/keyborad/mapper/KeyboardUserMapper.java +++ b/src/main/java/com/yolo/keyborad/mapper/KeyboardUserMapper.java @@ -1,13 +1,13 @@ package com.yolo.keyborad.mapper; -/* - * @author: ziin - * @date: 2025/12/2 18:10 - */ - import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yolo.keyborad.model.entity.KeyboardUser; +/* + * @author: ziin + * @date: 2025/12/11 20:35 + */ + public interface KeyboardUserMapper extends BaseMapper { Integer updateByuid(KeyboardUser keyboardUser); } \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/model/entity/KeyboardUser.java b/src/main/java/com/yolo/keyborad/model/entity/KeyboardUser.java index e199160..769bab8 100644 --- a/src/main/java/com/yolo/keyborad/model/entity/KeyboardUser.java +++ b/src/main/java/com/yolo/keyborad/model/entity/KeyboardUser.java @@ -1,83 +1,124 @@ package com.yolo.keyborad.model.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - import java.util.Date; +import lombok.Data; /* * @author: ziin -* @date: 2025/12/2 18:08 +* @date: 2025/12/11 20:35 */ +@Schema @Data -@Schema(description="用户信息") +@TableName(value = "keyboard_user") public class KeyboardUser { - - @Schema(description="主键ID") - @TableId(type = IdType.AUTO) + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + @Schema(description = "主键") private Long id; - @Schema(description="用户ID") + /** + * 用户 Id + */ + @TableField(value = "\"uid\"") + @Schema(description = "用户 Id") private Long uid; - @Schema(description="用户昵称") + /** + * 用户昵称 + */ + @TableField(value = "nick_name") + @Schema(description = "用户昵称") private String nickName; - @Schema(description="性别") + /** + * 性别 + */ + @TableField(value = "gender") + @Schema(description = "性别") private Integer gender; - @Schema(description="头像URL") + /** + * 头像地址 + */ + @TableField(value = "avatar_url") + @Schema(description = "头像地址") private String avatarUrl; /** - * 创建时间 - */ - @Schema(description="创建时间") + * 创建时间 + */ + @TableField(value = "created_at") + @Schema(description = "创建时间") private Date createdAt; /** - * 更新时间 - */ - @Schema(description="更新时间") + * 更新时间 + */ + @TableField(value = "updated_at") + @Schema(description = "更新时间") private Date updatedAt; /** - * 是否删除(默认否) - */ - @Schema(description="是否删除(默认否)") + * 是否删除(默认否) + */ + @TableField(value = "deleted") + @Schema(description = "是否删除(默认否)") private Boolean deleted; /** - * 邮箱地址 - */ - @Schema(description="邮箱地址") + * 邮箱地址 + */ + @TableField(value = "email") + @Schema(description = "邮箱地址") private String email; /** - * 是否禁用 - */ - @Schema(description="是否禁用") + * 是否禁用 + */ + @TableField(value = "\"status\"") + @Schema(description = "是否禁用") private Boolean status; /** - * 密码 - */ - @Schema(description="密码") + * 密码 + */ + @TableField(value = "\"password\"") + @Schema(description = "密码") private String password; /** - * 苹果登录subjectId - */ - @Schema(description="苹果登录subjectId") + * 苹果登录subjectId + */ + @TableField(value = "subject_id") + @Schema(description = "苹果登录subjectId") private String subjectId; /** - * 邮箱是否验证 - */ - @Schema(description="邮箱是否验证") + * 邮箱是否验证 + */ + @TableField(value = "email_verified") + @Schema(description = "邮箱是否验证") private Boolean emailVerified; + /** + * 是否是 VIP + */ + @TableField(value = "is_vip") + @Schema(description = "是否是 VIP") + private Boolean isVip; + + /** + * VIP 过期时间 + */ + @TableField(value = "vip_expiry") + @Schema(description = "VIP 过期时间") + private Date vipExpiry; } \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserInfoRespVO.java b/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserInfoRespVO.java index ae6883e..d2853ec 100644 --- a/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserInfoRespVO.java +++ b/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserInfoRespVO.java @@ -3,6 +3,8 @@ package com.yolo.keyborad.model.vo.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.Date; + /* * @author: ziin * @date: 2025/12/2 18:08 @@ -38,4 +40,16 @@ public class KeyboardUserInfoRespVO { @Schema(description="邮箱是否验证") private Boolean emailVerified; + /** + * 是否是 VIP + */ + @Schema(description = "是否是 VIP") + private Boolean isVip; + + /** + * VIP 过期时间 + */ + @Schema(description = "VIP 过期时间") + private String vipExpiry; + } \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserRespVO.java b/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserRespVO.java index 9a5dd86..716eb97 100644 --- a/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserRespVO.java +++ b/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserRespVO.java @@ -1,5 +1,6 @@ package com.yolo.keyborad.model.vo.user; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -42,4 +43,16 @@ public class KeyboardUserRespVO { @Schema(description = "token") private String token; + + /** + * 是否是 VIP + */ + @Schema(description = "是否是 VIP") + private Boolean isVip; + + /** + * VIP 过期时间 + */ + @Schema(description = "VIP 过期时间") + private Date vipExpiry; } \ No newline at end of file diff --git a/src/main/resources/mapper/KeyboardUserMapper.xml b/src/main/resources/mapper/KeyboardUserMapper.xml index 6f2c0be..52c815a 100644 --- a/src/main/resources/mapper/KeyboardUserMapper.xml +++ b/src/main/resources/mapper/KeyboardUserMapper.xml @@ -17,11 +17,13 @@ + + id, "uid", nick_name, gender, avatar_url, created_at, updated_at, deleted, email, - "status", "password", subject_id, email_verified + "status", "password", subject_id, email_verified, is_vip, vip_expiry