From dc27e2ccf278dac96dae976c56f4a77ff584bc39 Mon Sep 17 00:00:00 2001 From: backdev-1 Date: Mon, 27 Apr 2026 12:21:26 +0700 Subject: [PATCH] dev add check for change status --- src/main/java/ru/soune/nocopy/dto/MessageCode.java | 4 +++- .../ru/soune/nocopy/handler/ViolationHandler.java | 12 ++++++++++++ .../repository/ComplaintEntityRepository.java | 2 ++ .../soune/nocopy/repository/LawCaseRepository.java | 3 +++ .../service/complaint/ComplaintEntityService.java | 10 ++++++++++ .../nocopy/service/complaint/LawCaseService.java | 9 ++++++++- .../nocopy/service/violation/ViolationService.java | 13 +++++++++++++ 7 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/soune/nocopy/dto/MessageCode.java b/src/main/java/ru/soune/nocopy/dto/MessageCode.java index dae6f55..9afd3b4 100644 --- a/src/main/java/ru/soune/nocopy/dto/MessageCode.java +++ b/src/main/java/ru/soune/nocopy/dto/MessageCode.java @@ -32,7 +32,7 @@ public enum MessageCode { FILE_ENTITY_ERROR(2, "File entity error"), NOT_VALID_FIELD(2, "Not valid field"), ACCESS_DENIED(2, "Access denied"), - AUTH_EMAIL_NOT_FOUND(4, "Email not found"), + AUTH_EMAIL_NOT_FOUND(4, "Email not COMPLAINT_OR_LAW_CASE_IN_WORK"), AUTH_EMAIL_OR_TOKEN_NOT_FOUND(4, "Email or Token not found "), AUTH_TOKEN_MISMATCH(4, "Token mismatch"), AUTH_TOKEN_NOT_FOUND(4, "Token not found"), @@ -65,8 +65,10 @@ public enum MessageCode { NOT_FOUND(4, "Notion not found"), MESSAGE_IS_REQUIRED_FOR_NOTION(4, "Message is required for notion"), USER_VERIFICATIONS_NOT_FOUND(4, "Verifications not found"), + COMPLAINT_OR_LAW_CASE_IN_WORK(2, "Complaint or lawcase in work"), ADMIN_USER_NOT_FOUND(4, "Verifications ,user or admin not found"); + private final Integer code; private final String description; diff --git a/src/main/java/ru/soune/nocopy/handler/ViolationHandler.java b/src/main/java/ru/soune/nocopy/handler/ViolationHandler.java index 8a97838..0ac5c9a 100644 --- a/src/main/java/ru/soune/nocopy/handler/ViolationHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/ViolationHandler.java @@ -7,6 +7,7 @@ import org.springframework.data.domain.Page; import org.springframework.stereotype.Component; import ru.soune.nocopy.dto.BaseRequest; import ru.soune.nocopy.dto.BaseResponse; +import ru.soune.nocopy.dto.MessageCode; import ru.soune.nocopy.dto.violation.ViolationRequest; import ru.soune.nocopy.dto.violation.ViolationResponse; import ru.soune.nocopy.entity.file.FileEntity; @@ -76,6 +77,17 @@ public class ViolationHandler implements RequestHandler { String status = violationRequest.getStatus(); Long violationId = violationRequest.getViolationId(); + if (status.equals(ViolationStatus.NOT_OWNER_FILE.name()) && + !violationService.validateChangeStatus(violationId)) { + + return BaseResponse.builder() + .messageCode(MessageCode.COMPLAINT_OR_LAW_CASE_IN_WORK.getCode()) + .messageCode(MessageCode.COMPLAINT_OR_LAW_CASE_IN_WORK.getCode()) + .msgId(request.getMsgId()) + .messageBody(Map.of("status", status)) + .build(); + } + violationService.changeStatus(ViolationStatus.valueOf(status), violationId); return BaseResponse.builder() diff --git a/src/main/java/ru/soune/nocopy/repository/ComplaintEntityRepository.java b/src/main/java/ru/soune/nocopy/repository/ComplaintEntityRepository.java index ffde784..b1db235 100644 --- a/src/main/java/ru/soune/nocopy/repository/ComplaintEntityRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/ComplaintEntityRepository.java @@ -20,6 +20,8 @@ public interface ComplaintEntityRepository extends JpaRepository findAll(Pageable pageable); Page findByStatus(ComplaintStatus status, Pageable pageable); List findByViolationId(Long violationId); + @Query("SELECT c FROM ComplaintEntity c WHERE c.violation.id = :violationId AND c.status IN :statuses") + List findByViolationIdAndStatuses(@Param("violationId") Long violationId, @Param("statuses") List statuses); boolean existsByViolationId(Long violationId); @Modifying diff --git a/src/main/java/ru/soune/nocopy/repository/LawCaseRepository.java b/src/main/java/ru/soune/nocopy/repository/LawCaseRepository.java index 822dc32..c152650 100644 --- a/src/main/java/ru/soune/nocopy/repository/LawCaseRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/LawCaseRepository.java @@ -11,6 +11,7 @@ import ru.soune.nocopy.entity.complaint.LawCasePriority; import ru.soune.nocopy.entity.complaint.LawCaseType; import java.util.List; +import java.util.Optional; @Repository public interface LawCaseRepository extends JpaRepository { @@ -42,4 +43,6 @@ public interface LawCaseRepository extends JpaRepository { @Query("SELECT COUNT(lc.id) FROM LawCase lc") Long getTotalLawCasesCount(); + + Optional getLawCaseByViolationIdAndType(Long violationId, String lawCaseType); } diff --git a/src/main/java/ru/soune/nocopy/service/complaint/ComplaintEntityService.java b/src/main/java/ru/soune/nocopy/service/complaint/ComplaintEntityService.java index 382f2e7..8f0bed3 100644 --- a/src/main/java/ru/soune/nocopy/service/complaint/ComplaintEntityService.java +++ b/src/main/java/ru/soune/nocopy/service/complaint/ComplaintEntityService.java @@ -85,12 +85,22 @@ public class ComplaintEntityService { if (!violationRepository.existsById(violationId)) { throw new ViolationNotFoundException("Violation not found: " + violationId); } + return complaintRepository.findByViolationId(violationId) .stream() .map(this::mapToResponse) .collect(Collectors.toList()); } + public List fetchComplaintByViolation(Long violationId) { + if (!violationRepository.existsById(violationId)) { + return null; + } + + return complaintRepository.findByViolationIdAndStatuses(violationId, List.of(ComplaintStatus.CREATED.name(), + ComplaintStatus.SHOWED.name(), ComplaintStatus.IN_WORK.name())); + } + public ComplaintResponse updateComplaintStatus(Long id, ComplaintStatus status) { ComplaintEntity complaint = complaintRepository.findById(id) .orElseThrow(() -> new ComplaintNotFoundException("Complaint not found: " + id)); diff --git a/src/main/java/ru/soune/nocopy/service/complaint/LawCaseService.java b/src/main/java/ru/soune/nocopy/service/complaint/LawCaseService.java index 740ed9a..28ebfe6 100644 --- a/src/main/java/ru/soune/nocopy/service/complaint/LawCaseService.java +++ b/src/main/java/ru/soune/nocopy/service/complaint/LawCaseService.java @@ -13,7 +13,7 @@ import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.repository.LawCaseRepository; import java.math.BigDecimal; -import java.util.List; +import java.util.Optional; @Service @RequiredArgsConstructor @@ -70,6 +70,13 @@ public class LawCaseService { return lawCaseRepository.save(lawCase); } + public LawCase fetchByViolationId(Long violationId) { + Optional lawCaseByViolationIdAndType = + lawCaseRepository.getLawCaseByViolationIdAndType(violationId, LawCaseType.ACTIVE.getName()); + + return lawCaseByViolationIdAndType.orElse(null); + } + public Page getAllUserLawCases(Long userId, int pageSize, int pageNumber, LawCaseType lawCaseType, String lawyer, LawCasePriority lawCasePriority, 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 f8df5f8..9a6cd25 100644 --- a/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java +++ b/src/main/java/ru/soune/nocopy/service/violation/ViolationService.java @@ -11,11 +11,14 @@ import org.springframework.transaction.annotation.Transactional; import ru.soune.nocopy.dto.file.YandexSearchResponse; import ru.soune.nocopy.dto.violation.FileViolationSummaryDTO; import ru.soune.nocopy.dto.violation.ViolationStatisticsResponse; +import ru.soune.nocopy.entity.complaint.ComplaintEntity; import ru.soune.nocopy.entity.file.FileEntity; import ru.soune.nocopy.entity.search.GlobalSearchResult; import ru.soune.nocopy.entity.violation.Violation; import ru.soune.nocopy.repository.FileEntityRepository; import ru.soune.nocopy.repository.ViolationRepository; +import ru.soune.nocopy.service.complaint.ComplaintEntityService; +import ru.soune.nocopy.service.complaint.LawCaseService; import ru.soune.nocopy.service.file.FileEntityService; import java.time.LocalDateTime; @@ -32,6 +35,10 @@ public class ViolationService { private final FileEntityService fileEntityService; + private final ComplaintEntityService complaintEntityService; + + private final LawCaseService lawCaseService; + public void processViolation(YandexSearchResponse.ImageResult imageResult, FileEntity file, GlobalSearchResult result) { String url = imageResult.getUrl(); @@ -170,6 +177,12 @@ public class ViolationService { LinkedHashMap::new)); } + public boolean validateChangeStatus(Long violationId) { + List complaintEntities = complaintEntityService.fetchComplaintByViolation(violationId); + + return complaintEntities == null && lawCaseService.fetchByViolationId(violationId) == null; + } + public ViolationStatisticsResponse getViolationStatistics(Long userId, String fileId, LocalDateTime startDate, LocalDateTime endDate) {