From 0d1545f56859064b8e230d60fea6abb066d2d47b Mon Sep 17 00:00:00 2001 From: ziin Date: Wed, 10 Dec 2025 18:52:38 +0800 Subject: [PATCH] =?UTF-8?q?feat(wallet):=20=E6=96=B0=E5=A2=9E=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E9=92=B1=E5=8C=85=E4=BD=99=E9=A2=9D=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyborad/config/SaTokenConfigure.java | 3 +- .../keyborad/controller/WalletController.java | 36 ++++++++++ .../mapper/KeyboardUserWalletMapper.java | 12 ++++ .../model/entity/KeyboardUserWallet.java | 69 +++++++++++++++++++ .../vo/wallet/KeyboardUserWalletRespVO.java | 20 ++++++ .../service/KeyboardUserWalletService.java | 19 +++++ .../impl/KeyboardUserWalletServiceImpl.java | 39 +++++++++++ .../mapper/KeyboardUserWalletMapper.xml | 19 +++++ 8 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/yolo/keyborad/controller/WalletController.java create mode 100644 src/main/java/com/yolo/keyborad/mapper/KeyboardUserWalletMapper.java create mode 100644 src/main/java/com/yolo/keyborad/model/entity/KeyboardUserWallet.java create mode 100644 src/main/java/com/yolo/keyborad/model/vo/wallet/KeyboardUserWalletRespVO.java create mode 100644 src/main/java/com/yolo/keyborad/service/KeyboardUserWalletService.java create mode 100644 src/main/java/com/yolo/keyborad/service/impl/KeyboardUserWalletServiceImpl.java create mode 100644 src/main/resources/mapper/KeyboardUserWalletMapper.xml diff --git a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java index 37c66a7..0e9e43f 100644 --- a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java +++ b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java @@ -86,7 +86,8 @@ public class SaTokenConfigure implements WebMvcConfigurer { "/user/resetPassWord", "/chat/talk", "/chat/save_embed", - "/themes/listByStyle" + "/themes/listByStyle", + "/wallet/balance" }; } @Bean diff --git a/src/main/java/com/yolo/keyborad/controller/WalletController.java b/src/main/java/com/yolo/keyborad/controller/WalletController.java new file mode 100644 index 0000000..45dd966 --- /dev/null +++ b/src/main/java/com/yolo/keyborad/controller/WalletController.java @@ -0,0 +1,36 @@ +package com.yolo.keyborad.controller; + +import cn.dev33.satoken.stp.StpUtil; +import com.yolo.keyborad.common.BaseResponse; +import com.yolo.keyborad.common.ResultUtils; +import com.yolo.keyborad.model.vo.wallet.KeyboardUserWalletRespVO; +import com.yolo.keyborad.service.KeyboardUserWalletService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/* + * @author: ziin + * @date: 2025/12/10 + */ +@RestController +@Slf4j +@RequestMapping("/wallet") +@Tag(name = "钱包", description = "用户钱包接口") +public class WalletController { + + @Resource + private KeyboardUserWalletService walletService; + + @GetMapping("/balance") + @Operation(summary = "查询钱包余额", description = "查询当前登录用户的钱包余额") + public BaseResponse getBalance() { + Long userId = StpUtil.getLoginIdAsLong(); + KeyboardUserWalletRespVO balance = walletService.getWalletBalance(userId); + return ResultUtils.success(balance); + } +} diff --git a/src/main/java/com/yolo/keyborad/mapper/KeyboardUserWalletMapper.java b/src/main/java/com/yolo/keyborad/mapper/KeyboardUserWalletMapper.java new file mode 100644 index 0000000..0e26db8 --- /dev/null +++ b/src/main/java/com/yolo/keyborad/mapper/KeyboardUserWalletMapper.java @@ -0,0 +1,12 @@ +package com.yolo.keyborad.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yolo.keyborad.model.entity.KeyboardUserWallet; + +/* + * @author: ziin + * @date: 2025/12/10 18:18 + */ + +public interface KeyboardUserWalletMapper extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/model/entity/KeyboardUserWallet.java b/src/main/java/com/yolo/keyborad/model/entity/KeyboardUserWallet.java new file mode 100644 index 0000000..9d82067 --- /dev/null +++ b/src/main/java/com/yolo/keyborad/model/entity/KeyboardUserWallet.java @@ -0,0 +1,69 @@ +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 java.math.BigDecimal; +import java.util.Date; +import lombok.Data; + +/* +* @author: ziin +* @date: 2025/12/10 18:18 +*/ + +@Schema +@Data +@TableName(value = "keyboard_user_wallet") +public class KeyboardUserWallet { + /** + * 主键 Id + */ + @TableId(value = "id", type = IdType.AUTO) + @Schema(description = "主键 Id") + private Long id; + + /** + * 用户 id + */ + @TableField(value = "user_id") + @Schema(description = "用户 id") + private Long userId; + + /** + * 余额 + */ + @TableField(value = "balance") + @Schema(description = "余额") + private BigDecimal balance; + + /** + * 乐观锁版本 + */ + @TableField(value = "version") + @Schema(description = "乐观锁版本") + private Integer version; + + /** + * 状态 + */ + @TableField(value = "\"status\"") + @Schema(description = "状态") + private Short status; + + /** + * 创建时间 + */ + @TableField(value = "created_at") + @Schema(description = "创建时间") + private Date createdAt; + + /** + * 更新时间 + */ + @TableField(value = "updated_at") + @Schema(description = "更新时间") + private Date updatedAt; +} \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/model/vo/wallet/KeyboardUserWalletRespVO.java b/src/main/java/com/yolo/keyborad/model/vo/wallet/KeyboardUserWalletRespVO.java new file mode 100644 index 0000000..800f6a9 --- /dev/null +++ b/src/main/java/com/yolo/keyborad/model/vo/wallet/KeyboardUserWalletRespVO.java @@ -0,0 +1,20 @@ +package com.yolo.keyborad.model.vo.wallet; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +/* + * @author: ziin + * @date: 2025/12/10 + */ +@Schema(description = "用户钱包返回对象") +@Data +public class KeyboardUserWalletRespVO { + /** + * 余额 + */ + @Schema(description = "余额") + private BigDecimal balance; +} diff --git a/src/main/java/com/yolo/keyborad/service/KeyboardUserWalletService.java b/src/main/java/com/yolo/keyborad/service/KeyboardUserWalletService.java new file mode 100644 index 0000000..cee787e --- /dev/null +++ b/src/main/java/com/yolo/keyborad/service/KeyboardUserWalletService.java @@ -0,0 +1,19 @@ +package com.yolo.keyborad.service; + +import com.yolo.keyborad.model.entity.KeyboardUserWallet; +import com.yolo.keyborad.model.vo.wallet.KeyboardUserWalletRespVO; +import com.baomidou.mybatisplus.extension.service.IService; + /* +* @author: ziin +* @date: 2025/12/10 18:15 +*/ + +public interface KeyboardUserWalletService extends IService{ + + /** + * 获取用户钱包余额 + * @param userId 用户ID + * @return 钱包余额信息 + */ + KeyboardUserWalletRespVO getWalletBalance(Long userId); +} diff --git a/src/main/java/com/yolo/keyborad/service/impl/KeyboardUserWalletServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/KeyboardUserWalletServiceImpl.java new file mode 100644 index 0000000..1c948a0 --- /dev/null +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardUserWalletServiceImpl.java @@ -0,0 +1,39 @@ +package com.yolo.keyborad.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.yolo.keyborad.common.ErrorCode; +import com.yolo.keyborad.exception.BusinessException; +import com.yolo.keyborad.model.vo.wallet.KeyboardUserWalletRespVO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yolo.keyborad.mapper.KeyboardUserWalletMapper; +import com.yolo.keyborad.model.entity.KeyboardUserWallet; +import com.yolo.keyborad.service.KeyboardUserWalletService; + +import java.math.BigDecimal; + +/* +* @author: ziin +* @date: 2025/12/10 18:15 +*/ + +@Service +@Slf4j +public class KeyboardUserWalletServiceImpl extends ServiceImpl implements KeyboardUserWalletService{ + + @Override + public KeyboardUserWalletRespVO getWalletBalance(Long userId) { + KeyboardUserWallet wallet = this.lambdaQuery() + .eq(KeyboardUserWallet::getUserId, userId) + .one(); + KeyboardUserWalletRespVO respVO = new KeyboardUserWalletRespVO(); + if (wallet == null) { + // 如果用户没有钱包记录,返回余额为0 + respVO.setBalance(BigDecimal.ZERO); + } else { + respVO.setBalance(wallet.getBalance()); + } + return respVO; + } +} diff --git a/src/main/resources/mapper/KeyboardUserWalletMapper.xml b/src/main/resources/mapper/KeyboardUserWalletMapper.xml new file mode 100644 index 0000000..e28ecd3 --- /dev/null +++ b/src/main/resources/mapper/KeyboardUserWalletMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + id, user_id, balance, version, "status", created_at, updated_at + + \ No newline at end of file