Browse Source

质押产品增加到期时间字段返回

xrh 2 weeks ago
parent
commit
0022cdc245

+ 1 - 0
bex-cloud-staking-core/src/main/java/com/bex/staking/model/vo/StakingProductDetailVO.java

@@ -12,6 +12,7 @@ public class StakingProductDetailVO {
     private String statusValue;     // 原始状态字符
     private Boolean isShowTwap;     // 是否展示TWAP价格
     private String apr;              // 展示APR
+    private Long countDown;         // 过期时间(sale_end_time)
 
     // 收益参数
     private Integer periodDay;      // 周期(天)

+ 1 - 4
bex-cloud-staking-service/src/main/java/com/bex/staking/converter/StakingProductConverter.java

@@ -54,9 +54,6 @@ public interface StakingProductConverter {
     @Mapping(target = "minInvestNum", expression = "java(AmountFormatter.bex(product.getMinAmount()))")
     @Mapping(target = "thresholdRule", expression = "java(AmountFormatter.thresholdRule(product.getDeflationRate()))")
     @Mapping(target = "lockDay", source = "product.lockDays")
-    @Mapping(
-            target = "countDown",
-            expression =
-                    "java(ProductDisplayMapper.countDown(ProductStatus.fromValue(product.getStatus()), product.getSaleStartTime(), product.getSaleEndTime(), now))")
+    @Mapping(target = "countDown", expression = "java(product.getSaleEndTime())")
     StakingProductVO toVo(StakingProduct product, long now);
 }

+ 1 - 0
bex-cloud-staking-service/src/main/java/com/bex/staking/converter/StakingProductDetailConverter.java

@@ -50,6 +50,7 @@ public interface StakingProductDetailConverter {
     @Mapping(target = "statusValue", expression = "java(product(assembly).getStatus())")
     @Mapping(target = "isShowTwap", expression = "java(product(assembly).getIsShowTwap())")
     @Mapping(target = "apr", expression = "java(AmountFormatter.apr(product(assembly).getApr()))")
+    @Mapping(target = "countDown", expression = "java(product(assembly).getSaleEndTime())")
     @Mapping(target = "periodDay", expression = "java(product(assembly).getLockDays())")
     @Mapping(target = "periodRate", expression = "java(AmountFormatter.percent(product(assembly).getPeriodRate()))")
     @Mapping(target = "dailyRate", expression = "java(AmountFormatter.dailyPercent(assembly.dailyRate()))")

+ 10 - 1
bex-cloud-staking-service/src/main/java/com/bex/staking/engine/OrderEngine.java

@@ -8,6 +8,7 @@ import com.bex.staking.constant.StakingErrorCode;
 import com.bex.staking.entity.StakingOrder;
 import com.bex.staking.entity.StakingProduct;
 import com.bex.staking.enums.OrderStatus;
+import com.bex.staking.enums.ProductType;
 import com.bex.staking.enums.SubscriptionMode;
 import com.bex.staking.exception.StakingException;
 import com.bex.staking.grpc.AssetGrpcClient;
@@ -246,7 +247,15 @@ public class OrderEngine {
             BigDecimal entryPrice,
             BigDecimal initialValueUsdt) {
         long lockStartTime = product.getLockStartTime() != null ? product.getLockStartTime() : System.currentTimeMillis();
-        long expireTime = lockStartTime + (long) product.getLockDays() * StakingConstants.MILLIS_PER_DAY;
+        long expireTime;
+        
+        // 私募订单直接使用产品的锁仓到期时间,质押订单按常规计算
+        if (ProductType.PRIVATE_SALE.getValue().equals(product.getProductType())) {
+            expireTime = product.getLockEndTime();
+        } else {
+            expireTime = lockStartTime + (long) product.getLockDays() * StakingConstants.MILLIS_PER_DAY;
+        }
+        
         return StakingOrder.builder()
                 .orderNo(orderNo)
                 .userId(userId)

+ 10 - 2
bex-cloud-staking-service/src/main/java/com/bex/staking/engine/PreviewEngine.java

@@ -5,6 +5,7 @@ import com.bex.staking.constant.StakingErrorCode;
 import com.bex.staking.converter.StakingPreviewConverter;
 import com.bex.staking.converter.command.PreviewAssembly;
 import com.bex.staking.entity.StakingProduct;
+import com.bex.staking.enums.ProductType;
 import com.bex.staking.exception.StakingException;
 import com.bex.staking.grpc.AssetGrpcClient;
 import com.bex.staking.grpc.MarketPriceClient;
@@ -125,9 +126,16 @@ public class PreviewEngine {
         BigDecimal threshold = resolveThreshold(product.getDeflationRate());
         BigDecimal triggerThreshold = stakingNum.multiply(threshold);
 
-        // 6. 到期时间 = lockStart + lockDays × 86_400_000(需求 4.5 / 属性 6)
+        // 6. 到期时间(需求 4.5 / 属性 6)
         long lockStart = resolveLockStart(product);
-        long expireTime = lockStart + (long) lockDays * StakingConstants.MILLIS_PER_DAY;
+        long expireTime;
+        
+        // 私募订单直接使用产品的锁仓到期时间,质押订单按常规计算
+        if (ProductType.PRIVATE_SALE.getValue().equals(product.getProductType())) {
+            expireTime = product.getLockEndTime();
+        } else {
+            expireTime = lockStart + (long) lockDays * StakingConstants.MILLIS_PER_DAY;
+        }
 
         // 7. 用户可用余额(需求 4.2)
         BigDecimal availableBalance = assetGrpcClient.getAvailableBalance(userId, CURRENCY_BEX);