SUPPORT-9605: init

This commit is contained in:
adel.ka 2025-11-26 22:05:23 +03:00
parent 84cfb974f4
commit 83a13cc8d6
7 changed files with 92 additions and 30 deletions

View file

@ -0,0 +1,14 @@
package ru.micord.ervu.exception;
/**
* @author Adel Kalimullin
*/
public class JournalException extends RuntimeException {
public JournalException(String message) {
super(message);
}
public JournalException(String message, Throwable cause) {
super(message, cause);
}
}

View file

@ -0,0 +1,37 @@
package ru.micord.ervu.journal;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author ya.kuznetsova
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class JournalFileData {
@JsonProperty("orgId_ERVU")
private String orgIdErvu; // идентификатор организации в ЕРВУ
@JsonProperty("filesInfo")
private List<JournalFileInfo> filesInfo;
public String getOrgIdErvu() {
return orgIdErvu;
}
public JournalFileData setOrgIdErvu(String orgIdErvu) {
this.orgIdErvu = orgIdErvu;
return this;
}
public List<JournalFileInfo> getFilesInfo() {
return filesInfo;
}
public JournalFileData setFilesInfo(List<JournalFileInfo> filesInfo) {
this.filesInfo = filesInfo;
return this;
}
}

View file

@ -1,37 +1,25 @@
package ru.micord.ervu.journal; package ru.micord.ervu.journal;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
/** /**
* @author ya.kuznetsova * @author Adel Kalimullin
*/ */
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
public class JournalFileDataResponse { public class JournalFileDataResponse {
private boolean success;
private String message;
private JournalFileData data;
@JsonProperty("orgId_ERVU") public boolean isSuccess() {
private String orgIdErvu; // идентификатор организации в ЕРВУ return success;
@JsonProperty("filesInfo")
private List<JournalFileInfo> filesInfo;
public String getOrgIdErvu() {
return orgIdErvu;
} }
public JournalFileDataResponse setOrgIdErvu(String orgIdErvu) { public String getMessage() {
this.orgIdErvu = orgIdErvu; return message;
return this;
} }
public List<JournalFileInfo> getFilesInfo() { public JournalFileData getData() {
return filesInfo; return data;
}
public JournalFileDataResponse setFilesInfo(List<JournalFileInfo> filesInfo) {
this.filesInfo = filesInfo;
return this;
} }
} }

View file

@ -10,7 +10,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.kafka.requestreply.ReplyingKafkaTemplate; import org.springframework.kafka.requestreply.ReplyingKafkaTemplate;
import org.springframework.kafka.requestreply.RequestReplyFuture; import org.springframework.kafka.requestreply.RequestReplyFuture;
import org.springframework.stereotype.Service;
import ru.micord.ervu.kafka.exception.KafkaMessageException; import ru.micord.ervu.kafka.exception.KafkaMessageException;
import ru.micord.ervu.kafka.exception.KafkaMessageReplyTimeoutException; import ru.micord.ervu.kafka.exception.KafkaMessageReplyTimeoutException;
import ru.micord.ervu.kafka.service.ReplyingKafkaService; import ru.micord.ervu.kafka.service.ReplyingKafkaService;
@ -18,7 +17,6 @@ import ru.micord.ervu.kafka.service.ReplyingKafkaService;
/** /**
* @author Eduard Tihomirov * @author Eduard Tihomirov
*/ */
@Service
public abstract class BaseReplyingKafkaService<T, V> implements ReplyingKafkaService<T, V> { public abstract class BaseReplyingKafkaService<T, V> implements ReplyingKafkaService<T, V> {
private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

View file

@ -45,7 +45,6 @@ import ru.micord.ervu.security.esia.EsiaAuthInfoStore;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContext;
import org.springframework.util.StringUtils;
import ru.micord.ervu.security.esia.config.EsiaConfig; import ru.micord.ervu.security.esia.config.EsiaConfig;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import ru.micord.ervu.kafka.model.Brhs; import ru.micord.ervu.kafka.model.Brhs;
@ -63,6 +62,7 @@ import ru.micord.ervu.security.webbpm.jwt.helper.SecurityHelper;
import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService; import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService;
import ru.micord.ervu.security.webbpm.jwt.model.Token; import ru.micord.ervu.security.webbpm.jwt.model.Token;
import ru.micord.ervu.service.UploadAccessService; import ru.micord.ervu.service.UploadAccessService;
import ru.micord.ervu.util.StringUtils;
import ru.cg.webbpm.modules.core.runtime.api.LocalizedException; 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;
@ -469,9 +469,14 @@ public class EsiaAuthService {
requestReplyTopic, objectMapper.writeValueAsString(orgInfo) requestReplyTopic, objectMapper.writeValueAsString(orgInfo)
); );
ErvuOrgResponse ervuOrgResponse = objectMapper.readValue(kafkaResponse, ErvuOrgResponse.class); ErvuOrgResponse ervuOrgResponse = objectMapper.readValue(kafkaResponse, ErvuOrgResponse.class);
if (!ervuOrgResponse.getSuccess()) {
throw new EsiaException("Failed to get organization ervuId for prnOid = " + prnOid +
". ErrorMessage: " + ervuOrgResponse.getMessage());
}
String ervuId = ervuOrgResponse.getData().getErvuId(); String ervuId = ervuOrgResponse.getData().getErvuId();
if (!StringUtils.hasText(ervuId)) { if (!StringUtils.isValidUUID(ervuId)) {
throw new EsiaException("No ervuId for prnOid = " + prnOid); throw new EsiaException("No valid ervuId for prnOid = " + prnOid);
} }
return ervuId; return ervuId;
} }

