diff --git a/src/main/java/ru/soune/nocopy/handler/ViolationHandler.java b/src/main/java/ru/soune/nocopy/handler/ViolationHandler.java index 02fd0a6..9bff5a2 100644 --- a/src/main/java/ru/soune/nocopy/handler/ViolationHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/ViolationHandler.java @@ -72,7 +72,8 @@ public class ViolationHandler implements RequestHandler { violationRequest.getGroupBy(), violationRequest.getStatus(), startDate, - endDate); + endDate, + violationRequest.getSortDirection()); return BaseResponse.builder() .msgId(request.getMsgId()) diff --git a/src/main/java/ru/soune/nocopy/repository/ViolationRepository.java b/src/main/java/ru/soune/nocopy/repository/ViolationRepository.java index 25d7baa..0834914 100644 --- a/src/main/java/ru/soune/nocopy/repository/ViolationRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/ViolationRepository.java @@ -2,6 +2,7 @@ package ru.soune.nocopy.repository; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -62,4 +63,15 @@ public interface ViolationRepository extends JpaRepository { @Query("SELECT COUNT(v) FROM Violation v WHERE v.globalSearchResult.taskId = :taskId") long countByGlobalSearchResultTaskId(@Param("taskId") String taskId); + + List findByFileEntityIn(List files, Sort sort); + + List findByFileEntityInAndStatus(List files, String status, Sort sort); + + List findByFileEntityInAndCreatedDateBetween(List files, LocalDateTime startDate, + LocalDateTime endDate, Sort sort); + + List findByFileEntityInAndStatusAndCreatedDateBetween(List files, String status, + LocalDateTime startDate, LocalDateTime endDate, + Sort sort); } \ No newline at end of file diff --git a/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java b/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java index da47a62..c90b5c1 100644 --- a/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java +++ b/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java @@ -182,8 +182,30 @@ public class ViolationService { return violations.stream() .collect(Collectors.groupingBy( v -> extractGroupKey(v.getPageUrl(), groupBy), - Collectors.counting() - )); + Collectors.counting())); + } + + public Map getGroupedViolations(List files, String groupBy, String status, + LocalDateTime startDate, LocalDateTime endDate, + String sortDirection) { + List violations; + + Sort sort = Sort.by(sortDirection.equalsIgnoreCase("desc") ? Sort.Direction.DESC : Sort.Direction.ASC, "createdDate"); + + if (status != null && !status.isEmpty() && startDate != null && endDate != null) { + violations = violationRepository.findByFileEntityInAndStatusAndCreatedDateBetween(files, status, startDate, endDate, sort); + } else if (status != null && !status.isEmpty()) { + violations = violationRepository.findByFileEntityInAndStatus(files, status, sort); + } else if (startDate != null && endDate != null) { + violations = violationRepository.findByFileEntityInAndCreatedDateBetween(files, startDate, endDate, sort); + } else { + violations = violationRepository.findByFileEntityIn(files, sort); + } + + return violations.stream() + .collect(Collectors.groupingBy( + v -> extractGroupKey(v.getPageUrl(), groupBy), + Collectors.counting())); } public ViolationStatisticsResponse getViolationStatistics(Long userId, String fileId,