Browse Source

fix:786 【质押】产品下架后不允许继续质押

xrh 1 week ago
parent
commit
fc643c7005

+ 4 - 0
bex-cloud-staking-core/src/main/java/com/bex/staking/constant/StakingErrorCode.java

@@ -17,6 +17,7 @@ package com.bex.staking.constant;
  *   <li>40008 检测到重复请求(幂等键命中处理中)(需求 14.2)
  *   <li>40009 订单不存在或不属于当前用户(需求 7.1、8.1)
  *   <li>40010 乐观锁冲突或数据已变更(并发更新保护)
+ *   <li>40011 产品已下架
  *   <li>50001 资产服务 gRPC 调用失败(需求 5.12、10.6、15.3)
  * </ul>
  */
@@ -54,6 +55,9 @@ public final class StakingErrorCode {
     /** 乐观锁冲突或数据已变更(并发更新保护) */
     public static final int OPTIMISTIC_LOCK_CONFLICT = 40010;
 
+    /** 产品已下架 */
+    public static final int PRODUCT_OFFLINE = 40011;
+
     /** 资产服务 gRPC 调用失败(扣减 / 到账 / 销毁) */
     public static final int ASSET_GRPC_FAILED = 50001;
 }

+ 6 - 0
bex-cloud-staking-service/src/main/java/com/bex/staking/engine/OrderEngine.java

@@ -143,6 +143,12 @@ public class OrderEngine {
             throw new StakingException(StakingErrorCode.PRODUCT_NOT_FOUND, "产品不存在");
         }
 
+        // 2.1 产品下架校验:产品已下架则拒绝下单(抛 40011)
+        if (product.getIsOnline() == null || !product.getIsOnline()) {
+            log.warn("确认质押失败:产品已下架, userId={}, productId={}", userId, req.getProductId());
+            throw new StakingException(StakingErrorCode.PRODUCT_OFFLINE, "产品已下架");
+        }
+
         // 3. 额度校验(需求 5.2~5.5、12.1、12.2):最小 100 BEX + 固定档位/无限制区间,校验失败抛 40003
         SubscriptionMode mode = SubscriptionMode.fromValue(product.getSubMode());
         SubscriptionValidator.validate(