diff --git a/src/main/java/com/yolo/keyborad/controller/AppleReceiptController.java b/src/main/java/com/yolo/keyborad/controller/AppleReceiptController.java index 63a62ab..c7a25c2 100644 --- a/src/main/java/com/yolo/keyborad/controller/AppleReceiptController.java +++ b/src/main/java/com/yolo/keyborad/controller/AppleReceiptController.java @@ -7,6 +7,7 @@ import com.yolo.keyborad.common.ResultUtils; import com.yolo.keyborad.exception.BusinessException; import com.yolo.keyborad.model.dto.AppleReceiptValidationResult; import com.yolo.keyborad.service.ApplePurchaseService; +import com.yolo.keyborad.service.KeyboardUserPurchaseRecordsService; import com.yolo.keyborad.service.AppleReceiptService; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -23,11 +24,14 @@ public class AppleReceiptController { private final AppleReceiptService appleReceiptService; private final ApplePurchaseService applePurchaseService; + private final KeyboardUserPurchaseRecordsService purchaseRecordsService; public AppleReceiptController(AppleReceiptService appleReceiptService, - ApplePurchaseService applePurchaseService) { + ApplePurchaseService applePurchaseService, + KeyboardUserPurchaseRecordsService purchaseRecordsService) { this.appleReceiptService = appleReceiptService; this.applePurchaseService = applePurchaseService; + this.purchaseRecordsService = purchaseRecordsService; } @PostMapping("/receipt") @@ -85,4 +89,26 @@ public class AppleReceiptController { return ResultUtils.success(Boolean.TRUE); } + /** + * 检查购买记录是否存在 + * 根据 transactionId 和 originalTransactionId 查询购买记录 + * + * @param body 请求体,包含 transactionId 和 originalTransactionId + * @return 存在返回 true,不存在返回 false + */ + @PostMapping("/check-purchase") + public BaseResponse checkPurchaseExists(@RequestBody Map body) { + if (body == null) { + throw new BusinessException(ErrorCode.PARAMS_ERROR, "body 不能为空"); + } + String transactionId = body.get("transactionId"); + String originalTransactionId = body.get("originalTransactionId"); + if ((transactionId == null || transactionId.isBlank()) + && (originalTransactionId == null || originalTransactionId.isBlank())) { + throw new BusinessException(ErrorCode.PARAMS_ERROR, "transactionId 和 originalTransactionId 不能同时为空"); + } + + boolean exists = purchaseRecordsService.checkPurchaseExists(transactionId, originalTransactionId); + return ResultUtils.success(exists); + } } diff --git a/src/main/java/com/yolo/keyborad/model/entity/KeyboardUser.java b/src/main/java/com/yolo/keyborad/model/entity/KeyboardUser.java index 93282a5..1529dcc 100644 --- a/src/main/java/com/yolo/keyborad/model/entity/KeyboardUser.java +++ b/src/main/java/com/yolo/keyborad/model/entity/KeyboardUser.java @@ -132,4 +132,8 @@ public class KeyboardUser { @TableField(value = "vip_level") @Schema(description = "vip等级") private Integer vipLevel; + + @TableField(value = "uuid") + @Schema(description = "uuid") + private String uuid; } diff --git a/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserInfoRespVO.java b/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserInfoRespVO.java index adead6f..ee76f4d 100644 --- a/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserInfoRespVO.java +++ b/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserInfoRespVO.java @@ -57,4 +57,6 @@ public class KeyboardUserInfoRespVO { @Schema(description = "vip等级") private Integer vipLevel; + @Schema(description = "uuid") + private String uuid; } \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserRespVO.java b/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserRespVO.java index 1449202..dc85ea9 100644 --- a/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserRespVO.java +++ b/src/main/java/com/yolo/keyborad/model/vo/user/KeyboardUserRespVO.java @@ -59,4 +59,8 @@ public class KeyboardUserRespVO { @TableField(value = "vip_level") @Schema(description = "vip等级") private Integer vipLevel; + + @TableField(value = "uuid") + @Schema(description = "uuid") + private String uuid; } \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/service/KeyboardUserPurchaseRecordsService.java b/src/main/java/com/yolo/keyborad/service/KeyboardUserPurchaseRecordsService.java index f0786d8..cd33bef 100644 --- a/src/main/java/com/yolo/keyborad/service/KeyboardUserPurchaseRecordsService.java +++ b/src/main/java/com/yolo/keyborad/service/KeyboardUserPurchaseRecordsService.java @@ -8,4 +8,13 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface KeyboardUserPurchaseRecordsService extends IService{ + + /** + * 检查购买记录是否存在 + * + * @param transactionId 交易 ID + * @param originalTransactionId 原始交易 ID + * @return 存在返回 true,不存在返回 false + */ + boolean checkPurchaseExists(String transactionId, String originalTransactionId); } diff --git a/src/main/java/com/yolo/keyborad/service/impl/KeyboardUserPurchaseRecordsServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/KeyboardUserPurchaseRecordsServiceImpl.java index b1b089d..5490801 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardUserPurchaseRecordsServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardUserPurchaseRecordsServiceImpl.java @@ -1,8 +1,7 @@ package com.yolo.keyborad.service.impl; import org.springframework.stereotype.Service; -import org.springframework.beans.factory.annotation.Autowired; -import java.util.List; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yolo.keyborad.mapper.KeyboardUserPurchaseRecordsMapper; import com.yolo.keyborad.model.entity.KeyboardUserPurchaseRecords; @@ -11,8 +10,19 @@ import com.yolo.keyborad.service.KeyboardUserPurchaseRecordsService; * @author: ziin * @date: 2025/12/12 15:16 */ - + @Service public class KeyboardUserPurchaseRecordsServiceImpl extends ServiceImpl implements KeyboardUserPurchaseRecordsService{ + @Override + public boolean checkPurchaseExists(String transactionId, String originalTransactionId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (transactionId != null && !transactionId.isBlank()) { + queryWrapper.eq(KeyboardUserPurchaseRecords::getTransactionId, transactionId); + } + if (originalTransactionId != null && !originalTransactionId.isBlank()) { + queryWrapper.eq(KeyboardUserPurchaseRecords::getOriginalTransactionId, originalTransactionId); + } + return exists(queryWrapper); + } } diff --git a/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java index 6702388..8700196 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java @@ -2,6 +2,7 @@ package com.yolo.keyborad.service.impl; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.UUID; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -203,6 +204,7 @@ public class UserServiceImpl extends ServiceImpl