SUPPORT-8474: Fix

This commit is contained in:
Eduard Tihomirov 2024-09-04 13:27:06 +03:00
parent bacf51e1d2
commit 79da353d9d
4 changed files with 294 additions and 19 deletions

View file

@ -0,0 +1,179 @@
package ervu.model;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
* @author Eduard Tihomirov
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
private String prnOid;
private String orgOid;
private Boolean chief;
private Boolean blocked;
private String position;
private String lastName;
private String firstName;
private String middleName;
@JsonFormat(pattern = "dd.MM.yyyy")
private Date birthDate;
private String gender;
private String citizenship;
private String snils;
private String inn;
private String birthPlace;
//Данные не доступны при входе юр лицом
private String email;
//Данные не доступны при входе юр лицом
private String phoneNumber;
public String getPrnOid() {
return prnOid;
}
public void setPrnOid(String prnOid) {
this.prnOid = prnOid;
}
public String getOrgOid() {
return orgOid;
}
public void setOrgOid(String orgOid) {
this.orgOid = orgOid;
}
public Boolean getChief() {
return chief;
}
public void setChief(Boolean chief) {
this.chief = chief;
}
public Boolean getBlocked() {
return blocked;
}
public void setBlocked(Boolean blocked) {
this.blocked = blocked;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getMiddleName() {
return middleName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getCitizenship() {
return citizenship;
}
public void setCitizenship(String citizenship) {
this.citizenship = citizenship;
}
public String getSnils() {
return snils;
}
public void setSnils(String snils) {
this.snils = snils;
}
public String getInn() {
return inn;
}
public void setInn(String inn) {
this.inn = inn;
}
public String getBirthPlace() {
return birthPlace;
}
public void setBirthPlace(String birthPlace) {
this.birthPlace = birthPlace;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}

View file

@ -43,9 +43,9 @@ public class OrgInfo implements Serializable {
private Boolean isLiquidated;
private EmployeeModel chiefInfo;
private Employee chiefInfo;
private EmployeeModel senderInfo;
private Employee senderInfo;
private String orgAgencyTerRange;
@ -163,19 +163,19 @@ public class OrgInfo implements Serializable {
this.contacts = contacts;
}
public EmployeeModel getChiefInfo() {
public Employee getChiefInfo() {
return chiefInfo;
}
public void setChiefInfo(EmployeeModel chiefInfo) {
public void setChiefInfo(Employee chiefInfo) {
this.chiefInfo = chiefInfo;
}
public EmployeeModel getSenderInfo() {
public Employee getSenderInfo() {
return senderInfo;
}
public void setSenderInfo(EmployeeModel senderInfo) {
public void setSenderInfo(Employee senderInfo) {
this.senderInfo = senderInfo;
}

View file

@ -14,8 +14,6 @@ public class PersonModel implements Serializable {
private static final long serialVersionUID = 1L;
private String prsId;
private String orgOid;
private String lastName;
@ -43,14 +41,6 @@ public class PersonModel implements Serializable {
//Данные не доступны при входе юр лицом
private String mobileNumber;
public String getPrsId() {
return prsId;
}
public void setPrsId(String prsId) {
this.prsId = prsId;
}
public String getOrgOid() {
return orgOid;
}

View file

@ -11,22 +11,31 @@ import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;
import java.util.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import ervu.converter.ResponseDataConverter;
import ervu.model.Brhs;
import ervu.model.Employee;
import ervu.model.OrgInfo;
import ervu.service.kafka.KafkaProducerErvuService;
import esia.config.EsiaConfig;
import esia.config.FormUrlencoded;
import esia.model.EmployeeModel;
import esia.model.EsiaTokenResponse;
import esia.model.OrganizationModel;
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.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.kafka.core.ConsumerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PostMapping;
/**
* @author Eduard Tihomirov
@ -45,6 +54,16 @@ public class EsiaAuthService {
@Autowired
private UlDataService ulDataService;
@Autowired
private KafkaProducerErvuService kafkaProducerErvuService;
@Autowired
private ConsumerFactory<String, Bytes> consumerFactory;
@Autowired
private ResponseDataConverter converter;
public String generateAuthCodeUrl() {
try {
String clientId = esiaConfig.getClientId();
@ -306,4 +325,91 @@ public class EsiaAuthService {
throw new RuntimeException(httpResponse.statusCode() + " " + httpResponse.body());
}
}
public String getErvuId(String accessToken, HttpServletResponse response) {
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(copyToEmployee(chiefModel));
orgInfo.setSenderInfo(copyToEmployee(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;
}
private Employee copyToEmployee(EmployeeModel employeeModel) {
Employee employee = new Employee();
employee.setBirthDate(employeeModel.getPerson().getBirthDate());
employee.setFirstName(employeeModel.getPerson().getFirstName());
employee.setLastName(employeeModel.getPerson().getLastName());
employee.setMiddleName(employeeModel.getPerson().getMiddleName());
employee.setBlocked(employeeModel.getBlocked());
employee.setChief(employeeModel.getChief());
employee.setCitizenship(employeeModel.getPerson().getCitizenship());
employee.setEmail(employeeModel.getPerson().getEmail());
employee.setPhoneNumber(employeeModel.getPerson().getMobileNumber());
employee.setBirthPlace(employeeModel.getPerson().getBirthPlace());
employee.setGender(employeeModel.getPerson().getGender());
employee.setInn(employeeModel.getPerson().getInn());
employee.setSnils(employeeModel.getPerson().getSnils());
employee.setPosition(employeeModel.getPosition());
employee.setPrnOid(employeeModel.getPrnOid());
employee.setOrgOid(employeeModel.getOrgOid());
return employee;
}
}