This commit is contained in:
@@ -31,6 +31,7 @@ public class AdminStatisticsController {
|
|||||||
@GetMapping("/project")
|
@GetMapping("/project")
|
||||||
public ResponseEntity<AdminProjectStatisticsDto> getProjectStatistics() {
|
public ResponseEntity<AdminProjectStatisticsDto> getProjectStatistics() {
|
||||||
long registered = userARepository.count();
|
long registered = userARepository.count();
|
||||||
|
long subscribed = userARepository.countByBotActiveIsTrue();
|
||||||
long blocked = userARepository.countByBotActiveIsFalse();
|
long blocked = userARepository.countByBotActiveIsFalse();
|
||||||
BigDecimal totalDeposits = paymentRepository.sumUsdAmountByStatus(Payment.PaymentStatus.COMPLETED)
|
BigDecimal totalDeposits = paymentRepository.sumUsdAmountByStatus(Payment.PaymentStatus.COMPLETED)
|
||||||
.orElse(BigDecimal.ZERO);
|
.orElse(BigDecimal.ZERO);
|
||||||
@@ -47,7 +48,7 @@ public class AdminStatisticsController {
|
|||||||
|
|
||||||
AdminProjectStatisticsDto dto = AdminProjectStatisticsDto.builder()
|
AdminProjectStatisticsDto dto = AdminProjectStatisticsDto.builder()
|
||||||
.registeredUsers(registered)
|
.registeredUsers(registered)
|
||||||
.subscribedToBot(registered)
|
.subscribedToBot(subscribed)
|
||||||
.blockedBot(blocked)
|
.blockedBot(blocked)
|
||||||
.totalDepositsUsd(totalDeposits)
|
.totalDepositsUsd(totalDeposits)
|
||||||
.totalWithdrawalsUsd(totalWithdrawals)
|
.totalWithdrawalsUsd(totalWithdrawals)
|
||||||
|
|||||||
@@ -66,7 +66,9 @@ public class AdminUserController {
|
|||||||
@RequestParam(required = false) Integer referralCountMax,
|
@RequestParam(required = false) Integer referralCountMax,
|
||||||
@RequestParam(required = false) Integer referrerId,
|
@RequestParam(required = false) Integer referrerId,
|
||||||
@RequestParam(required = false) Integer referralLevel,
|
@RequestParam(required = false) Integer referralLevel,
|
||||||
@RequestParam(required = false) String ip) {
|
@RequestParam(required = false) String ip,
|
||||||
|
@RequestParam(required = false) Boolean botActive,
|
||||||
|
@RequestParam(required = false) Integer depositCountMin) {
|
||||||
|
|
||||||
// Build sort. Fields on UserB/UserD (balanceA, depositTotal, withdrawTotal, referralCount) are handled in service via custom query.
|
// Build sort. Fields on UserB/UserD (balanceA, depositTotal, withdrawTotal, referralCount) are handled in service via custom query.
|
||||||
Set<String> sortRequiresJoin = Set.of("balanceA", "depositTotal", "withdrawTotal", "referralCount", "profit");
|
Set<String> sortRequiresJoin = Set.of("balanceA", "depositTotal", "withdrawTotal", "referralCount", "profit");
|
||||||
@@ -107,6 +109,8 @@ public class AdminUserController {
|
|||||||
referrerId,
|
referrerId,
|
||||||
referralLevel,
|
referralLevel,
|
||||||
ip,
|
ip,
|
||||||
|
botActive,
|
||||||
|
depositCountMin,
|
||||||
effectiveSortBy,
|
effectiveSortBy,
|
||||||
sortDir,
|
sortDir,
|
||||||
excludeMasters
|
excludeMasters
|
||||||
|
|||||||
@@ -52,6 +52,8 @@ public interface UserARepository extends JpaRepository<UserA, Integer>, JpaSpeci
|
|||||||
|
|
||||||
long countByBotActiveIsFalse();
|
long countByBotActiveIsFalse();
|
||||||
|
|
||||||
|
long countByBotActiveIsTrue();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Paged users in id range for broadcast when skipping inactive-bot users.
|
* Paged users in id range for broadcast when skipping inactive-bot users.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ public class AdminUserService {
|
|||||||
Integer referrerId,
|
Integer referrerId,
|
||||||
Integer referralLevel,
|
Integer referralLevel,
|
||||||
String ipFilter,
|
String ipFilter,
|
||||||
|
Boolean botActive,
|
||||||
|
Integer depositCountMin,
|
||||||
String sortBy,
|
String sortBy,
|
||||||
String sortDir,
|
String sortDir,
|
||||||
boolean excludeMasters) {
|
boolean excludeMasters) {
|
||||||
@@ -181,6 +183,18 @@ public class AdminUserService {
|
|||||||
predicates.add(cb.in(root.get("id")).value(subRef));
|
predicates.add(cb.in(root.get("id")).value(subRef));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (botActive != null) {
|
||||||
|
predicates.add(cb.equal(root.get("botActive"), botActive));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (depositCountMin != null && depositCountMin > 0) {
|
||||||
|
Subquery<Integer> subDep = query.subquery(Integer.class);
|
||||||
|
Root<UserB> depRoot = subDep.from(UserB.class);
|
||||||
|
subDep.select(depRoot.get("id"));
|
||||||
|
subDep.where(cb.greaterThanOrEqualTo(depRoot.get("depositCount"), depositCountMin));
|
||||||
|
predicates.add(cb.in(root.get("id")).value(subDep));
|
||||||
|
}
|
||||||
|
|
||||||
return cb.and(predicates.toArray(new Predicate[0]));
|
return cb.and(predicates.toArray(new Predicate[0]));
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -195,6 +209,7 @@ public class AdminUserService {
|
|||||||
dateRegFrom, dateRegTo, balanceAMin, balanceAMax, balanceBMin, balanceBMax,
|
dateRegFrom, dateRegTo, balanceAMin, balanceAMax, balanceBMin, balanceBMax,
|
||||||
referralCountMin, referralCountMax,
|
referralCountMin, referralCountMax,
|
||||||
referrerId, referralLevel, ipFilter,
|
referrerId, referralLevel, ipFilter,
|
||||||
|
botActive, depositCountMin,
|
||||||
sortBy, sortDir != null ? sortDir : "desc",
|
sortBy, sortDir != null ? sortDir : "desc",
|
||||||
pageable.getPageSize(), (int) pageable.getOffset(),
|
pageable.getPageSize(), (int) pageable.getOffset(),
|
||||||
masterIds);
|
masterIds);
|
||||||
@@ -308,6 +323,8 @@ public class AdminUserService {
|
|||||||
Integer referrerId,
|
Integer referrerId,
|
||||||
Integer referralLevel,
|
Integer referralLevel,
|
||||||
String ipFilter,
|
String ipFilter,
|
||||||
|
Boolean botActive,
|
||||||
|
Integer depositCountMin,
|
||||||
String sortBy,
|
String sortBy,
|
||||||
String sortDir,
|
String sortDir,
|
||||||
int limit,
|
int limit,
|
||||||
@@ -424,6 +441,16 @@ public class AdminUserService {
|
|||||||
paramIndex++;
|
paramIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (botActive != null) {
|
||||||
|
sql.append(" AND a.bot_active = ?");
|
||||||
|
params.add(Boolean.TRUE.equals(botActive) ? 1 : 0);
|
||||||
|
paramIndex++;
|
||||||
|
}
|
||||||
|
if (depositCountMin != null && depositCountMin > 0) {
|
||||||
|
sql.append(" AND b.deposit_count >= ?");
|
||||||
|
params.add(depositCountMin);
|
||||||
|
paramIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
String orderColumn = switch (sortBy != null ? sortBy : "") {
|
String orderColumn = switch (sortBy != null ? sortBy : "") {
|
||||||
case "balanceA" -> "b.balance_a";
|
case "balanceA" -> "b.balance_a";
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- Admin users list filter: deposit_count >= N (e.g. users with at least one deposit)
|
||||||
|
CREATE INDEX idx_users_b_deposit_count ON db_users_b(deposit_count);
|
||||||
Reference in New Issue
Block a user