From 1a6fb944b201a24924c4ad353c2ea82ae1667567 Mon Sep 17 00:00:00 2001 From: ziin Date: Wed, 10 Dec 2025 19:58:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(theme):=20=E6=94=AF=E6=8C=81=E8=B4=AD?= =?UTF-8?q?=E4=B9=B0=E8=AE=B0=E5=BD=95=E6=9F=A5=E8=AF=A2=E5=B9=B6=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E7=A7=AF=E5=88=86=E7=B1=BB=E5=9E=8B=E4=B8=BABigDecima?= =?UTF-8?q?l?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 /themes/purchase/list 接口,支持用户查询主题购买记录 - 将 KeyboardThemePurchase 中的积分字段由 Integer 改为 BigDecimal,确保金额精度 - 对应 Mapper XML 中 jdbcType 由 INTEGER 调整为 NUMERIC - 补充 getUserPurchaseList 服务及返回 VO ThemePurchaseListRespVO - 开放接口权限并完善跨域配置 --- mvnw | 0 .../keyborad/config/SaTokenConfigure.java | 3 +- .../keyborad/controller/ThemesController.java | 9 ++++ .../model/entity/KeyboardThemePurchase.java | 6 ++- .../vo/purchase/ThemePurchaseListRespVO.java | 36 +++++++++++++ .../service/KeyboardThemePurchaseService.java | 9 ++++ .../KeyboardThemePurchaseServiceImpl.java | 50 +++++++++++++++++-- .../mapper/KeyboardThemePurchaseMapper.xml | 4 +- 8 files changed, 107 insertions(+), 10 deletions(-) mode change 100644 => 100755 mvnw create mode 100644 src/main/java/com/yolo/keyborad/model/vo/purchase/ThemePurchaseListRespVO.java 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 @@ - - + +