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>
|
||||
<artifactId>backend</artifactId>
|
||||
</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>
|
||||
<build>
|
||||
<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>
|
||||
<version>1.7.28</version>
|
||||
</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>
|
||||
</dependencyManagement>
|
||||
<repositories>
|
||||
|
|
|
|||
|
|
@ -1,2 +1,9 @@
|
|||
<?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