diff --git a/src/main/java/com/ycwl/basic/pricing/service/impl/CouponServiceImpl.java b/src/main/java/com/ycwl/basic/pricing/service/impl/CouponServiceImpl.java index e9d0e15f..1130f302 100644 --- a/src/main/java/com/ycwl/basic/pricing/service/impl/CouponServiceImpl.java +++ b/src/main/java/com/ycwl/basic/pricing/service/impl/CouponServiceImpl.java @@ -17,6 +17,7 @@ import lombok.RequiredArgsConstructor; import java.util.Date; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.NoTransactionException; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; @@ -292,7 +293,7 @@ public class CouponServiceImpl implements ICouponService { return CouponClaimResult.success(claimRecord, coupon); } catch (CouponInvalidException e) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + markRollbackOnly(); log.warn("领取优惠券失败(业务校验不通过): userId={}, couponId={}, reason={}", request.getUserId(), request.getCouponId(), e.getMessage()); String errorCode = e.getErrorCode() == null @@ -300,10 +301,18 @@ public class CouponServiceImpl implements ICouponService { : e.getErrorCode(); return CouponClaimResult.failure(errorCode, e.getMessage()); } catch (Exception e) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + markRollbackOnly(); log.error("领取优惠券失败: userId={}, couponId={}", request.getUserId(), request.getCouponId(), e); return CouponClaimResult.failure(CouponClaimResult.ERROR_SYSTEM_ERROR, "系统错误,领取失败:" + e.getMessage()); } } + + private void markRollbackOnly() { + try { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } catch (NoTransactionException ex) { + log.debug("未检测到Spring事务上下文,跳过回滚标记"); + } + } }