SUPPORT-9605: init
This commit is contained in:
parent
84cfb974f4
commit
83a13cc8d6
7 changed files with 92 additions and 30 deletions
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue