diff --git a/mvnw b/mvnw old mode 100644 new mode 100755 diff --git a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java index 85dc3e3..deed191 100644 --- a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java +++ b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java @@ -88,7 +88,8 @@ public class SaTokenConfigure implements WebMvcConfigurer { "/chat/save_embed", "/themes/listByStyle", "/wallet/balance", - "/themes/purchase" + "/themes/purchase", + "/themes/purchase/list" }; } @Bean diff --git a/src/main/java/com/yolo/keyborad/controller/ThemesController.java b/src/main/java/com/yolo/keyborad/controller/ThemesController.java index b1f1e48..298b72b 100644 --- a/src/main/java/com/yolo/keyborad/controller/ThemesController.java +++ b/src/main/java/com/yolo/keyborad/controller/ThemesController.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.stp.StpUtil; import com.yolo.keyborad.common.BaseResponse; import com.yolo.keyborad.common.ResultUtils; import com.yolo.keyborad.model.dto.purchase.ThemePurchaseReq; +import com.yolo.keyborad.model.vo.purchase.ThemePurchaseListRespVO; import com.yolo.keyborad.model.vo.purchase.ThemePurchaseRespVO; import com.yolo.keyborad.model.vo.themes.KeyboardThemeStylesRespVO; import com.yolo.keyborad.model.vo.themes.KeyboardThemesRespVO; @@ -58,4 +59,12 @@ public class ThemesController { return ResultUtils.success(result); } + @GetMapping("/purchase/list") + @Operation(summary = "查询购买记录", description = "查询当前用户的主题购买记录") + public BaseResponse> getPurchaseList() { + Long userId = StpUtil.getLoginIdAsLong(); + List result = themePurchaseService.getUserPurchaseList(userId); + return ResultUtils.success(result); + } + } diff --git a/src/main/java/com/yolo/keyborad/model/entity/KeyboardThemePurchase.java b/src/main/java/com/yolo/keyborad/model/entity/KeyboardThemePurchase.java index 424e96c..5644400 100644 --- a/src/main/java/com/yolo/keyborad/model/entity/KeyboardThemePurchase.java +++ b/src/main/java/com/yolo/keyborad/model/entity/KeyboardThemePurchase.java @@ -5,6 +5,8 @@ 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; @@ -50,14 +52,14 @@ public class KeyboardThemePurchase { */ @TableField(value = "cost_points") @Schema(description="皮肤原始所需积分") - private Integer costPoints; + private BigDecimal costPoints; /** * 实际扣除积分 */ @TableField(value = "paid_points") @Schema(description="实际扣除积分") - private Integer paidPoints; + private BigDecimal paidPoints; /** * 支付状态:0待支付 1已支付 2已关闭 3已退款 diff --git a/src/main/java/com/yolo/keyborad/model/vo/purchase/ThemePurchaseListRespVO.java b/src/main/java/com/yolo/keyborad/model/vo/purchase/ThemePurchaseListRespVO.java new file mode 100644 index 0000000..d127e98 --- /dev/null +++ b/src/main/java/com/yolo/keyborad/model/vo/purchase/ThemePurchaseListRespVO.java @@ -0,0 +1,36 @@ +package com.yolo.keyborad.model.vo.purchase; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 主题购买记录响应 + */ +@Schema(description = "主题购买记录响应") +@Data +public class ThemePurchaseListRespVO { + + @Schema(description = "订单号") + private String orderNo; + + @Schema(description = "主题ID") + private Long themeId; + + @Schema(description = "主题名称") + private String themeName; + + @Schema(description = "支付金额") + private BigDecimal paidAmount; + + @Schema(description = "支付状态:0待支付 1已支付 2已关闭 3已退款") + private Short payStatus; + + @Schema(description = "购买时间") + private Date createdAt; + + @Schema(description = "支付时间") + private Date paidAt; +} diff --git a/src/main/java/com/yolo/keyborad/service/KeyboardThemePurchaseService.java b/src/main/java/com/yolo/keyborad/service/KeyboardThemePurchaseService.java index da09906..6b385c9 100644 --- a/src/main/java/com/yolo/keyborad/service/KeyboardThemePurchaseService.java +++ b/src/main/java/com/yolo/keyborad/service/KeyboardThemePurchaseService.java @@ -2,7 +2,11 @@ package com.yolo.keyborad.service; import com.yolo.keyborad.model.entity.KeyboardThemePurchase; import com.baomidou.mybatisplus.extension.service.IService; +import com.yolo.keyborad.model.vo.purchase.ThemePurchaseListRespVO; import com.yolo.keyborad.model.vo.purchase.ThemePurchaseRespVO; + +import java.util.List; + /* * @author: ziin * @date: 2025/12/10 19:17 @@ -14,4 +18,9 @@ public interface KeyboardThemePurchaseService extends IService getUserPurchaseList(Long userId); } 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 015d5a7..12cb581 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemePurchaseServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemePurchaseServiceImpl.java @@ -5,16 +5,19 @@ import com.yolo.keyborad.exception.BusinessException; import com.yolo.keyborad.model.entity.KeyboardThemes; import com.yolo.keyborad.model.entity.KeyboardUserWallet; import com.yolo.keyborad.model.entity.KeyboardWalletTransaction; +import com.yolo.keyborad.model.vo.purchase.ThemePurchaseListRespVO; import com.yolo.keyborad.model.vo.purchase.ThemePurchaseRespVO; import com.yolo.keyborad.service.KeyboardThemesService; import com.yolo.keyborad.service.KeyboardUserWalletService; import com.yolo.keyborad.service.KeyboardWalletTransactionService; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.Date; +import java.util.List; import java.util.UUID; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -29,13 +32,13 @@ import com.yolo.keyborad.service.KeyboardThemePurchaseService; @Service public class KeyboardThemePurchaseServiceImpl extends ServiceImpl implements KeyboardThemePurchaseService{ - @Autowired + @Resource private KeyboardThemesService themesService; - @Autowired + @Resource private KeyboardUserWalletService walletService; - @Autowired + @Resource private KeyboardWalletTransactionService transactionService; @Override @@ -105,8 +108,8 @@ public class KeyboardThemePurchaseServiceImpl extends ServiceImpl getUserPurchaseList(Long userId) { + // 1. 查询用户的所有购买记录,按创建时间倒序排列 + List purchases = this.lambdaQuery() + .eq(KeyboardThemePurchase::getUserId, userId) // 根据用户ID筛选 + .orderByDesc(KeyboardThemePurchase::getCreatedAt) // 按创建时间倒序 + .list(); + + // 2. 将购买记录转换为响应VO对象 + return purchases.stream().map(purchase -> { + // 创建响应VO对象 + ThemePurchaseListRespVO vo = new ThemePurchaseListRespVO(); + // 设置订单基本信息 + vo.setOrderNo(purchase.getOrderNo()); // 订单号 + vo.setThemeId(purchase.getThemeId()); // 主题ID + vo.setPaidAmount(purchase.getPaidPoints()); // 支付金额 + vo.setPayStatus(purchase.getPayStatus()); // 支付状态 + vo.setCreatedAt(purchase.getCreatedAt()); // 创建时间 + vo.setPaidAt(purchase.getPaidAt()); // 支付时间 + + // 3. 获取主题详情,填充主题名称 + KeyboardThemes theme = themesService.getById(purchase.getThemeId()); + if (theme != null) { + vo.setThemeName(theme.getThemeName()); // 主题名称 + } + + return vo; + }).collect(java.util.stream.Collectors.toList()); + } } diff --git a/src/main/resources/mapper/KeyboardThemePurchaseMapper.xml b/src/main/resources/mapper/KeyboardThemePurchaseMapper.xml index d1037d9..2013183 100644 --- a/src/main/resources/mapper/KeyboardThemePurchaseMapper.xml +++ b/src/main/resources/mapper/KeyboardThemePurchaseMapper.xml @@ -8,8 +8,8 @@ - - + +