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