xiongzhu пре 4 година
родитељ
комит
fa94b4b6a2

+ 4 - 0
src/main/java/com/izouma/nineth/repo/OrderRepo.java

@@ -29,4 +29,8 @@ public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationE
     int countByCollectionIdAndStatusIn(Long collectionId, Iterable<OrderStatus> orderStatuses);
     int countByCollectionIdAndStatusIn(Long collectionId, Iterable<OrderStatus> orderStatuses);
 
 
     List<Order> findByStatus(OrderStatus orderStatus);
     List<Order> findByStatus(OrderStatus orderStatus);
+
+    @Query("select count(o) from Order o join Collection c on o.collectionId = c.id " +
+            "where c.minterId = ?1 and c.source = 'OFFICIAL' and o.status <> 'NOT_PAID' and o.status <> 'CANCELLED'")
+    long countSales(Long userId);
 }
 }

+ 7 - 0
src/main/java/com/izouma/nineth/repo/UserRepo.java

@@ -151,4 +151,11 @@ public interface UserRepo extends JpaRepository<User, Long>, JpaSpecificationExe
     @Modifying
     @Modifying
     @Transactional
     @Transactional
     void updateHistoryToUser(Long userId);
     void updateHistoryToUser(Long userId);
+
+    @Transactional
+    @Modifying
+    @Query("update User u set u.sales = ?2 where u.id = ?1")
+    void setSales(Long userId, int sales);
+
+    List<User> findByAuthoritiesContains(Authority authority);
 }
 }

+ 4 - 11
src/main/java/com/izouma/nineth/service/OrderService.java

@@ -27,6 +27,7 @@ import com.izouma.nineth.event.CreateAssetEvent;
 import com.izouma.nineth.event.TransferAssetEvent;
 import com.izouma.nineth.event.TransferAssetEvent;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.*;
 import com.izouma.nineth.repo.*;
+import com.izouma.nineth.security.Authority;
 import com.izouma.nineth.utils.JpaUtils;
 import com.izouma.nineth.utils.JpaUtils;
 import com.izouma.nineth.utils.SnowflakeIdWorker;
 import com.izouma.nineth.utils.SnowflakeIdWorker;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
@@ -49,7 +50,6 @@ import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.*;
-import java.util.stream.Collectors;
 
 
 @Service
 @Service
 @AllArgsConstructor
 @AllArgsConstructor
@@ -517,18 +517,11 @@ public class OrderService {
     public void setNumberRecursive(Asset asset) {
     public void setNumberRecursive(Asset asset) {
     }
     }
 
 
-
+    @Scheduled(fixedRate = 120000)
     public void setSales() {
     public void setSales() {
-        List<Collection> collections = collectionRepo.findAll();
-        List<User> minters = userRepo.findAllById(collections.stream().map(Collection::getMinterId)
-                .collect(Collectors.toSet()));
+        List<User> minters = userRepo.findByAuthoritiesContains(Authority.get(AuthorityName.ROLE_MINTER));
         for (User minter : minters) {
         for (User minter : minters) {
-            List<Collection> list = collections.stream().filter(c -> minter.getId().equals(c.getMinterId()))
-                    .collect(Collectors.toList());
-            minter.setSales((int) orderRepo.findByCollectionIdIn(list.stream().map(Collection::getId)
-                            .collect(Collectors.toSet())).stream()
-                    .filter(o -> o.getStatus() != OrderStatus.CANCELLED).count());
-            userRepo.save(minter);
+            userRepo.setSales(minter.getId(), (int) orderRepo.countSales(minter.getId()));
         }
         }
     }
     }
 
 

+ 21 - 0
src/main/java/com/izouma/nineth/utils/SnowflakeIdGenerator.java

@@ -0,0 +1,21 @@
+package com.izouma.nineth.utils;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SharedSessionContractImplementor;
+import org.hibernate.id.IdentifierGenerator;
+
+import java.io.Serializable;
+
+public class SnowflakeIdGenerator implements IdentifierGenerator {
+
+    private final SnowflakeIdWorker snowflakeIdWorker;
+
+    public SnowflakeIdGenerator() {
+        this.snowflakeIdWorker = new SnowflakeIdWorker(0, 0);
+    }
+
+    @Override
+    public Serializable generate(SharedSessionContractImplementor sharedSessionContractImplementor, Object o) throws HibernateException {
+        return snowflakeIdWorker.nextId();
+    }
+}