Browse Source

按id统计

licailing 4 years ago
parent
commit
b9db050bc3
1 changed files with 37 additions and 0 deletions
  1. 37 0
      src/main/java/com/izouma/nineth/service/AssetService.java

+ 37 - 0
src/main/java/com/izouma/nineth/service/AssetService.java

@@ -413,4 +413,41 @@ public class AssetService {
         });
         return result;
     }
+
+    public Map<User, Integer> holdQuery1(List<Long> names, LocalDateTime startTime, LocalDateTime endTime) {
+        Map<User, Integer> result = new HashMap<>();
+        userRepo.findAll().stream().parallel().forEach(user -> {
+            List<Asset> assets = assetRepo.findByUserId(user.getId());
+            assets = assets.stream().filter(a -> names.stream().anyMatch(n -> n.equals(a.getCollectionId())))
+                    .collect(Collectors.toList());
+            if (assets.size() < names.size()) {
+                return;
+            }
+            assets = assets.stream().filter(a -> a.getCreatedAt().isBefore(startTime))
+                    .collect(Collectors.toList());
+            if (assets.size() < names.size()) {
+                return;
+            }
+            assets = assets.stream().filter(a -> {
+                        if (a.getStatus() != AssetStatus.GIFTED && a.getStatus() != AssetStatus.TRANSFERRED) {
+                            return true;
+                        } else {
+                            Asset a1 = assetRepo.findFirstByTokenIdAndCreatedAtAfterOrderByCreatedAt(a.getTokenId(), a.getCreatedAt());
+                            return a1 != null && a.getCreatedAt().isAfter(endTime);
+                        }
+                    })
+                    .collect(Collectors.toList());
+            boolean flag = true;
+            Map<Long, Integer> map = new HashMap<>();
+            for (Long name : names) {
+                int c = (int) assets.stream().filter(a -> name.equals(a.getCollectionId())).count();
+                map.put(name, c);
+                flag = flag && (c > 0);
+            }
+            if (flag) {
+                result.put(user, map.values().stream().mapToInt(i -> i).min().orElse(0));
+            }
+        });
+        return result;
+    }
 }