From 007a06258b8c5263e1463a0f36260799d79f8339 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Thu, 4 Sep 2025 10:55:46 +0300 Subject: [PATCH] SUPPORT-93339: Fix --- .../EmployeeInfoFileUploadService.java | 50 +++++++++---------- .../common_errors_messages_ru_RU.properties | 10 +++- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/backend/src/main/java/ervu/service/fileupload/EmployeeInfoFileUploadService.java b/backend/src/main/java/ervu/service/fileupload/EmployeeInfoFileUploadService.java index 2642f22b..509c3376 100644 --- a/backend/src/main/java/ervu/service/fileupload/EmployeeInfoFileUploadService.java +++ b/backend/src/main/java/ervu/service/fileupload/EmployeeInfoFileUploadService.java @@ -1,24 +1,26 @@ package ervu.service.fileupload; import java.io.IOException; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; import java.sql.Timestamp; -import java.time.Duration; import java.time.LocalDateTime; -import java.util.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.UUID; import javax.xml.parsers.DocumentBuilderFactory; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.google.gson.Gson; import ervu.client.fileupload.WebDavClient; -import ervu.model.fileupload.*; +import ervu.model.fileupload.DownloadResponse; +import ervu.model.fileupload.EmployeeInfoFileFormType; +import ervu.model.fileupload.EmployeeInfoKafkaMessage; +import ervu.model.fileupload.FileInfo; +import ervu.model.fileupload.FileStatus; +import ervu.model.fileupload.UploadOrgInfo; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; @@ -40,8 +42,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.support.MessageSourceAccessor; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.support.Acknowledgment; -import org.springframework.messaging.handler.annotation.Header; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import org.w3c.dom.Document; @@ -50,7 +50,6 @@ import ru.micord.ervu.audit.service.AuditService; import ru.micord.ervu.exception.JsonParsingException; import ru.micord.ervu.kafka.service.ReplyingKafkaService; import ru.micord.ervu.security.esia.config.EsiaConfig; -import ru.micord.ervu.security.esia.exception.EsiaException; import ru.micord.ervu.security.esia.model.EmployeeModel; import ru.micord.ervu.security.esia.model.MchdInfoModel; import ru.micord.ervu.security.esia.model.PersonModel; @@ -66,7 +65,6 @@ import ru.cg.webbpm.modules.core.runtime.api.LocalizedException; import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils; import static ervu.enums.FileStatusCode.FILE_ACCEPTED; -import static ervu.enums.FileStatusCode.FILE_CLEAN; import static ervu.enums.FileStatusCode.FILE_INFECTED; import static ervu.enums.FileStatusCode.FILE_NOT_CHECKED; import static ervu.enums.FileStatusCode.FILE_UPLOADED; @@ -214,6 +212,8 @@ public class EmployeeInfoFileUploadService { catch (JsonProcessingException e) { fileStatus.setCode(FILE_NOT_CHECKED.getCode()); fileStatus.setStatus("Невозможно проверить файл ЛК РП"); + fileStatus.setDescription( + "Невозможно проверить файл по причине недоступности или ошибки в работе антивируса"); interactionService.updateStatus(fileInfo.getFileId(), fileInfo.getFileStatus().getStatus(), uploadOrgInfo.getOrgId() ); @@ -228,6 +228,7 @@ public class EmployeeInfoFileUploadService { catch (Exception e) { fileStatus.setCode(FILE_NOT_CHECKED.getCode()); fileStatus.setStatus("Некорректная ЭП"); + fileStatus.setDescription("Не пройдена проверка ЭП"); Arrays.stream(downloadResponse.filesInfo()) .forEach(fileInfo1 -> fileInfo1.setFileStatus(fileStatus)); @@ -241,8 +242,7 @@ public class EmployeeInfoFileUploadService { } return validateSignerAndMchd(verifyDocumentSignResponse, chiefModel, uploadOrgInfo, - mchdFile, accessToken, fileStatus, fileInfo, signFileInfo, mchdFileInfo, - now, fio, ervuId, employeeInfoFileFormType, response + mchdFile, accessToken, fileStatus, fileInfo, signFileInfo, mchdFileInfo, ervuId, response ); } @@ -314,8 +314,7 @@ public class EmployeeInfoFileUploadService { private boolean validateSignerAndMchd(VerifyDocumentSignResponse verifyDocumentSignResponse, EmployeeModel chiefModel, UploadOrgInfo uploadOrgInfo, MultipartFile mchdFile, String accessToken, FileStatus fileStatus, FileInfo fileInfo, FileInfo signFileInfo, - FileInfo mchdFileInfo, LocalDateTime now, String fio, String ervuId, - EmployeeInfoFileFormType formType, String response) { + FileInfo mchdFileInfo, String ervuId, String response) { String signerInfo = verifyDocumentSignResponse.getSignerInfo(); Map signerInfoMap = parseKeyValuePairs(signerInfo); @@ -330,13 +329,13 @@ public class EmployeeInfoFileUploadService { signerInfoMap.get("O").equalsIgnoreCase(uploadOrgInfo.getOrgName()); if (isSignerValid) { + interactionService.updateStatus(fileInfo.getFileId(), "Направлено в ЕРВУ", ervuId); sendMessage(response); return true; } if (mchdFile == null) { - handleMchdValidationError(fileStatus, uploadOrgInfo, fileInfo, signFileInfo, null, - now, fio, ervuId, formType, response + handleMchdValidationError(fileStatus, uploadOrgInfo, fileInfo, signFileInfo, null, ervuId, response ); throw new LocalizedException("mchd_null", MESSAGE_SOURCE); } @@ -345,28 +344,25 @@ public class EmployeeInfoFileUploadService { validateMchd(mchdFile, accessToken, signerInfoMap.get("SN") + " " + signerInfoMap.get("G"), chiefFirstName, chiefLastName, chiefMiddleName ); + interactionService.updateStatus(fileInfo.getFileId(), "Направлено в ЕРВУ", ervuId); sendMessage(response); return true; } catch (Exception e) { - handleMchdValidationError(fileStatus, uploadOrgInfo, fileInfo, signFileInfo, mchdFileInfo, - now, fio, ervuId, formType, response + handleMchdValidationError(fileStatus, uploadOrgInfo, fileInfo, signFileInfo, mchdFileInfo, ervuId, response ); throw e; } } private void handleMchdValidationError(FileStatus fileStatus, UploadOrgInfo uploadOrgInfo, - FileInfo fileInfo, FileInfo signFileInfo, FileInfo mchdFileInfo, LocalDateTime now, - String fio, String ervuId, EmployeeInfoFileFormType formType, String response) { + FileInfo fileInfo, FileInfo signFileInfo, FileInfo mchdFileInfo, String ervuId, String response) { fileStatus.setCode(FILE_NOT_CHECKED.getCode()); fileStatus.setStatus("Некорректная МЧД"); + fileStatus.setDescription("Проверка МЧД не пройдена"); - interactionService.setStatus(fileInfo.getFileId(), fileStatus.getStatus(), - fileInfo.getFileName(), formType.getFilePatternCode(), Timestamp.valueOf(now), - fio, ervuId - ); + interactionService.updateStatus(fileInfo.getFileId(), fileStatus.getStatus(), ervuId); FileInfo[] fileInfos = mchdFileInfo != null ? new FileInfo[] {fileInfo, signFileInfo, mchdFileInfo} : diff --git a/backend/src/main/resources/messages/common_errors_messages_ru_RU.properties b/backend/src/main/resources/messages/common_errors_messages_ru_RU.properties index c6fba19d..17307978 100644 --- a/backend/src/main/resources/messages/common_errors_messages_ru_RU.properties +++ b/backend/src/main/resources/messages/common_errors_messages_ru_RU.properties @@ -1,4 +1,12 @@ kafka_reply_timeout=Превышено время ожидания ответа от сервера. access_denied=Доступ запрещен. Пользователь должен быть включен в группу "Сотрудник, ответственный за военно-учетную работу" в ЕСИА login_attempts_exceeded=Слишком большое количество попыток авторизоваться в ЕСИА за короткий промежуток времени. Рекомендуем почистить cookie и cash браузера, после повторить авторизацию. -crl_certificate_expired=Превышено время ожидания ответа из ЕСИА \ No newline at end of file +crl_certificate_expired=Превышено время ожидания ответа из ЕСИА +file_sign_validate=Ошибка проверки файлов. Некорректная электронная подпись +mchd_validate_agent=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Представитель не совпадает с подписантом +mchd_null=Ошибка проверки файлов. Отсутствует машиночитаемая доверенность. Подписант не является руководителем организации +mchd_expired=Ошибка проверки файлов. Недействующая машиночитаемая доверенность. +mchd_tree_expired=Ошибка проверки файлов. Одна из родительский доверенностей недействующая. +mchd_validate_principal=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Доверитель не совпадает с руководителем организации +av_file_infected=Ошибка проверки файлов. Файлы заражены вирусом +mchd_cant_parse=Ошибка проверки файлов. Некорректный формат машиночитаемой доверенности \ No newline at end of file