Browse Source

功能:质押产品上下架功能

xrh 1 week ago
parent
commit
29b0c46899

+ 3 - 0
bex-cloud-staking-entity/src/main/java/com/bex/staking/entity/StakingProduct.java

@@ -99,6 +99,9 @@ public class StakingProduct extends BaseEntity {
     /** 贡献值比例(%),空值默认100% */
     private BigDecimal contributionRate;
 
+    /** 是否上架: true 上架 false 下架 */
+    private Boolean isOnline;
+
     /** 展示小数位 */
     private Integer displayScale;
 

+ 3 - 1
bex-cloud-staking-entity/src/main/resources/mapper/StakingProductMapper.xml

@@ -40,6 +40,7 @@
         <result column="deleted" property="deleted"/>
         <result column="created_at" property="createdAt"/>
         <result column="updated_at" property="updatedAt"/>
+        <result column="is_online" property="isOnline"/>
     </resultMap>
 
     <!-- 全部列 -->
@@ -48,7 +49,7 @@
         sub_mode, tier_config, min_amount, max_amount, total_capacity, raised_amount, interest_type,
         apr, period_rate, fixed_interest_amount, lock_days, redeem_type, deflation_rate, display_scale,
         sale_start_time, sale_end_time, lock_start_time, lock_end_time, version, deleted,
-        created_at, updated_at
+        created_at, updated_at, is_online
     </sql>
 
     <!-- 按产品分页查询,支持是否仅推荐过滤(需求 2.10) -->
@@ -57,6 +58,7 @@
         <include refid="Base_Column_List"/>
         FROM staking_product
         WHERE deleted = 0
+          AND is_online = 1
         <if test="isRecommendation != null and isRecommendation == true">
             AND is_recommend = 1
         </if>

+ 43 - 4
bex-cloud-staking-service/src/main/java/com/bex/staking/grpc/StakingGrpcService.java

@@ -61,6 +61,9 @@ public class StakingGrpcService extends StakingServiceGrpc.StakingServiceImplBas
             if (ObjectUtils.isNotEmpty(request.getTitle())) {
                 wrapper.like(StakingProduct::getTitle, request.getTitle());
             }
+            if (request.hasIsOnline()) {
+                wrapper.eq(StakingProduct::getIsOnline, request.getIsOnline());
+            }
             wrapper.orderByDesc(StakingProduct::getCreatedAt);
 
             Page<StakingProduct> result = stakingProductMapper.selectPage(pageParam, wrapper);
@@ -147,6 +150,7 @@ public class StakingGrpcService extends StakingServiceGrpc.StakingServiceImplBas
             product.setLockEndTime(request.getLockEndTime());
             product.setTierConfig(request.getTierConfig());
             product.setContributionRate(new BigDecimal(request.getContributionRate()));
+            product.setIsOnline(request.getIsOnline());
 
             stakingProductMapper.insert(product);
 
@@ -187,8 +191,8 @@ public class StakingGrpcService extends StakingServiceGrpc.StakingServiceImplBas
             if (ObjectUtils.isNotEmpty(request.getMaxAmount())) product.setMaxAmount(new java.math.BigDecimal(request.getMaxAmount()));
             if (ObjectUtils.isNotEmpty(request.getTotalCapacity())) product.setTotalCapacity(new java.math.BigDecimal(request.getTotalCapacity()));
             if (ObjectUtils.isNotEmpty(request.getStatus())) product.setStatus(request.getStatus());
-            if (ObjectUtils.isNotEmpty(request.getIsRecommend())) product.setIsRecommend(request.getIsRecommend());
-            if (ObjectUtils.isNotEmpty(request.getIsShowTwap())) product.setIsShowTwap(request.getIsShowTwap());
+            if (request.hasIsRecommend()) product.setIsRecommend(request.getIsRecommend());
+            if (request.hasIsShowTwap()) product.setIsShowTwap(request.getIsShowTwap());
             if (ObjectUtils.isNotEmpty(request.getSubMode())) product.setSubMode(request.getSubMode());
             if (ObjectUtils.isNotEmpty(request.getInterestType())) product.setInterestType(request.getInterestType());
             if (ObjectUtils.isNotEmpty(request.getPeriodRate())) product.setPeriodRate(new BigDecimal(request.getPeriodRate()));
@@ -203,6 +207,7 @@ public class StakingGrpcService extends StakingServiceGrpc.StakingServiceImplBas
             if (ObjectUtils.isNotEmpty(request.getLockEndTime())) product.setLockEndTime(request.getLockEndTime());
             if (ObjectUtils.isNotEmpty(request.getTierConfig())) product.setTierConfig(request.getTierConfig());
             if (ObjectUtils.isNotEmpty(request.getContributionRate())) product.setContributionRate(new BigDecimal(request.getContributionRate()));
+            if (request.hasIsOnline()) product.setIsOnline(request.getIsOnline());
 
             product.setUpdatedAt(LocalDateTime.now());
             stakingProductMapper.updateById(product);
@@ -211,7 +216,6 @@ public class StakingGrpcService extends StakingServiceGrpc.StakingServiceImplBas
 
             responseObserver.onNext(UpdateProductResponse.newBuilder()
                     .setSuccess(true)
-                    .setMessage("ok")
                     .build());
             responseObserver.onCompleted();
         } catch (Exception e) {
@@ -224,6 +228,40 @@ public class StakingGrpcService extends StakingServiceGrpc.StakingServiceImplBas
         }
     }
 
+    @Override
+    public void updateProductOnlineStatus(UpdateProductOnlineStatusRequest request, StreamObserver<UpdateProductOnlineStatusResponse> responseObserver) {
+        try {
+            StakingProduct product = stakingProductMapper.selectById(request.getId());
+            if (product == null) {
+                responseObserver.onNext(UpdateProductOnlineStatusResponse.newBuilder()
+                        .setSuccess(false)
+                        .setMessage("Product not found")
+                        .build());
+                responseObserver.onCompleted();
+                return;
+            }
+
+            product.setIsOnline(request.getIsOnline());
+            product.setUpdatedAt(LocalDateTime.now());
+            stakingProductMapper.updateById(product);
+
+            log.info("Updated staking product online status, id={}, isOnline={}", product.getId(), request.getIsOnline());
+
+            responseObserver.onNext(UpdateProductOnlineStatusResponse.newBuilder()
+                    .setSuccess(true)
+                    .setMessage("ok")
+                    .build());
+            responseObserver.onCompleted();
+        } catch (Exception e) {
+            log.error("updateProductOnlineStatus gRPC error: {}", e.getMessage(), e);
+            responseObserver.onNext(UpdateProductOnlineStatusResponse.newBuilder()
+                    .setSuccess(false)
+                    .setMessage(e.getMessage())
+                    .build());
+            responseObserver.onCompleted();
+        }
+    }
+
     @Override
     public void deleteProduct(DeleteProductRequest request, StreamObserver<DeleteProductResponse> responseObserver) {
         try {
@@ -407,7 +445,8 @@ public class StakingGrpcService extends StakingServiceGrpc.StakingServiceImplBas
                 .setLockStartTime(p.getLockStartTime() != null ? p.getLockStartTime() : 0L)
                 .setLockEndTime(p.getLockEndTime() != null ? p.getLockEndTime() : 0L)
                 .setVersion(p.getVersion() != null ? p.getVersion() : 0)
-                .setContributionRate(p.getContributionRate().toString());
+                .setContributionRate(p.getContributionRate().toString())
+                .setIsOnline(java.lang.Boolean.TRUE.equals(p.getIsOnline()));
 
         if (p.getCreatedAt() != null) {
             builder.setCreatedAt(p.getCreatedAt().atZone(ZoneId.systemDefault()).format(FMT));