diff --git a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java index f313371..411a6e8 100644 --- a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java +++ b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java @@ -105,7 +105,8 @@ public class SaTokenConfigure implements WebMvcConfigurer { "/apple/validate-receipt", "/user/inviteCode", "/user/bindInviteCode", - "/themes/listAllStyles" + "/themes/listAllStyles", + "/wallet/transactions" }; } @Bean diff --git a/src/main/java/com/yolo/keyborad/controller/ThemesController.java b/src/main/java/com/yolo/keyborad/controller/ThemesController.java index db4074d..23bbbcc 100644 --- a/src/main/java/com/yolo/keyborad/controller/ThemesController.java +++ b/src/main/java/com/yolo/keyborad/controller/ThemesController.java @@ -99,4 +99,12 @@ public class ThemesController { return ResultUtils.success(result); } + @PostMapping("/restore") + @Operation(summary = "恢复已删除的主题", description = "将用户已删除的主题重新展示") + public BaseResponse restoreTheme(@RequestParam Long themeId) { + Long userId = StpUtil.getLoginIdAsLong(); + themePurchaseService.restoreDeletedTheme(userId, themeId); + return ResultUtils.success(null); + } + } diff --git a/src/main/java/com/yolo/keyborad/controller/WalletController.java b/src/main/java/com/yolo/keyborad/controller/WalletController.java index 45dd966..793badb 100644 --- a/src/main/java/com/yolo/keyborad/controller/WalletController.java +++ b/src/main/java/com/yolo/keyborad/controller/WalletController.java @@ -1,16 +1,20 @@ package com.yolo.keyborad.controller; import cn.dev33.satoken.stp.StpUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.yolo.keyborad.common.BaseResponse; import com.yolo.keyborad.common.ResultUtils; import com.yolo.keyborad.model.vo.wallet.KeyboardUserWalletRespVO; +import com.yolo.keyborad.model.vo.wallet.WalletTransactionRespVO; import com.yolo.keyborad.service.KeyboardUserWalletService; +import com.yolo.keyborad.service.KeyboardWalletTransactionService; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; /* @@ -26,6 +30,9 @@ public class WalletController { @Resource private KeyboardUserWalletService walletService; + @Resource + private KeyboardWalletTransactionService transactionService; + @GetMapping("/balance") @Operation(summary = "查询钱包余额", description = "查询当前登录用户的钱包余额") public BaseResponse getBalance() { @@ -33,4 +40,14 @@ public class WalletController { KeyboardUserWalletRespVO balance = walletService.getWalletBalance(userId); return ResultUtils.success(balance); } + + @GetMapping("/transactions") + @Operation(summary = "分页查询钱包交易记录", description = "分页查询当前用户的钱包交易记录") + public BaseResponse> getTransactions( + @RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize) { + Long userId = StpUtil.getLoginIdAsLong(); + IPage transactions = transactionService.getUserTransactions(userId, pageNum, pageSize); + return ResultUtils.success(transactions); + } } diff --git a/src/main/java/com/yolo/keyborad/mapper/KeyboardWalletTransactionMapper.java b/src/main/java/com/yolo/keyborad/mapper/KeyboardWalletTransactionMapper.java index 06a843a..ef81997 100644 --- a/src/main/java/com/yolo/keyborad/mapper/KeyboardWalletTransactionMapper.java +++ b/src/main/java/com/yolo/keyborad/mapper/KeyboardWalletTransactionMapper.java @@ -4,9 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yolo.keyborad.model.entity.KeyboardWalletTransaction; /* -* @author: ziin -* @date: 2025/12/10 18:54 -*/ - + * @author: ziin + * @date: 2025/12/22 18:10 + */ + public interface KeyboardWalletTransactionMapper extends BaseMapper { } \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/model/entity/KeyboardWalletTransaction.java b/src/main/java/com/yolo/keyborad/model/entity/KeyboardWalletTransaction.java index 18ffee0..36f94bf 100644 --- a/src/main/java/com/yolo/keyborad/model/entity/KeyboardWalletTransaction.java +++ b/src/main/java/com/yolo/keyborad/model/entity/KeyboardWalletTransaction.java @@ -11,9 +11,9 @@ import lombok.Data; /* * @author: ziin -* @date: 2025/12/10 18:54 +* @date: 2025/12/22 18:10 */ - + @Schema @Data @TableName(value = "keyboard_wallet_transaction") @@ -22,62 +22,62 @@ public class KeyboardWalletTransaction { * 主键 Id */ @TableId(value = "id", type = IdType.AUTO) - @Schema(description="主键 Id") + @Schema(description = "主键 Id") private Long id; /** * 用户 Id */ @TableField(value = "user_id") - @Schema(description="用户 Id") + @Schema(description = "用户 Id") private Long userId; /** * 订单 Id */ @TableField(value = "order_id") - @Schema(description="订单 Id") + @Schema(description = "订单 Id") private Long orderId; /** * 金额 */ @TableField(value = "amount") - @Schema(description="金额") + @Schema(description = "金额") private BigDecimal amount; /** * 变动类型 */ @TableField(value = "\"type\"") - @Schema(description="变动类型") + @Schema(description = "变动类型") private Short type; /** * 变动前余额 */ @TableField(value = "before_balance") - @Schema(description="变动前余额") + @Schema(description = "变动前余额") private BigDecimal beforeBalance; /** * 变动后余额 */ @TableField(value = "after_balance") - @Schema(description="变动后余额") + @Schema(description = "变动后余额") private BigDecimal afterBalance; /** * 描述 */ @TableField(value = "description") - @Schema(description="描述") + @Schema(description = "描述") private String description; /** * 创建时间 */ @TableField(value = "created_at") - @Schema(description="创建时间") + @Schema(description = "创建时间") private Date createdAt; } \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/model/vo/wallet/WalletTransactionRespVO.java b/src/main/java/com/yolo/keyborad/model/vo/wallet/WalletTransactionRespVO.java new file mode 100644 index 0000000..5c70c7a --- /dev/null +++ b/src/main/java/com/yolo/keyborad/model/vo/wallet/WalletTransactionRespVO.java @@ -0,0 +1,36 @@ +package com.yolo.keyborad.model.vo.wallet; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "钱包交易记录响应") +public class WalletTransactionRespVO { + + @Schema(description = "交易ID") + private Long id; + + @Schema(description = "金额") + private BigDecimal amount; + + @Schema(description = "变动类型") + private Short type; + + @Schema(description = "变动前余额") + private BigDecimal beforeBalance; + + @Schema(description = "变动后余额") + private BigDecimal afterBalance; + + @Schema(description = "描述") + private String description; + + @Schema(description = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createdAt; +} diff --git a/src/main/java/com/yolo/keyborad/service/KeyboardThemePurchaseService.java b/src/main/java/com/yolo/keyborad/service/KeyboardThemePurchaseService.java index a9f2946..0e7ba70 100644 --- a/src/main/java/com/yolo/keyborad/service/KeyboardThemePurchaseService.java +++ b/src/main/java/com/yolo/keyborad/service/KeyboardThemePurchaseService.java @@ -29,4 +29,9 @@ public interface KeyboardThemePurchaseService extends IService getUserPurchasedThemes(Long userId); + + /** + * 恢复已删除的主题 + */ + void restoreDeletedTheme(Long userId, Long themeId); } diff --git a/src/main/java/com/yolo/keyborad/service/KeyboardWalletTransactionService.java b/src/main/java/com/yolo/keyborad/service/KeyboardWalletTransactionService.java index 7fef34d..63c2c51 100644 --- a/src/main/java/com/yolo/keyborad/service/KeyboardWalletTransactionService.java +++ b/src/main/java/com/yolo/keyborad/service/KeyboardWalletTransactionService.java @@ -1,7 +1,9 @@ package com.yolo.keyborad.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.yolo.keyborad.model.entity.KeyboardWalletTransaction; import com.baomidou.mybatisplus.extension.service.IService; +import com.yolo.keyborad.model.vo.wallet.WalletTransactionRespVO; import java.math.BigDecimal; @@ -18,4 +20,9 @@ public interface KeyboardWalletTransactionService extends IService getUserTransactions(Long userId, Integer pageNum, Integer pageSize); } diff --git a/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemePurchaseServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemePurchaseServiceImpl.java index 9c0abe8..12a9c32 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemePurchaseServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemePurchaseServiceImpl.java @@ -242,4 +242,19 @@ public class KeyboardThemePurchaseServiceImpl extends ServiceImpl getUserTransactions(Long userId, Integer pageNum, Integer pageSize) { + Page page = new Page<>(pageNum, pageSize); + IPage transactionPage = this.lambdaQuery() + .eq(KeyboardWalletTransaction::getUserId, userId) + .orderByDesc(KeyboardWalletTransaction::getCreatedAt) + .page(page); + + return transactionPage.convert(transaction -> { + WalletTransactionRespVO vo = new WalletTransactionRespVO(); + vo.setId(transaction.getId()); + vo.setAmount(transaction.getAmount()); + vo.setType(transaction.getType()); + vo.setBeforeBalance(transaction.getBeforeBalance()); + vo.setAfterBalance(transaction.getAfterBalance()); + vo.setDescription(transaction.getDescription()); + vo.setCreatedAt(transaction.getCreatedAt()); + return vo; + }); + } }