SUPPORT-8474: Fix
This commit is contained in:
parent
3248fe19e3
commit
ce58408c61
11 changed files with 8 additions and 341 deletions
|
|
@ -240,18 +240,6 @@
|
||||||
<groupId>ru.cg.webbpm.packages.base</groupId>
|
<groupId>ru.cg.webbpm.packages.base</groupId>
|
||||||
<artifactId>backend</artifactId>
|
<artifactId>backend</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>ru.cryptopro</groupId>
|
|
||||||
<artifactId>jcp</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.objsys.asn1j.runtime</groupId>
|
|
||||||
<artifactId>asn1rt</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>ru.cryptopro.jcp</groupId>
|
|
||||||
<artifactId>jcp-asn</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<finalName>${parent.artifactId}</finalName>
|
<finalName>${parent.artifactId}</finalName>
|
||||||
|
|
|
||||||
|
|
@ -1,168 +0,0 @@
|
||||||
package ervu.controller;
|
|
||||||
|
|
||||||
import java.time.Duration;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
|
||||||
|
|
||||||
import javax.servlet.http.Cookie;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
|
|
||||||
import ervu.converter.ResponseDataConverter;
|
|
||||||
import ervu.dto.FileInfoRequest;
|
|
||||||
import ervu.dto.JournalDto;
|
|
||||||
import ervu.model.Brhs;
|
|
||||||
import ervu.model.OrgInfo;
|
|
||||||
import ervu.service.kafka.KafkaProducerErvuService;
|
|
||||||
import esia.model.EmployeeModel;
|
|
||||||
import esia.model.OrganizationModel;
|
|
||||||
import esia.service.UlDataService;
|
|
||||||
import org.apache.kafka.clients.consumer.Consumer;
|
|
||||||
import org.apache.kafka.clients.consumer.ConsumerRecords;
|
|
||||||
import org.apache.kafka.common.utils.Bytes;
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.http.MediaType;
|
|
||||||
import org.springframework.kafka.core.ConsumerFactory;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author gulnaz
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
public class ErvuDataController {
|
|
||||||
|
|
||||||
private final KafkaProducerErvuService kafkaProducerErvuService;
|
|
||||||
private final ConsumerFactory<String, Bytes> consumerFactory;
|
|
||||||
private final ResponseDataConverter converter;
|
|
||||||
private final UlDataService ulDataService;
|
|
||||||
|
|
||||||
@Value("${kafka.ervu.journal.reply.topic}")
|
|
||||||
private String replyTopic;
|
|
||||||
|
|
||||||
public ErvuDataController(KafkaProducerErvuService kafkaProducerErvuService,
|
|
||||||
ConsumerFactory<String, Bytes> consumerFactory,
|
|
||||||
ResponseDataConverter converter, UlDataService ulDataService) {
|
|
||||||
this.kafkaProducerErvuService = kafkaProducerErvuService;
|
|
||||||
this.consumerFactory = consumerFactory;
|
|
||||||
this.converter = converter;
|
|
||||||
this.ulDataService = ulDataService;
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping(
|
|
||||||
value = "/get-data",
|
|
||||||
consumes = MediaType.APPLICATION_JSON_VALUE,
|
|
||||||
produces = MediaType.APPLICATION_JSON_VALUE
|
|
||||||
)
|
|
||||||
public JournalDto getData(@RequestBody FileInfoRequest fileInfoRequest) {
|
|
||||||
//TODO replace on interaction via ReplyingKafkaTemplate
|
|
||||||
kafkaProducerErvuService.sendRequest(fileInfoRequest);
|
|
||||||
AtomicReference<JournalDto> journalDto = new AtomicReference<>();
|
|
||||||
|
|
||||||
try (Consumer<String, Bytes> consumer =
|
|
||||||
consumerFactory.createConsumer("ul-journal", null)) {
|
|
||||||
consumer.subscribe(Collections.singletonList(replyTopic));
|
|
||||||
ConsumerRecords<String, Bytes> consumerRecords = consumer.poll(Duration.ofSeconds(10));
|
|
||||||
consumerRecords.forEach(record -> {
|
|
||||||
|
|
||||||
Object responseData = new Object();
|
|
||||||
/*
|
|
||||||
//первый вариант: если ответ придет в виде json, десериализатор для консьюмера надо
|
|
||||||
// поменять
|
|
||||||
FileInfoResponse responseData = record.value();
|
|
||||||
|
|
||||||
// второй вариант: если ответ придет в формате protobuf, необходимо сгенерировать бины
|
|
||||||
// перед этим по прото-файлам
|
|
||||||
SummonsResponseData responseData = SummonsResponseData.parseFrom(record.value().get());
|
|
||||||
*/
|
|
||||||
journalDto.set(converter.convert(responseData));
|
|
||||||
});
|
|
||||||
consumer.commitSync();
|
|
||||||
}
|
|
||||||
|
|
||||||
return journalDto.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping(
|
|
||||||
value = "ervu/get-id",
|
|
||||||
consumes = MediaType.APPLICATION_JSON_VALUE,
|
|
||||||
produces = MediaType.APPLICATION_JSON_VALUE
|
|
||||||
)
|
|
||||||
public void getId(HttpServletRequest request, HttpServletResponse response) {
|
|
||||||
//TODO replace on interaction via ReplyingKafkaTemplate
|
|
||||||
String accessToken = null;
|
|
||||||
Cookie[] cookies = request.getCookies();
|
|
||||||
if (cookies != null) {
|
|
||||||
for (Cookie cookie : cookies) {
|
|
||||||
if (cookie.getName().equals("access_token")) {
|
|
||||||
accessToken = cookie.getValue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
OrganizationModel organizationModel = ulDataService.getOrganizationModel(accessToken);
|
|
||||||
EmployeeModel employeeModel = ulDataService.getEmployeeModel(accessToken);
|
|
||||||
EmployeeModel chiefModel = ulDataService.getChiefEmployeeModel(accessToken);
|
|
||||||
OrgInfo orgInfo = copyToOrgInfo(organizationModel, employeeModel, chiefModel);
|
|
||||||
kafkaProducerErvuService.sendRequest(orgInfo);
|
|
||||||
|
|
||||||
try (Consumer<String, Bytes> consumer =
|
|
||||||
consumerFactory.createConsumer("ul-ervu-id", null)) {
|
|
||||||
consumer.subscribe(Collections.singletonList(replyTopic));
|
|
||||||
ConsumerRecords<String, Bytes> consumerRecords = consumer.poll(Duration.ofSeconds(10));
|
|
||||||
consumerRecords.forEach(record -> {
|
|
||||||
|
|
||||||
Object responseData = new Object();
|
|
||||||
/*
|
|
||||||
//первый вариант: если ответ придет в виде json, десериализатор для консьюмера надо
|
|
||||||
// поменять
|
|
||||||
FileInfoResponse responseData = record.value();
|
|
||||||
|
|
||||||
// второй вариант: если ответ придет в формате protobuf, необходимо сгенерировать бины
|
|
||||||
// перед этим по прото-файлам
|
|
||||||
SummonsResponseData responseData = SummonsResponseData.parseFrom(record.value().get());
|
|
||||||
*/
|
|
||||||
Cookie cookie = new Cookie("ervu_id", responseData.toString());
|
|
||||||
cookie.setHttpOnly(true);
|
|
||||||
cookie.setSecure(true);
|
|
||||||
cookie.setPath("/");
|
|
||||||
response.addCookie(cookie);
|
|
||||||
});
|
|
||||||
consumer.commitSync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private OrgInfo copyToOrgInfo(OrganizationModel organizationModel, EmployeeModel employeeModel, EmployeeModel chiefModel ) {
|
|
||||||
OrgInfo orgInfo = new OrgInfo();
|
|
||||||
orgInfo.setChiefInfo(chiefModel);
|
|
||||||
orgInfo.setSenderInfo(employeeModel);
|
|
||||||
orgInfo.setBrhs(
|
|
||||||
(Brhs[]) Arrays.stream(organizationModel.getBrhs()).map(brhsModel -> {
|
|
||||||
Brhs brhs = new Brhs();
|
|
||||||
brhs.setName(brhsModel.getName());
|
|
||||||
brhs.setBrhOid(brhsModel.getBrhOid());
|
|
||||||
brhs.setKpp(brhsModel.getKpp());
|
|
||||||
brhs.setLeg(brhsModel.getLeg());
|
|
||||||
brhs.setAddresses(brhsModel.getAddresses().getElements());
|
|
||||||
brhs.setContacts(brhsModel.getContacts().getElements());
|
|
||||||
return brhs;
|
|
||||||
}).toArray());
|
|
||||||
orgInfo.setAddresses(organizationModel.getAddresses().getElements());
|
|
||||||
orgInfo.setContacts(organizationModel.getContacts().getElements());
|
|
||||||
orgInfo.setInn(organizationModel.getInn());
|
|
||||||
orgInfo.setOrgFullName(organizationModel.getFullName());
|
|
||||||
orgInfo.setOrgTypeLeg(organizationModel.getLeg());
|
|
||||||
orgInfo.setKpp(organizationModel.getKpp());
|
|
||||||
orgInfo.setLiquidated(organizationModel.getIsLiquidated());
|
|
||||||
orgInfo.setOgrn(organizationModel.getOgrn());
|
|
||||||
orgInfo.setOrgOid(organizationModel.getOid());
|
|
||||||
orgInfo.setOrgShortName(organizationModel.getShortName());
|
|
||||||
orgInfo.setStaffCount(organizationModel.getStaffCount());
|
|
||||||
orgInfo.setBranchesCount((long) orgInfo.getBrhs().length);
|
|
||||||
orgInfo.setOrgType(organizationModel.getType());
|
|
||||||
orgInfo.setOrgAgencyTerRange(organizationModel.getAgencyTerRange());
|
|
||||||
orgInfo.setOrgAgencyType(organizationModel.getAgencyType());
|
|
||||||
return orgInfo;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
package ervu.converter;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import ervu.dto.JournalDto;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author gulnaz
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class ResponseDataConverter {
|
|
||||||
|
|
||||||
public JournalDto convert(Object responseData) {
|
|
||||||
// TODO когда будет известен формат ответа, заполнить
|
|
||||||
return new JournalDto(new ArrayList<>());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
package ervu.dto;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author ya.kuznetsova
|
|
||||||
*/
|
|
||||||
public record FileInfo(String directionDateTime, String fileName,
|
|
||||||
String fileForm, String sender, String status,
|
|
||||||
int numberRecordsSent, int numberRecordsReceived) {
|
|
||||||
}
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
||||||
package ervu.dto;
|
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author ya.kuznetsova
|
|
||||||
*/
|
|
||||||
public record FileInfoRequest(OrgInfo orgInfo, SenderInfo senderInfo) {
|
|
||||||
|
|
||||||
public record OrgInfo(String orgName,
|
|
||||||
String orgTypeCode,
|
|
||||||
String orgTypeName,
|
|
||||||
String ogrn,
|
|
||||||
String inn,
|
|
||||||
String kpp) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public record SenderInfo(String senderLastName,
|
|
||||||
String senderFirstName,
|
|
||||||
String senderMiddleName,
|
|
||||||
String senderRoleCode,
|
|
||||||
String senderRoleName,
|
|
||||||
String snils,
|
|
||||||
String idERN,
|
|
||||||
Document document,
|
|
||||||
Param params) {
|
|
||||||
|
|
||||||
public record Document(String series,
|
|
||||||
String number,
|
|
||||||
LocalDate issueDate) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public record Param(Range range) {
|
|
||||||
public record Range(LocalDateTime to,
|
|
||||||
LocalDateTime from) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
package ervu.dto;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author ya.kuznetsova
|
|
||||||
*/
|
|
||||||
|
|
||||||
public record FileInfoResponse(FileInfoRequest.OrgInfo orgInfo, FileInfo[] fileInfo) {
|
|
||||||
|
|
||||||
// TODO ERVU-78 проверить структуру по списку файлов
|
|
||||||
public record FileInfo(String s3FileName,
|
|
||||||
String status) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
package ervu.dto;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author ya.kuznetsova
|
|
||||||
*/
|
|
||||||
public record JournalDto(List<FileInfo> fileInfoList) {
|
|
||||||
}
|
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
package ervu.service.kafka;
|
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import ervu.dto.FileInfoRequest;
|
|
||||||
import ervu.model.OrgInfo;
|
|
||||||
import esia.model.OrganizationModel;
|
|
||||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.kafka.core.KafkaTemplate;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author ya.kuznetsova
|
|
||||||
*/
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class KafkaProducerErvuService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
@Qualifier("ervu")
|
|
||||||
KafkaTemplate<String, Object> kafkaTemplate;
|
|
||||||
|
|
||||||
@Value("${kafka.ervu.request.topic}")
|
|
||||||
private String requestTopic;
|
|
||||||
@Value("${kafka.ervu.header.class}")
|
|
||||||
private String headerClass;
|
|
||||||
|
|
||||||
public void sendRequest(FileInfoRequest request) {
|
|
||||||
ProducerRecord<String, Object> record = new ProducerRecord<>(requestTopic,
|
|
||||||
UUID.randomUUID().toString(), request);
|
|
||||||
record.headers().add("class", headerClass.getBytes(StandardCharsets.UTF_8));
|
|
||||||
kafkaTemplate.send(record);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sendRequest(OrgInfo request) {
|
|
||||||
ProducerRecord<String, Object> record = new ProducerRecord<>(requestTopic,
|
|
||||||
UUID.randomUUID().toString(), request);
|
|
||||||
record.headers().add("class", headerClass.getBytes(StandardCharsets.UTF_8));
|
|
||||||
kafkaTemplate.send(record);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
<jboss-deployment-structure>
|
|
||||||
<deployment>
|
|
||||||
<dependencies>
|
|
||||||
<module name="ru.CryptoPro.JCP.ASN"/>
|
|
||||||
<module name="ru.CryptoPro.JCP"/>
|
|
||||||
<module name="com.objsys.asn1j.runtime"/>
|
|
||||||
</dependencies>
|
|
||||||
</deployment>
|
|
||||||
</jboss-deployment-structure>
|
|
||||||
18
pom.xml
18
pom.xml
|
|
@ -356,24 +356,6 @@
|
||||||
<artifactId>slf4j-simple</artifactId>
|
<artifactId>slf4j-simple</artifactId>
|
||||||
<version>1.7.28</version>
|
<version>1.7.28</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>ru.cryptopro</groupId>
|
|
||||||
<artifactId>jcp</artifactId>
|
|
||||||
<version>2.0.41940-A</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>ru.cryptopro.jcp</groupId>
|
|
||||||
<artifactId>jcp-asn</artifactId>
|
|
||||||
<version>2.0.41940-A</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.objsys.asn1j.runtime</groupId>
|
|
||||||
<artifactId>asn1rt</artifactId>
|
|
||||||
<version>2.0.41940-A</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
<repositories>
|
<repositories>
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<ns2:roles xmlns:ns2="http://cg.ru/web-bpm/bpm-role"/>
|
<ns2:roles xmlns:ns2="http://cg.ru/web-bpm/bpm-role">
|
||||||
|
<role>
|
||||||
|
<name>Юридическое лицо</name>
|
||||||
|
</role>
|
||||||
|
<role>
|
||||||
|
<name>Администратор</name>
|
||||||
|
</role>
|
||||||
|
</ns2:roles>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue