Explorar o código

Merge branch 'dev'

# Conflicts:
#	src/main/java/com/izouma/nineth/service/MintOrderService.java
xiongzhu %!s(int64=4) %!d(string=hai) anos
pai
achega
00514dded1

+ 1 - 1
src/main/java/com/izouma/nineth/config/RedisKeys.java

@@ -23,7 +23,7 @@ public class RedisKeys {
 
     public static final String UPDATE_SALE = "updateSale";
 
-    public static final String UPDATE_STOCK = "updateSale";
+    public static final String UPDATE_STOCK = "updateStock";
 
     public static final String LIMIT_REQ = "limitReq::";
 

+ 12 - 7
src/main/java/com/izouma/nineth/listener/UpdateSaleListener.java

@@ -13,6 +13,8 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import java.util.Set;
+
 @Service
 @Slf4j
 @AllArgsConstructor
@@ -35,14 +37,17 @@ public class UpdateSaleListener implements RocketMQListener<Long> {
     @Scheduled(fixedRate = 10000)
     public void updateSale() {
         BoundHashOperations<String, String, Integer> ops = redisTemplate.boundHashOps(RedisKeys.UPDATE_SALE);
-        for (String id : ops.keys()) {
-            Long val = ops.increment(id, -1);
-            if (val <= 0) {
-                ops.delete(id);
-            } else if (val > 1) {
-                ops.put(id, 1);
+        Set<String> keys = ops.keys();
+        if (keys != null) {
+            for (String id : keys) {
+                Long val = ops.increment(id, -1);
+                if (val <= 0) {
+                    ops.delete(id);
+                } else if (val > 1) {
+                    ops.put(id, 1);
+                }
+                collectionService.syncSale(Long.parseLong(id));
             }
-            collectionService.syncSale(Long.parseLong(id));
         }
     }
 }

+ 27 - 2
src/main/java/com/izouma/nineth/listener/UpdateStockListener.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.listener;
 
+import com.izouma.nineth.config.RedisKeys;
 import com.izouma.nineth.service.CollectionService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -7,8 +8,13 @@ import org.apache.rocketmq.spring.annotation.ConsumeMode;
 import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
 import org.apache.rocketmq.spring.core.RocketMQListener;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.data.redis.core.BoundHashOperations;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import java.util.Set;
+
 @Service
 @Slf4j
 @AllArgsConstructor
@@ -19,10 +25,29 @@ import org.springframework.stereotype.Service;
 @ConditionalOnProperty(value = "general.notify-server", havingValue = "false", matchIfMissing = true)
 public class UpdateStockListener implements RocketMQListener<Long> {
 
-    private CollectionService collectionService;
+    private CollectionService             collectionService;
+    private RedisTemplate<String, Object> redisTemplate;
 
     @Override
     public void onMessage(Long id) {
-        collectionService.syncStock(id);
+        BoundHashOperations<String, String, Integer> ops = redisTemplate.boundHashOps(RedisKeys.UPDATE_STOCK);
+        ops.increment(id.toString(), 1);
+    }
+
+    @Scheduled(fixedRate = 10000)
+    public void updateSale() {
+        BoundHashOperations<String, String, Integer> ops = redisTemplate.boundHashOps(RedisKeys.UPDATE_STOCK);
+        Set<String> keys = ops.keys();
+        if (keys != null) {
+            for (String id : keys) {
+                Long val = ops.increment(id, -1);
+                if (val <= 0) {
+                    ops.delete(id);
+                } else if (val > 1) {
+                    ops.put(id, 1);
+                }
+                collectionService.syncStock(Long.parseLong(id));
+            }
+        }
     }
 }

+ 1 - 1
src/main/java/com/izouma/nineth/service/CollectionService.java

@@ -416,7 +416,7 @@ public class CollectionService {
         return increaseSale(id, -number);
     }
 
-    @Debounce(key = "#id", delay = 500)
+//    @Debounce(key = "#id", delay = 500)
     public void syncStock(Long id) {
         Integer stock = (Integer) redisTemplate.opsForValue().get(RedisKeys.COLLECTION_STOCK + id);
         if (stock != null) {

+ 2 - 1
src/main/java/com/izouma/nineth/service/MintOrderService.java

@@ -306,7 +306,7 @@ public class MintOrderService {
 
             //销量
 //        mintActivityService.increaseSale(mintActivityId, 1);
-            if (mintOrder.getGasPrice().compareTo(BigDecimal.ZERO)==0) {
+            if (mintOrder.getGasPrice().equals(BigDecimal.ZERO)) {
                 this.mintNotify(mintOrder.getId(), PayMethod.WEIXIN, null);
             }
             return mintOrder;
@@ -548,6 +548,7 @@ public class MintOrderService {
             rocketMQTemplate.syncSend(generalProperties.getUpdateStockTopic(), order.getMintActivityId(), 10000);
             log.info("取消订单{}", order.getId());
         } catch (Exception e) {
+            mintActivityService.decreaseStock(order.getMintActivityId(),1);
             log.error("订单取消错误 orderId: " + order.getId(), e);
         }
         releaseOrderLock(order.getId());

+ 14 - 0
src/main/java/com/izouma/nineth/service/UserService.java

@@ -711,4 +711,18 @@ public class UserService {
         user.setTradeCode(null);
         return user;
     }
+
+    public Page<Minter> toMinterDTO(Page<User> users) {
+        List<User> origins = users.getContent();
+        List<Minter> minters = new ArrayList<>();
+        origins.forEach(user -> {
+            Minter minter = Minter.builder()
+                    .id(user.getId())
+                    .name(user.getNickname())
+                    .avatar(user.getAvatar())
+                    .build();
+            minters.add(minter);
+        });
+        return new PageImpl<>(minters, users.getPageable(), users.getTotalElements());
+    }
 }