|
|
@@ -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;
|
|
|
+ }
|
|
|
}
|