View file

@ -1,6 +1,5 @@
package ru.micord.ervu.service.grid.impl; package ru.micord.ervu.service.grid.impl;
import java.time.LocalDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
@ -14,8 +13,10 @@ 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 ru.micord.ervu.exception.JournalException;
import ru.micord.ervu.exception.JsonParsingException; import ru.micord.ervu.exception.JsonParsingException;
import ru.micord.ervu.journal.JournalDto; import ru.micord.ervu.journal.JournalDto;
import ru.micord.ervu.journal.JournalFileData;
import ru.micord.ervu.journal.JournalFileDataRequest; import ru.micord.ervu.journal.JournalFileDataRequest;
import ru.micord.ervu.journal.JournalFileDataResponse; import ru.micord.ervu.journal.JournalFileDataResponse;
import ru.micord.ervu.journal.mapper.JournalDtoMapper; import ru.micord.ervu.journal.mapper.JournalDtoMapper;
@ -71,7 +72,13 @@ public class JournalInMemoryStaticGridLoadService implements
replyTopic, objectMapper.writeValueAsString(journalFileDataRequest)); replyTopic, objectMapper.writeValueAsString(journalFileDataRequest));
JournalFileDataResponse journalFileDataResponse = objectMapper.readValue(responseJsonString, JournalFileDataResponse journalFileDataResponse = objectMapper.readValue(responseJsonString,
JournalFileDataResponse.class); JournalFileDataResponse.class);
ervuJournalList = journalFileDataResponse.getFilesInfo().stream()
if (!journalFileDataResponse.isSuccess()) {
throw new JournalException(
"Failed to retrieve journal data from ervu: " + journalFileDataResponse.getMessage());
}
ervuJournalList = journalFileDataResponse.getData().getFilesInfo().stream()
.flatMap(fileInfo -> fileInfo.getPackFiles().stream() .flatMap(fileInfo -> fileInfo.getPackFiles().stream()
.filter(fileDetail -> DOCUMENT.equals(fileDetail.getType())) .filter(fileDetail -> DOCUMENT.equals(fileDetail.getType()))
.map(fileDetail -> JournalDtoMapper.mapToJournalDto(fileInfo, fileDetail)) .map(fileDetail -> JournalDtoMapper.mapToJournalDto(fileInfo, fileDetail))
@ -79,7 +86,7 @@ public class JournalInMemoryStaticGridLoadService implements
.toList(); .toList();
} }
catch (JsonProcessingException e) { catch (JsonProcessingException e) {
throw new JsonParsingException("Failed to parse JournalFileDataResponse.", e); throw new JournalException("Failed to parse journalFileDataResponse.", e);
} }
AtomicInteger counter = new AtomicInteger(1); AtomicInteger counter = new AtomicInteger(1);

View file

@ -1,10 +1,16 @@
package ru.micord.ervu.util; package ru.micord.ervu.util;
import java.util.regex.Pattern;
import static org.apache.commons.lang3.StringUtils.capitalize; import static org.apache.commons.lang3.StringUtils.capitalize;
import static org.apache.commons.lang3.StringUtils.substring; import static org.apache.commons.lang3.StringUtils.substring;
public final class StringUtils { public final class StringUtils {
private static final Pattern UUID_PATTERN = Pattern.compile(
"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
);
private StringUtils() { private StringUtils() {
} }
@ -18,4 +24,11 @@ public final class StringUtils {
middleNameInitial middleNameInitial
); );
} }
public static boolean isValidUUID(String uuid) {
if (uuid == null) {
return false;
}
return UUID_PATTERN.matcher(uuid).matches();
}
} }