SUPPORT-8474: Fix

This commit is contained in:
Eduard Tihomirov 2024-09-05 16:13:28 +03:00
parent 3248fe19e3
commit ce58408c61
11 changed files with 8 additions and 341 deletions

View file

@ -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>

View file

@ -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;
}
}

View file

@ -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<>());
}
}

View file

@ -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) {
}

View file

@ -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) {
}
}
}
}

View file

@ -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) {
}
}

View file

@ -1,9 +0,0 @@
package ervu.dto;
import java.util.List;
/**
* @author ya.kuznetsova
*/
public record JournalDto(List<FileInfo> fileInfoList) {
}

View file

@ -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);
}
}

View file

@ -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
View file

@ -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>

View file

@ -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>