SUPPORT-93339: Fix

This commit is contained in:
Eduard Tihomirov 2025-09-04 10:55:46 +03:00
parent 22ffb8a866
commit 007a06258b
2 changed files with 32 additions and 28 deletions

View file

@ -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<String, String> 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} :

View file

@ -1,4 +1,12 @@
kafka_reply_timeout=Превышено время ожидания ответа от сервера.
access_denied=Доступ запрещен. Пользователь должен быть включен в группу "Сотрудник, ответственный за военно-учетную работу" в ЕСИА
login_attempts_exceeded=Слишком большое количество попыток авторизоваться в ЕСИА за короткий промежуток времени. Рекомендуем почистить cookie и cash браузера, после повторить авторизацию.
crl_certificate_expired=Превышено время ожидания ответа из ЕСИА
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=Ошибка проверки файлов. Некорректный формат машиночитаемой доверенности