SUPPORT-9339: Fix
This commit is contained in:
parent
ede5bf85a0
commit
ab7cdbb6b9
12 changed files with 223 additions and 124 deletions
|
|
@ -101,7 +101,7 @@ public class WebDavClient {
|
||||||
String key = entry.getKey();
|
String key = entry.getKey();
|
||||||
MultipartFile file = entry.getValue();
|
MultipartFile file = entry.getValue();
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
result.put(key, putAndGetUrl(file.getBytes(), file.getOriginalFilename(), sardine, fileCatalog));
|
result.put(key, putAndGetUrl(file.getBytes(), getNewFilename(file.getOriginalFilename()), sardine, fileCatalog));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -119,6 +119,12 @@ public class WebDavClient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getNewFilename(String filename) {
|
||||||
|
int lastIndexOf = filename.lastIndexOf(".");
|
||||||
|
String fileExtension = lastIndexOf == -1 ? "" : filename.substring(lastIndexOf);
|
||||||
|
return UUID.randomUUID() + fileExtension;
|
||||||
|
}
|
||||||
|
|
||||||
public String putAndGetUrl(byte[] fileBytes, String fileName, Sardine client, String fileCatalog) throws IOException {
|
public String putAndGetUrl(byte[] fileBytes, String fileName, Sardine client, String fileCatalog) throws IOException {
|
||||||
if (badServersCache.size() == urls.length) {
|
if (badServersCache.size() == urls.length) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,9 @@ public enum FileStatusCode {
|
||||||
FILE_INFECTED("02"),
|
FILE_INFECTED("02"),
|
||||||
FILE_CLEAN("03"),
|
FILE_CLEAN("03"),
|
||||||
FILE_ACCEPTED("04"),
|
FILE_ACCEPTED("04"),
|
||||||
FILE_NOT_CHECKED("11");
|
FILE_NOT_CHECKED("11"),
|
||||||
|
SIGN_INVALID("12"),
|
||||||
|
MCHD_INVALID("13");
|
||||||
|
|
||||||
private final String code;
|
private final String code;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,8 @@ import static ervu.enums.FileStatusCode.FILE_ACCEPTED;
|
||||||
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;
|
||||||
|
import static ervu.enums.FileStatusCode.MCHD_INVALID;
|
||||||
|
import static ervu.enums.FileStatusCode.SIGN_INVALID;
|
||||||
import static ru.micord.ervu.util.StringUtils.convertToFio;
|
import static ru.micord.ervu.util.StringUtils.convertToFio;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -79,6 +81,8 @@ import static ru.micord.ervu.util.StringUtils.convertToFio;
|
||||||
public class EmployeeInfoFileUploadService {
|
public class EmployeeInfoFileUploadService {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(EmployeeInfoFileUploadService.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(EmployeeInfoFileUploadService.class);
|
||||||
private static final String DOCUMENT = "DOCUMENT";
|
private static final String DOCUMENT = "DOCUMENT";
|
||||||
|
private static final String SIGNATURE = "SIGNATURE";
|
||||||
|
private static final String MCHD = "MCHD";
|
||||||
private static final MessageSourceAccessor MESSAGE_SOURCE = MessageBundleUtils.createAccessor(
|
private static final MessageSourceAccessor MESSAGE_SOURCE = MessageBundleUtils.createAccessor(
|
||||||
"messages/common_errors_messages");
|
"messages/common_errors_messages");
|
||||||
private final WebDavClient webDavClient;
|
private final WebDavClient webDavClient;
|
||||||
|
|
@ -157,11 +161,11 @@ public class EmployeeInfoFileUploadService {
|
||||||
departureDateTime, offset, DOCUMENT
|
departureDateTime, offset, DOCUMENT
|
||||||
);
|
);
|
||||||
FileInfo signFileInfo = createFileInfo(signFile, employeeInfoFileFormType,
|
FileInfo signFileInfo = createFileInfo(signFile, employeeInfoFileFormType,
|
||||||
departureDateTime, offset, "SIGNATURE"
|
departureDateTime, offset, SIGNATURE
|
||||||
);
|
);
|
||||||
FileInfo mchdFileInfo = mchdFile != null ?
|
FileInfo mchdFileInfo = mchdFile != null ?
|
||||||
createFileInfo(mchdFile, employeeInfoFileFormType, departureDateTime,
|
createFileInfo(mchdFile, employeeInfoFileFormType, departureDateTime,
|
||||||
offset, "MCHD"
|
offset, MCHD
|
||||||
) : null;
|
) : null;
|
||||||
|
|
||||||
FileStatus fileStatus = new FileStatus();
|
FileStatus fileStatus = new FileStatus();
|
||||||
|
|
@ -219,32 +223,35 @@ public class EmployeeInfoFileUploadService {
|
||||||
interactionService.updateStatus(fileInfo.getFileId(), fileInfo.getFileStatus().getStatus(),
|
interactionService.updateStatus(fileInfo.getFileId(), fileInfo.getFileStatus().getStatus(),
|
||||||
uploadOrgInfo.getOrgId()
|
uploadOrgInfo.getOrgId()
|
||||||
);
|
);
|
||||||
auditService.processUploadEvent(uploadOrgInfo, fileInfos);
|
auditService.processUploadEvent(uploadOrgInfo, fileInfos, fileStatus);
|
||||||
throw new FileUploadException(e);
|
throw new FileUploadException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileInfo = Arrays.stream(downloadResponse.filesInfo())
|
||||||
|
.filter(file -> DOCUMENT.equals(file.getType()))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(fileInfo);
|
||||||
|
|
||||||
|
signFileInfo = Arrays.stream(downloadResponse.filesInfo())
|
||||||
|
.filter(file -> SIGNATURE.equals(file.getType()))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(signFileInfo);
|
||||||
|
|
||||||
|
mchdFileInfo = Arrays.stream(downloadResponse.filesInfo())
|
||||||
|
.filter(file -> MCHD.equals(file.getType()))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(mchdFileInfo);
|
||||||
VerifyDocumentSignResponse verifyDocumentSignResponse;
|
VerifyDocumentSignResponse verifyDocumentSignResponse;
|
||||||
try {
|
try {
|
||||||
verifyDocumentSignResponse = validateSign(multipartFile, signFile);
|
verifyDocumentSignResponse = validateSign(multipartFile, signFile);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
fileStatus.setCode(FILE_NOT_CHECKED.getCode());
|
handeSignError(fileInfo, signFileInfo, uploadOrgInfo, response);
|
||||||
fileStatus.setStatus("Некорректная ЭП");
|
|
||||||
fileStatus.setDescription("Не пройдена проверка ЭП");
|
|
||||||
Arrays.stream(downloadResponse.filesInfo())
|
|
||||||
.forEach(fileInfo1 -> fileInfo1.setFileStatus(fileStatus));
|
|
||||||
|
|
||||||
interactionService.updateStatus(fileInfo.getFileId(), fileInfo.getFileStatus().getStatus(),
|
|
||||||
uploadOrgInfo.getOrgId()
|
|
||||||
);
|
|
||||||
|
|
||||||
auditService.processUploadEvent(uploadOrgInfo, new FileInfo[] {fileInfo, signFileInfo});
|
|
||||||
clearS3(response);
|
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
return validateSignerAndMchd(verifyDocumentSignResponse, chiefModel, uploadOrgInfo,
|
return validateSignerAndMchd(verifyDocumentSignResponse, chiefModel, uploadOrgInfo,
|
||||||
mchdFile, accessToken, fileStatus, fileInfo, signFileInfo, mchdFileInfo, ervuId, response
|
mchdFile, accessToken, fileInfo, signFileInfo, mchdFileInfo, ervuId, response
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -295,7 +302,7 @@ public class EmployeeInfoFileUploadService {
|
||||||
new FileInfo[] {fileInfo, signFileInfo, mchdFileInfo} :
|
new FileInfo[] {fileInfo, signFileInfo, mchdFileInfo} :
|
||||||
new FileInfo[] {fileInfo, signFileInfo};
|
new FileInfo[] {fileInfo, signFileInfo};
|
||||||
|
|
||||||
auditService.processUploadEvent(uploadOrgInfo, fileInfos);
|
auditService.processUploadEvent(uploadOrgInfo, fileInfos, fileStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String sendKafkaMessage(UploadOrgInfo uploadOrgInfo, FileInfo[] fileInfos,
|
private String sendKafkaMessage(UploadOrgInfo uploadOrgInfo, FileInfo[] fileInfos,
|
||||||
|
|
@ -315,7 +322,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, FileInfo fileInfo, FileInfo signFileInfo,
|
||||||
FileInfo mchdFileInfo, String ervuId, String response) {
|
FileInfo mchdFileInfo, String ervuId, String response) {
|
||||||
|
|
||||||
String signerInfo = verifyDocumentSignResponse.getSignerInfo();
|
String signerInfo = verifyDocumentSignResponse.getSignerInfo();
|
||||||
|
|
@ -332,45 +339,68 @@ public class EmployeeInfoFileUploadService {
|
||||||
|
|
||||||
if (isSignerValid) {
|
if (isSignerValid) {
|
||||||
interactionService.updateStatus(fileInfo.getFileId(), "Направлено в ЕРВУ", ervuId);
|
interactionService.updateStatus(fileInfo.getFileId(), "Направлено в ЕРВУ", ervuId);
|
||||||
sendMessage(response);
|
FileStatusResponse fileStatusResponse = new FileStatusResponse(uploadOrgInfo,
|
||||||
return true;
|
new FileInfo[] {fileInfo, signFileInfo}, fileInfo.getFileStatus()
|
||||||
|
);
|
||||||
|
try {
|
||||||
|
sendMessage(fileStatusResponse);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (JsonProcessingException e) {
|
||||||
|
handeSignError(fileInfo, signFileInfo, uploadOrgInfo, response);
|
||||||
|
throw new JsonParsingException(
|
||||||
|
String.format("Fail get json from: %s", fileStatusResponse), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mchdFile == null) {
|
if (mchdFile == null) {
|
||||||
handleMchdValidationError(fileStatus, uploadOrgInfo, fileInfo, signFileInfo, null, ervuId, response
|
handleMchdValidationError(uploadOrgInfo, fileInfo, signFileInfo, null, ervuId, response
|
||||||
);
|
);
|
||||||
throw new LocalizedException("mchd_null", MESSAGE_SOURCE);
|
throw new LocalizedException("mchd_null", MESSAGE_SOURCE);
|
||||||
}
|
}
|
||||||
|
FileStatusResponse fileStatusResponse = new FileStatusResponse(uploadOrgInfo,
|
||||||
|
new FileInfo[] {fileInfo, signFileInfo, mchdFileInfo}, fileInfo.getFileStatus()
|
||||||
|
);
|
||||||
try {
|
try {
|
||||||
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);
|
interactionService.updateStatus(fileInfo.getFileId(), "Направлено в ЕРВУ", ervuId);
|
||||||
sendMessage(response);
|
|
||||||
|
sendMessage(fileStatusResponse);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
catch (JsonProcessingException e) {
|
||||||
|
handleMchdValidationError(uploadOrgInfo, fileInfo, signFileInfo, mchdFileInfo, ervuId, response
|
||||||
|
);
|
||||||
|
throw new JsonParsingException(
|
||||||
|
String.format("Fail get json from: %s", fileStatusResponse), e);
|
||||||
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
handleMchdValidationError(fileStatus, uploadOrgInfo, fileInfo, signFileInfo, mchdFileInfo, ervuId, response
|
handleMchdValidationError(uploadOrgInfo, fileInfo, signFileInfo, mchdFileInfo, ervuId, response
|
||||||
);
|
);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleMchdValidationError(FileStatus fileStatus, UploadOrgInfo uploadOrgInfo,
|
private void handleMchdValidationError(UploadOrgInfo uploadOrgInfo,
|
||||||
FileInfo fileInfo, FileInfo signFileInfo, FileInfo mchdFileInfo, String ervuId, String response) {
|
FileInfo fileInfo, FileInfo signFileInfo, FileInfo mchdFileInfo, String ervuId, String response) {
|
||||||
|
FileStatus packInfo = new FileStatus();
|
||||||
|
packInfo.setCode(MCHD_INVALID.getCode());
|
||||||
|
packInfo.setStatus("Некорректная МЧД");
|
||||||
|
packInfo.setDescription("Проверка МЧД не пройдена");
|
||||||
|
|
||||||
fileStatus.setCode(FILE_NOT_CHECKED.getCode());
|
interactionService.updateStatus(fileInfo.getFileId(), packInfo.getStatus(), ervuId);
|
||||||
fileStatus.setStatus("Некорректная МЧД");
|
FileInfo[] fileInfos;
|
||||||
fileStatus.setDescription("Проверка МЧД не пройдена");
|
if (mchdFileInfo != null) {
|
||||||
|
mchdFileInfo.setFileStatus(packInfo);
|
||||||
|
fileInfos = new FileInfo[] {fileInfo, signFileInfo, mchdFileInfo};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fileInfos = new FileInfo[] {fileInfo, signFileInfo};
|
||||||
|
}
|
||||||
|
|
||||||
interactionService.updateStatus(fileInfo.getFileId(), fileStatus.getStatus(), ervuId);
|
auditService.processUploadEvent(uploadOrgInfo, fileInfos, packInfo);
|
||||||
|
|
||||||
FileInfo[] fileInfos = mchdFileInfo != null ?
|
|
||||||
new FileInfo[] {fileInfo, signFileInfo, mchdFileInfo} :
|
|
||||||
new FileInfo[] {fileInfo, signFileInfo};
|
|
||||||
|
|
||||||
auditService.processUploadEvent(uploadOrgInfo, fileInfos);
|
|
||||||
clearS3(response);
|
clearS3(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -416,9 +446,8 @@ public class EmployeeInfoFileUploadService {
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getJsonKafkaMessage(EmployeeInfoKafkaMessage employeeInfoKafkaMessage) {
|
private String getJsonKafkaMessage(EmployeeInfoKafkaMessage employeeInfoKafkaMessage) {
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
try {
|
try {
|
||||||
return mapper.writeValueAsString(employeeInfoKafkaMessage);
|
return objectMapper.writeValueAsString(employeeInfoKafkaMessage);
|
||||||
}
|
}
|
||||||
catch (JsonProcessingException e) {
|
catch (JsonProcessingException e) {
|
||||||
throw new JsonParsingException(
|
throw new JsonParsingException(
|
||||||
|
|
@ -557,7 +586,8 @@ public class EmployeeInfoFileUploadService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean sendMessage(String message) {
|
private boolean sendMessage(FileStatusResponse fileStatusResponse) throws JsonProcessingException {
|
||||||
|
String message = objectMapper.writeValueAsString(fileStatusResponse);
|
||||||
ProducerRecord<String, String> record = new ProducerRecord<>(this.kafkaDownloadRequestTopic, message);
|
ProducerRecord<String, String> record = new ProducerRecord<>(this.kafkaDownloadRequestTopic, message);
|
||||||
record.headers()
|
record.headers()
|
||||||
.add("messageId", UUID.randomUUID().toString().getBytes(StandardCharsets.UTF_8));
|
.add("messageId", UUID.randomUUID().toString().getBytes(StandardCharsets.UTF_8));
|
||||||
|
|
@ -595,15 +625,33 @@ public class EmployeeInfoFileUploadService {
|
||||||
if (fileStatus1.getCode().equals(FILE_INFECTED.getCode())) {
|
if (fileStatus1.getCode().equals(FILE_INFECTED.getCode())) {
|
||||||
interactionService.updateStatus(avFile.getFileId(), avFile.getFileStatus().getStatus(),
|
interactionService.updateStatus(avFile.getFileId(), avFile.getFileStatus().getStatus(),
|
||||||
downloadResponse.orgInfo().getOrgId());
|
downloadResponse.orgInfo().getOrgId());
|
||||||
sendMessage(response);
|
FileStatusResponse fileStatusResponse = new FileStatusResponse(downloadResponse.orgInfo(),
|
||||||
|
downloadResponse.filesInfo(), fileStatus1
|
||||||
|
);
|
||||||
|
sendMessage(fileStatusResponse);
|
||||||
throw new LocalizedException("av_file_infected", MESSAGE_SOURCE);
|
throw new LocalizedException("av_file_infected", MESSAGE_SOURCE);
|
||||||
}
|
}
|
||||||
else if (fileStatus1.getCode().equals(FILE_NOT_CHECKED.getCode())) {
|
else if (fileStatus1.getCode().equals(FILE_NOT_CHECKED.getCode())) {
|
||||||
interactionService.updateStatus(avFile.getFileId(), avFile.getFileStatus().getStatus(),
|
interactionService.updateStatus(avFile.getFileId(), avFile.getFileStatus().getStatus(),
|
||||||
downloadResponse.orgInfo().getOrgId());
|
downloadResponse.orgInfo().getOrgId());
|
||||||
auditService.processUploadEvent(downloadResponse.orgInfo(), downloadResponse.filesInfo());
|
auditService.processUploadEvent(downloadResponse.orgInfo(), downloadResponse.filesInfo(), fileStatus1);
|
||||||
throw new FileUploadException("File not checked: " + avFile.getFileName());
|
throw new FileUploadException("File not checked: " + avFile.getFileName());
|
||||||
}
|
}
|
||||||
return downloadResponse;
|
return downloadResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handeSignError(FileInfo fileInfo, FileInfo signFileInfo, UploadOrgInfo uploadOrgInfo, String response) {
|
||||||
|
FileStatus packInfo = new FileStatus();
|
||||||
|
packInfo.setCode(SIGN_INVALID.getCode());
|
||||||
|
packInfo.setStatus("Некорректная ЭП");
|
||||||
|
packInfo.setDescription("Не пройдена проверка ЭП");
|
||||||
|
signFileInfo.setFileStatus(packInfo);
|
||||||
|
|
||||||
|
interactionService.updateStatus(fileInfo.getFileId(), packInfo.getStatus(),
|
||||||
|
uploadOrgInfo.getOrgId()
|
||||||
|
);
|
||||||
|
|
||||||
|
auditService.processUploadEvent(uploadOrgInfo, new FileInfo[] {fileInfo, signFileInfo}, packInfo);
|
||||||
|
clearS3(response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package ru.micord.ervu.audit.model;
|
||||||
|
|
||||||
|
|
||||||
import ervu.model.fileupload.FileInfo;
|
import ervu.model.fileupload.FileInfo;
|
||||||
|
import ervu.model.fileupload.FileStatus;
|
||||||
import ervu.model.fileupload.UploadOrgInfo;
|
import ervu.model.fileupload.UploadOrgInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -11,10 +12,12 @@ import ervu.model.fileupload.UploadOrgInfo;
|
||||||
public class AuditUploadEvent {
|
public class AuditUploadEvent {
|
||||||
private UploadOrgInfo orgInfo;
|
private UploadOrgInfo orgInfo;
|
||||||
private FileInfo[] filesInfo;
|
private FileInfo[] filesInfo;
|
||||||
|
private FileStatus packInfo;
|
||||||
|
|
||||||
public AuditUploadEvent(UploadOrgInfo orgInfo, FileInfo[] filesInfo) {
|
public AuditUploadEvent(UploadOrgInfo orgInfo, FileInfo[] filesInfo, FileStatus packInfo) {
|
||||||
this.orgInfo = orgInfo;
|
this.orgInfo = orgInfo;
|
||||||
this.filesInfo = filesInfo;
|
this.filesInfo = filesInfo;
|
||||||
|
this.packInfo = packInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UploadOrgInfo getOrgInfo() {
|
public UploadOrgInfo getOrgInfo() {
|
||||||
|
|
@ -32,4 +35,12 @@ public class AuditUploadEvent {
|
||||||
public void setFilesInfo(FileInfo[] filesInfo) {
|
public void setFilesInfo(FileInfo[] filesInfo) {
|
||||||
this.filesInfo = filesInfo;
|
this.filesInfo = filesInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FileStatus getPackInfo() {
|
||||||
|
return packInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPackInfo(FileStatus packInfo) {
|
||||||
|
this.packInfo = packInfo;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package ru.micord.ervu.audit.service;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import ervu.model.fileupload.FileInfo;
|
import ervu.model.fileupload.FileInfo;
|
||||||
|
import ervu.model.fileupload.FileStatus;
|
||||||
import ervu.model.fileupload.UploadOrgInfo;
|
import ervu.model.fileupload.UploadOrgInfo;
|
||||||
import ru.micord.ervu.audit.model.AuditActionRequest;
|
import ru.micord.ervu.audit.model.AuditActionRequest;
|
||||||
import ru.micord.ervu.kafka.model.OrgInfo;
|
import ru.micord.ervu.kafka.model.OrgInfo;
|
||||||
|
|
@ -16,7 +17,7 @@ public interface AuditService {
|
||||||
void processAuthEvent(HttpServletRequest request, OrgInfo orgInfo, String prnOid, String status,
|
void processAuthEvent(HttpServletRequest request, OrgInfo orgInfo, String prnOid, String status,
|
||||||
String eventType);
|
String eventType);
|
||||||
|
|
||||||
void processUploadEvent(UploadOrgInfo uploadOrgInfo, FileInfo[] filesInfo);
|
void processUploadEvent(UploadOrgInfo uploadOrgInfo, FileInfo[] filesInfo, FileStatus packInfo);
|
||||||
|
|
||||||
void processDownloadEvent(HttpServletRequest request, long fileSize, String fileName,
|
void processDownloadEvent(HttpServletRequest request, long fileSize, String fileName,
|
||||||
int formatRegistry, String status, String s3FileUrl);
|
int formatRegistry, String status, String s3FileUrl);
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
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 ervu.model.fileupload.FileInfo;
|
import ervu.model.fileupload.FileInfo;
|
||||||
|
import ervu.model.fileupload.FileStatus;
|
||||||
import ervu.model.fileupload.UploadOrgInfo;
|
import ervu.model.fileupload.UploadOrgInfo;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.context.annotation.Conditional;
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
|
@ -110,10 +111,11 @@ public class BaseAuditService implements AuditService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processUploadEvent(UploadOrgInfo orgInfo, FileInfo[] filesInfo) {
|
public void processUploadEvent(UploadOrgInfo orgInfo, FileInfo[] filesInfo, FileStatus packInfo) {
|
||||||
AuditUploadEvent auditUploadEvent = new AuditUploadEvent(
|
AuditUploadEvent auditUploadEvent = new AuditUploadEvent(
|
||||||
orgInfo,
|
orgInfo,
|
||||||
filesInfo
|
filesInfo,
|
||||||
|
packInfo
|
||||||
);
|
);
|
||||||
|
|
||||||
String message = convertToMessage(auditUploadEvent);
|
String message = convertToMessage(auditUploadEvent);
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package ru.micord.ervu.audit.service.impl;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import ervu.model.fileupload.FileInfo;
|
import ervu.model.fileupload.FileInfo;
|
||||||
|
import ervu.model.fileupload.FileStatus;
|
||||||
import ervu.model.fileupload.UploadOrgInfo;
|
import ervu.model.fileupload.UploadOrgInfo;
|
||||||
import org.springframework.context.annotation.Conditional;
|
import org.springframework.context.annotation.Conditional;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -26,7 +27,7 @@ public class StubAuditService implements AuditService {
|
||||||
String status, String eventType) {}
|
String status, String eventType) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processUploadEvent(UploadOrgInfo uploadOrgInfo, FileInfo[] filesInfo) {}
|
public void processUploadEvent(UploadOrgInfo uploadOrgInfo, FileInfo[] filesInfo, FileStatus packInfo) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processDownloadEvent(HttpServletRequest request, long fileSize, String fileName,
|
public void processDownloadEvent(HttpServletRequest request, long fileSize, String fileName,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package ru.micord.ervu.journal;
|
package ru.micord.ervu.journal;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
|
|
@ -9,78 +10,17 @@ import ru.micord.ervu.journal.deserializer.DepartureDateTimeDeserializer;
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public class JournalFileInfo {
|
public class JournalFileInfo {
|
||||||
|
|
||||||
private String fileId; //ИД файла полученный при создании записи о файле в реестр организаций (в ЕРВУ)
|
private List<JournalFileDetails> packFiles; // Список файлов (csv, sig, mchd)
|
||||||
private String fileName; // Название файла
|
|
||||||
private Integer filePatternCode; // Номер шаблона(Формы)
|
|
||||||
private String filePatternName;
|
|
||||||
@JsonDeserialize(using = DepartureDateTimeDeserializer.class)
|
|
||||||
private LocalDateTime departureDateTime; // Дата-время отправки файла
|
|
||||||
private String timeZone; //Таймзона
|
|
||||||
private JournalFileStatus fileStatus;
|
|
||||||
private SenderInfo senderInfo;
|
private SenderInfo senderInfo;
|
||||||
private Integer rowsCount; //Общее количество записей отправленных в файле
|
private Integer rowsCount; //Общее количество записей отправленных в файле
|
||||||
private Integer rowsSuccess; //Количество записей принятых в файле
|
private Integer rowsSuccess; //Количество записей принятых в файле
|
||||||
|
|
||||||
public String getFileId() {
|
public List<JournalFileDetails> getPackFiles() {
|
||||||
return fileId;
|
return packFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
public JournalFileInfo setFileId(String fileId) {
|
public JournalFileInfo setPackFiles(List<JournalFileDetails> packFiles) {
|
||||||
this.fileId = fileId;
|
this.packFiles = packFiles;
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFileName() {
|
|
||||||
return fileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public JournalFileInfo setFileName(String fileName) {
|
|
||||||
this.fileName = fileName;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getFilePatternCode() {
|
|
||||||
return filePatternCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public JournalFileInfo setFilePatternCode(Integer filePatternCode) {
|
|
||||||
this.filePatternCode = filePatternCode;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFilePatternName() {
|
|
||||||
return filePatternName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public JournalFileInfo setFilePatternName(String filePatternName) {
|
|
||||||
this.filePatternName = filePatternName;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LocalDateTime getDepartureDateTime() {
|
|
||||||
return departureDateTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public JournalFileInfo setDepartureDateTime(LocalDateTime departureDateTime) {
|
|
||||||
this.departureDateTime = departureDateTime;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTimeZone() {
|
|
||||||
return timeZone;
|
|
||||||
}
|
|
||||||
|
|
||||||
public JournalFileInfo setTimeZone(String timeZone) {
|
|
||||||
this.timeZone = timeZone;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public JournalFileStatus getFileStatus() {
|
|
||||||
return fileStatus;
|
|
||||||
}
|
|
||||||
|
|
||||||
public JournalFileInfo setFileStatus(JournalFileStatus fileStatus) {
|
|
||||||
this.fileStatus = fileStatus;
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -110,4 +50,88 @@ public class JournalFileInfo {
|
||||||
this.rowsSuccess = rowsSuccess;
|
this.rowsSuccess = rowsSuccess;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
public static class JournalFileDetails {
|
||||||
|
private String fileId; //ИД файла полученный при создании записи о файле в реестр организаций (в ЕРВУ)
|
||||||
|
private String fileName; // Название файла
|
||||||
|
private Integer filePatternCode; // Номер шаблона(Формы)
|
||||||
|
private String filePatternName;
|
||||||
|
@JsonDeserialize(using = DepartureDateTimeDeserializer.class)
|
||||||
|
private LocalDateTime departureDateTime; // Дата-время отправки файла
|
||||||
|
private String timeZone; //Таймзона
|
||||||
|
private JournalFileStatus fileStatus;
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
public String getFileId() {
|
||||||
|
return fileId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JournalFileDetails setFileId(String fileId) {
|
||||||
|
this.fileId = fileId;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFileName() {
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JournalFileDetails setFileName(String fileName) {
|
||||||
|
this.fileName = fileName;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getFilePatternCode() {
|
||||||
|
return filePatternCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JournalFileDetails setFilePatternCode(Integer filePatternCode) {
|
||||||
|
this.filePatternCode = filePatternCode;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFilePatternName() {
|
||||||
|
return filePatternName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JournalFileDetails setFilePatternName(String filePatternName) {
|
||||||
|
this.filePatternName = filePatternName;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDateTime getDepartureDateTime() {
|
||||||
|
return departureDateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JournalFileDetails setDepartureDateTime(LocalDateTime departureDateTime) {
|
||||||
|
this.departureDateTime = departureDateTime;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTimeZone() {
|
||||||
|
return timeZone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JournalFileDetails setTimeZone(String timeZone) {
|
||||||
|
this.timeZone = timeZone;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JournalFileStatus getFileStatus() {
|
||||||
|
return fileStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JournalFileDetails setFileStatus(JournalFileStatus fileStatus) {
|
||||||
|
this.fileStatus = fileStatus;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -11,18 +11,19 @@ import static ru.micord.ervu.util.StringUtils.convertToFio;
|
||||||
|
|
||||||
public class JournalDtoMapper {
|
public class JournalDtoMapper {
|
||||||
|
|
||||||
public static JournalDto mapToJournalDto(JournalFileInfo journalFileInfo) {
|
public static JournalDto mapToJournalDto(JournalFileInfo journalFileInfo,
|
||||||
|
JournalFileInfo.JournalFileDetails journalFileDetails) {
|
||||||
SenderInfo senderInfo = journalFileInfo.getSenderInfo();
|
SenderInfo senderInfo = journalFileInfo.getSenderInfo();
|
||||||
return new JournalDto()
|
return new JournalDto()
|
||||||
.setFileId(journalFileInfo.getFileId())
|
.setFileId(journalFileDetails.getFileId())
|
||||||
.setDepartureDateTime(Timestamp.valueOf(journalFileInfo.getDepartureDateTime()).toString())
|
.setDepartureDateTime(Timestamp.valueOf(journalFileDetails.getDepartureDateTime()).toString())
|
||||||
.setFileName(journalFileInfo.getFileName())
|
.setFileName(journalFileDetails.getFileName())
|
||||||
.setFilePatternCode(journalFileInfo.getFilePatternCode())
|
.setFilePatternCode(journalFileDetails.getFilePatternCode())
|
||||||
.setSenderFio(convertToFio(senderInfo.getFirstName(), senderInfo.getMiddleName(),
|
.setSenderFio(convertToFio(senderInfo.getFirstName(), senderInfo.getMiddleName(),
|
||||||
senderInfo.getLastName()
|
senderInfo.getLastName()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
.setStatus(journalFileInfo.getFileStatus().getStatus())
|
.setStatus(journalFileDetails.getFileStatus().getStatus())
|
||||||
.setFilesSentCount(journalFileInfo.getRowsCount())
|
.setFilesSentCount(journalFileInfo.getRowsCount())
|
||||||
.setAcceptedFilesCount(journalFileInfo.getRowsSuccess());
|
.setAcceptedFilesCount(journalFileInfo.getRowsSuccess());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import ru.micord.ervu.audit.constants.AuditConstants;
|
import ru.micord.ervu.audit.constants.AuditConstants;
|
||||||
import ru.micord.ervu.audit.service.AuditService;
|
import ru.micord.ervu.audit.service.AuditService;
|
||||||
|
|
@ -48,7 +48,7 @@ public class ErvuKafkaController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ObjectMapper objectMapper;
|
private ObjectMapper objectMapper;
|
||||||
|
|
||||||
@RequestMapping(value = "/kafka/excerpt")
|
@GetMapping(value = "/kafka/excerpt")
|
||||||
public ResponseEntity<Resource> getExcerptFile(HttpServletRequest request) {
|
public ResponseEntity<Resource> getExcerptFile(HttpServletRequest request) {
|
||||||
String fileUrl = null;
|
String fileUrl = null;
|
||||||
String fileName = null;
|
String fileName = null;
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,10 @@ public class JournalInMemoryStaticGridLoadService implements
|
||||||
JournalFileDataResponse journalFileDataResponse = objectMapper.readValue(responseJsonString,
|
JournalFileDataResponse journalFileDataResponse = objectMapper.readValue(responseJsonString,
|
||||||
JournalFileDataResponse.class);
|
JournalFileDataResponse.class);
|
||||||
ervuJournalList = journalFileDataResponse.getFilesInfo().stream()
|
ervuJournalList = journalFileDataResponse.getFilesInfo().stream()
|
||||||
.map(JournalDtoMapper::mapToJournalDto)
|
.flatMap(fileInfo -> fileInfo.getPackFiles().stream()
|
||||||
|
.filter(fileDetail -> "DOCUMENT".equals(fileDetail.getType()))
|
||||||
|
.map(fileDetail -> JournalDtoMapper.mapToJournalDto(fileInfo, fileDetail))
|
||||||
|
)
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
catch (JsonProcessingException e) {
|
catch (JsonProcessingException e) {
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ export class SetFilter implements IFilterComp {
|
||||||
|
|
||||||
private initCheckBox(id: string, value: string, index: number): HTMLInputElement {
|
private initCheckBox(id: string, value: string, index: number): HTMLInputElement {
|
||||||
this.eGui.insertAdjacentHTML('beforeend', this.OPTION_TEMPLATE);
|
this.eGui.insertAdjacentHTML('beforeend', this.OPTION_TEMPLATE);
|
||||||
this.eGui.querySelectorAll('.ag-filter-value')[index].innerHTML = value;
|
(this.eGui.querySelectorAll('.ag-filter-value')[index] as HTMLElement).textContent = value;
|
||||||
let checkbox = this.eGui.querySelectorAll('.ag-filter-checkbox')[index] as HTMLInputElement;
|
let checkbox = this.eGui.querySelectorAll('.ag-filter-checkbox')[index] as HTMLInputElement;
|
||||||
checkbox.setAttribute('id', id);
|
checkbox.setAttribute('id', id);
|
||||||
checkbox.addEventListener('change', this.onCheckBoxChanged.bind(this));
|
checkbox.addEventListener('change', this.onCheckBoxChanged.bind(this));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue