SUPPORT-93339: Fix
This commit is contained in:
parent
22ffb8a866
commit
007a06258b
2 changed files with 32 additions and 28 deletions
|
|
@ -1,24 +1,26 @@
|
||||||
package ervu.service.fileupload;
|
package ervu.service.fileupload;
|
||||||
|
|
||||||
import java.io.IOException;
|
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.nio.charset.StandardCharsets;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.time.Duration;
|
|
||||||
import java.time.LocalDateTime;
|
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 javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
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.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.HttpEntity;
|
||||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||||
import org.apache.http.client.methods.HttpPost;
|
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.context.support.MessageSourceAccessor;
|
||||||
import org.springframework.kafka.annotation.KafkaListener;
|
import org.springframework.kafka.annotation.KafkaListener;
|
||||||
import org.springframework.kafka.core.KafkaTemplate;
|
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.stereotype.Service;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import org.w3c.dom.Document;
|
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.exception.JsonParsingException;
|
||||||
import ru.micord.ervu.kafka.service.ReplyingKafkaService;
|
import ru.micord.ervu.kafka.service.ReplyingKafkaService;
|
||||||
import ru.micord.ervu.security.esia.config.EsiaConfig;
|
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.EmployeeModel;
|
||||||
import ru.micord.ervu.security.esia.model.MchdInfoModel;
|
import ru.micord.ervu.security.esia.model.MchdInfoModel;
|
||||||
import ru.micord.ervu.security.esia.model.PersonModel;
|
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 ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils;
|
||||||
|
|
||||||
import static ervu.enums.FileStatusCode.FILE_ACCEPTED;
|
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_INFECTED;
|
||||||
import static ervu.enums.FileStatusCode.FILE_NOT_CHECKED;
|
import static ervu.enums.FileStatusCode.FILE_NOT_CHECKED;
|
||||||
import static ervu.enums.FileStatusCode.FILE_UPLOADED;
|
import static ervu.enums.FileStatusCode.FILE_UPLOADED;
|
||||||
|
|
@ -214,6 +212,8 @@ public class EmployeeInfoFileUploadService {
|
||||||
catch (JsonProcessingException e) {
|
catch (JsonProcessingException e) {
|
||||||
fileStatus.setCode(FILE_NOT_CHECKED.getCode());
|
fileStatus.setCode(FILE_NOT_CHECKED.getCode());
|
||||||
fileStatus.setStatus("Невозможно проверить файл ЛК РП");
|
fileStatus.setStatus("Невозможно проверить файл ЛК РП");
|
||||||
|
fileStatus.setDescription(
|
||||||
|
"Невозможно проверить файл по причине недоступности или ошибки в работе антивируса");
|
||||||
interactionService.updateStatus(fileInfo.getFileId(), fileInfo.getFileStatus().getStatus(),
|
interactionService.updateStatus(fileInfo.getFileId(), fileInfo.getFileStatus().getStatus(),
|
||||||
uploadOrgInfo.getOrgId()
|
uploadOrgInfo.getOrgId()
|
||||||
);
|
);
|
||||||
|
|
@ -228,6 +228,7 @@ public class EmployeeInfoFileUploadService {
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
fileStatus.setCode(FILE_NOT_CHECKED.getCode());
|
fileStatus.setCode(FILE_NOT_CHECKED.getCode());
|
||||||
fileStatus.setStatus("Некорректная ЭП");
|
fileStatus.setStatus("Некорректная ЭП");
|
||||||
|
fileStatus.setDescription("Не пройдена проверка ЭП");
|
||||||
Arrays.stream(downloadResponse.filesInfo())
|
Arrays.stream(downloadResponse.filesInfo())
|
||||||
.forEach(fileInfo1 -> fileInfo1.setFileStatus(fileStatus));
|
.forEach(fileInfo1 -> fileInfo1.setFileStatus(fileStatus));
|
||||||
|
|
||||||
|
|
@ -241,8 +242,7 @@ public class EmployeeInfoFileUploadService {
|
||||||
}
|
}
|
||||||
|
|
||||||
return validateSignerAndMchd(verifyDocumentSignResponse, chiefModel, uploadOrgInfo,
|
return validateSignerAndMchd(verifyDocumentSignResponse, chiefModel, uploadOrgInfo,
|
||||||
mchdFile, accessToken, fileStatus, fileInfo, signFileInfo, mchdFileInfo,
|
mchdFile, accessToken, fileStatus, fileInfo, signFileInfo, mchdFileInfo, ervuId, response
|
||||||
now, fio, ervuId, employeeInfoFileFormType, response
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -314,8 +314,7 @@ public class EmployeeInfoFileUploadService {
|
||||||
private boolean validateSignerAndMchd(VerifyDocumentSignResponse verifyDocumentSignResponse,
|
private boolean validateSignerAndMchd(VerifyDocumentSignResponse verifyDocumentSignResponse,
|
||||||
EmployeeModel chiefModel, UploadOrgInfo uploadOrgInfo, MultipartFile mchdFile,
|
EmployeeModel chiefModel, UploadOrgInfo uploadOrgInfo, MultipartFile mchdFile,
|
||||||
String accessToken, FileStatus fileStatus, FileInfo fileInfo, FileInfo signFileInfo,
|
String accessToken, FileStatus fileStatus, FileInfo fileInfo, FileInfo signFileInfo,
|
||||||
FileInfo mchdFileInfo, LocalDateTime now, String fio, String ervuId,
|
FileInfo mchdFileInfo, String ervuId, String response) {
|
||||||
EmployeeInfoFileFormType formType, String response) {
|
|
||||||
|
|
||||||
String signerInfo = verifyDocumentSignResponse.getSignerInfo();
|
String signerInfo = verifyDocumentSignResponse.getSignerInfo();
|
||||||
Map<String, String> signerInfoMap = parseKeyValuePairs(signerInfo);
|
Map<String, String> signerInfoMap = parseKeyValuePairs(signerInfo);
|
||||||
|
|
@ -330,13 +329,13 @@ public class EmployeeInfoFileUploadService {
|
||||||
signerInfoMap.get("O").equalsIgnoreCase(uploadOrgInfo.getOrgName());
|
signerInfoMap.get("O").equalsIgnoreCase(uploadOrgInfo.getOrgName());
|
||||||
|
|
||||||
if (isSignerValid) {
|
if (isSignerValid) {
|
||||||
|
interactionService.updateStatus(fileInfo.getFileId(), "Направлено в ЕРВУ", ervuId);
|
||||||
sendMessage(response);
|
sendMessage(response);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mchdFile == null) {
|
if (mchdFile == null) {
|
||||||
handleMchdValidationError(fileStatus, uploadOrgInfo, fileInfo, signFileInfo, null,
|
handleMchdValidationError(fileStatus, uploadOrgInfo, fileInfo, signFileInfo, null, ervuId, response
|
||||||
now, fio, ervuId, formType, response
|
|
||||||
);
|
);
|
||||||
throw new LocalizedException("mchd_null", MESSAGE_SOURCE);
|
throw new LocalizedException("mchd_null", MESSAGE_SOURCE);
|
||||||
}
|
}
|
||||||
|
|
@ -345,28 +344,25 @@ public class EmployeeInfoFileUploadService {
|
||||||
validateMchd(mchdFile, accessToken, signerInfoMap.get("SN") + " " + signerInfoMap.get("G"),
|
validateMchd(mchdFile, accessToken, signerInfoMap.get("SN") + " " + signerInfoMap.get("G"),
|
||||||
chiefFirstName, chiefLastName, chiefMiddleName
|
chiefFirstName, chiefLastName, chiefMiddleName
|
||||||
);
|
);
|
||||||
|
interactionService.updateStatus(fileInfo.getFileId(), "Направлено в ЕРВУ", ervuId);
|
||||||
sendMessage(response);
|
sendMessage(response);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
handleMchdValidationError(fileStatus, uploadOrgInfo, fileInfo, signFileInfo, mchdFileInfo,
|
handleMchdValidationError(fileStatus, uploadOrgInfo, fileInfo, signFileInfo, mchdFileInfo, ervuId, response
|
||||||
now, fio, ervuId, formType, response
|
|
||||||
);
|
);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleMchdValidationError(FileStatus fileStatus, UploadOrgInfo uploadOrgInfo,
|
private void handleMchdValidationError(FileStatus fileStatus, UploadOrgInfo uploadOrgInfo,
|
||||||
FileInfo fileInfo, FileInfo signFileInfo, FileInfo mchdFileInfo, LocalDateTime now,
|
FileInfo fileInfo, FileInfo signFileInfo, FileInfo mchdFileInfo, String ervuId, String response) {
|
||||||
String fio, String ervuId, EmployeeInfoFileFormType formType, String response) {
|
|
||||||
|
|
||||||
fileStatus.setCode(FILE_NOT_CHECKED.getCode());
|
fileStatus.setCode(FILE_NOT_CHECKED.getCode());
|
||||||
fileStatus.setStatus("Некорректная МЧД");
|
fileStatus.setStatus("Некорректная МЧД");
|
||||||
|
fileStatus.setDescription("Проверка МЧД не пройдена");
|
||||||
|
|
||||||
interactionService.setStatus(fileInfo.getFileId(), fileStatus.getStatus(),
|
interactionService.updateStatus(fileInfo.getFileId(), fileStatus.getStatus(), ervuId);
|
||||||
fileInfo.getFileName(), formType.getFilePatternCode(), Timestamp.valueOf(now),
|
|
||||||
fio, ervuId
|
|
||||||
);
|
|
||||||
|
|
||||||
FileInfo[] fileInfos = mchdFileInfo != null ?
|
FileInfo[] fileInfos = mchdFileInfo != null ?
|
||||||
new FileInfo[] {fileInfo, signFileInfo, mchdFileInfo} :
|
new FileInfo[] {fileInfo, signFileInfo, mchdFileInfo} :
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,12 @@
|
||||||
kafka_reply_timeout=Превышено время ожидания ответа от сервера.
|
kafka_reply_timeout=Превышено время ожидания ответа от сервера.
|
||||||
access_denied=Доступ запрещен. Пользователь должен быть включен в группу "Сотрудник, ответственный за военно-учетную работу" в ЕСИА
|
access_denied=Доступ запрещен. Пользователь должен быть включен в группу "Сотрудник, ответственный за военно-учетную работу" в ЕСИА
|
||||||
login_attempts_exceeded=Слишком большое количество попыток авторизоваться в ЕСИА за короткий промежуток времени. Рекомендуем почистить cookie и cash браузера, после повторить авторизацию.
|
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=Ошибка проверки файлов. Некорректный формат машиночитаемой доверенности
|
||||||
Loading…
Add table
Add a link
Reference in a new issue