feat(order): 添加重复购买检测功能

- 新增 DuplicatePurchaseException 类用于处理重复购买异常
- 在 OrderServiceImpl 中实现重复购买检查逻辑
- 更新 CustomExceptionHandle 以处理新的重复购买异常
-优化订单创建流程,在生成订单号前增加重复购买检查
This commit is contained in:
2025-08-30 10:52:26 +08:00
parent 93a424058a
commit 792deb5c4d
4 changed files with 212 additions and 7 deletions

View File

@@ -0,0 +1,58 @@
package com.ycwl.basic.order.exception;
import com.ycwl.basic.exception.BaseException;
import com.ycwl.basic.pricing.enums.ProductType;
/**
* 重复购买异常
* 当用户尝试购买已经购买过的内容时抛出此异常
*/
public class DuplicatePurchaseException extends BaseException {
private final Long existingOrderId;
private final String existingOrderNo;
private final ProductType productType;
private final String productId;
public DuplicatePurchaseException(String message, Long existingOrderId, String existingOrderNo,
ProductType productType, String productId) {
super(message);
this.existingOrderId = existingOrderId;
this.existingOrderNo = existingOrderNo;
this.productType = productType;
this.productId = productId;
}
public DuplicatePurchaseException(String message, Long existingOrderId, String existingOrderNo,
ProductType productType) {
this(message, existingOrderId, existingOrderNo, productType, null);
}
public Long getExistingOrderId() {
return existingOrderId;
}
public String getExistingOrderNo() {
return existingOrderNo;
}
public ProductType getProductType() {
return productType;
}
public String getProductId() {
return productId;
}
/**
* 获取友好的错误消息
*/
public String getFriendlyMessage() {
String productDesc = productType != null ? productType.getDescription() : "商品";
if (productId != null) {
return String.format("您已购买过该%s(商品ID:%s),订单号:%s", productDesc, productId, existingOrderNo);
} else {
return String.format("您已购买过%s,订单号:%s", productDesc, existingOrderNo);
}
}
}