SUPPORT-8381: refactor according new json messages trading

This commit is contained in:
Alexandr Shalaginov 2024-07-22 12:11:41 +03:00
parent 32a5323d1c
commit 67141dfa72
14 changed files with 587 additions and 73 deletions

View file

@ -10,7 +10,6 @@ import java.net.http.HttpResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
@ -18,17 +17,10 @@ import org.springframework.web.multipart.MultipartFile;
* @author Alexandr Shalaginov
*/
@Component
public class EmployeeInfoWebDavClient {
private static final Logger logger = LoggerFactory.getLogger(EmployeeInfoWebDavClient.class);
public class FileUploadWebDavClient {
private static final Logger logger = LoggerFactory.getLogger(FileUploadWebDavClient.class);
@Value("${file.webdav.upload.url:http://localhost:5757}")
private String url;
@Value("${file.webdav.upload.username}")
private String username;
@Value("${file.webdav.upload.password}")
private String password;
public boolean webDavUploadFile(String filename, MultipartFile multipartFile) {
public boolean webDavUploadFile(String url, String username, String password, MultipartFile multipartFile) {
try {
HttpClient httpClient = HttpClient.newBuilder()
.authenticator(new Authenticator() {
@ -39,7 +31,7 @@ public class EmployeeInfoWebDavClient {
})
.build();
HttpRequest httpRequest = HttpRequest.newBuilder().uri(URI.create(this.url + "/" + filename))
HttpRequest httpRequest = HttpRequest.newBuilder().uri(URI.create(url))
.PUT(HttpRequest.BodyPublishers.ofByteArray(multipartFile.getBytes())).build();
HttpResponse<String> response = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());

View file

@ -8,12 +8,14 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import ru.cg.webbpm.modules.webkit.beans.Behavior;
/**
* @author Alexandr Shalaginov
*/
@RestController
public class EmployeeInfoFileUploadController {
private final EmployeeInfoFileUploadService fileUploadService;
public class EmployeeInfoFileUploadController extends Behavior {
public EmployeeInfoFileUploadService fileUploadService;
public EmployeeInfoFileUploadController(EmployeeInfoFileUploadService fileUploadService) {
this.fileUploadService = fileUploadService;

View file

@ -0,0 +1,24 @@
package ervu.service.fileupload;
/**
* @author Alexandr Shalaginov
*/
public enum EmployeeInfoFileFormType {
EMPLOYMENT_DISMISSAL_INFO("9", "Сведение о приеме на работу (увольнении), зачислении в образовательное учреждение (или отчислении)"),
CHANGE_INFO("2", "Изменения сведений сотрудников, необходимых для ведения воинского учета");
private final String filePatternCode;
private final String filePatternName;
EmployeeInfoFileFormType(String filePatternCode, String filePatternName) {
this.filePatternCode = filePatternCode;
this.filePatternName = filePatternName;
}
public String getFilePatternCode() {
return filePatternCode;
}
public String getFilePatternName() {
return filePatternName;
}
}

View file

@ -1,21 +1,23 @@
package ervu.service.fileupload;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import ervu.client.fileupload.EmployeeInfoWebDavClient;
import ervu.client.fileupload.FileUploadWebDavClient;
import ervu.service.fileupload.model.EmployeeInfoKafkaMessage;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import ru.cg.webbpm.modules.security.api.runtime.SecurityContext;
import ru.cg.webbpm.modules.standard_annotations.editor.Visible;
import ru.cg.webbpm.modules.standard_annotations.validation.NotNull;
/**
* @author Alexandr Shalaginov
@ -24,28 +26,42 @@ import ru.cg.webbpm.modules.security.api.runtime.SecurityContext;
public class EmployeeInfoFileUploadService {
private static final Logger logger = LoggerFactory.getLogger(EmployeeInfoFileUploadService.class);
private final EmployeeInfoWebDavClient fileWebDavUploadClient;
@Visible
@NotNull
public EmployeeInfoFileFormType formType;
private final FileUploadWebDavClient fileWebDavUploadClient;
private final EmployeeInfoKafkaMessageService employeeInfoKafkaMessageService;
private final KafkaTemplate<String, String> kafkaTemplate;
@Value("${kafka.send.message.topic.name:employee-files}")
private String kafkaTopicName;
@Value("${file.webdav.upload.url:http://localhost:5757}")
private String url;
@Value("${file.webdav.upload.username}")
private String username;
@Value("${file.webdav.upload.password}")
private String password;
public EmployeeInfoFileUploadService(
EmployeeInfoWebDavClient fileWebDavUploadClient,
KafkaTemplate<String, String> kafkaTemplate) {
FileUploadWebDavClient fileWebDavUploadClient,
EmployeeInfoKafkaMessageService employeeInfoKafkaMessageService, KafkaTemplate<String, String> kafkaTemplate) {
this.fileWebDavUploadClient = fileWebDavUploadClient;
this.employeeInfoKafkaMessageService = employeeInfoKafkaMessageService;
this.kafkaTemplate = kafkaTemplate;
}
public boolean saveEmployeeInformationFile(MultipartFile multipartFile) {
String newFilename = getNewFilename(multipartFile.getOriginalFilename());
String fileUploadUrl = this.url + "/" + getNewFilename(multipartFile.getOriginalFilename());
String departureDateTime = getDepartureDateTime();
if (this.fileWebDavUploadClient.webDavUploadFile(newFilename, multipartFile)) {
if (this.fileWebDavUploadClient.webDavUploadFile(url, username, password, multipartFile)) {
String jsonMessage = getJsonKafkaMessage(
new KafkaMessage(
getCurrentUsername(),
newFilename,
multipartFile.getOriginalFilename()
employeeInfoKafkaMessageService.getKafkaMessage(
fileUploadUrl,
multipartFile.getOriginalFilename(),
formType,
departureDateTime
)
);
return sendMessage(jsonMessage);
@ -81,21 +97,17 @@ public class EmployeeInfoFileUploadService {
return filename.substring(lastIndexOf);
}
private String getJsonKafkaMessage(KafkaMessage kafkaMessage) {
private String getJsonKafkaMessage(EmployeeInfoKafkaMessage employeeInfoKafkaMessage) {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.writeValueAsString(kafkaMessage);
return mapper.writeValueAsString(employeeInfoKafkaMessage);
}
catch (JsonProcessingException e) {
throw new RuntimeException(String.format("Fail get json from: %s", kafkaMessage), e);
throw new RuntimeException(String.format("Fail get json from: %s", employeeInfoKafkaMessage), e);
}
}
private String getCurrentUsername() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null && auth.isAuthenticated()) {
return auth.getName();
}
return null;
private String getDepartureDateTime() {
return LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"));
}
}

View file

@ -0,0 +1,75 @@
package ervu.service.fileupload;
import ervu.service.fileupload.model.*;
import esia.model.MillitaryRegistrationPersonModel;
import esia.model.OrganizationModel;
import esia.service.UlDataService;
import org.springframework.stereotype.Service;
/**
* @author Alexandr Shalaginov
*/
@Service
public class EmployeeInfoKafkaMessageService {
private final UlDataService ulDataService;
public EmployeeInfoKafkaMessageService(UlDataService ulDataService) {
this.ulDataService = ulDataService;
}
public EmployeeInfoKafkaMessage getKafkaMessage(String fileNameBase, String fileName,
EmployeeInfoFileFormType formType, String departureDateTime) {
return new EmployeeInfoKafkaMessage(
getOrgInfo(),
getSenderInfo(),
getFileInfo(
fileNameBase,
fileName,
formType,
departureDateTime
)
);
}
private OrgInfo getOrgInfo() {
OrganizationModel organizationModel = ulDataService.getOrganizationModel();
return new OrgInfo(
organizationModel.getShortName(),
organizationModel.getLeg(),
organizationModel.getLegName(),
organizationModel.getOgrn(),
organizationModel.getInn(),
organizationModel.getKpp()
);
}
private SenderInfo getSenderInfo() {
MillitaryRegistrationPersonModel personModel = ulDataService.getPersonModel();
return new SenderInfo(
personModel.getLastName(),
personModel.getFirstName(),
personModel.getMiddleName(),
personModel.getBirthday(),
personModel.getRoleCode(),
personModel.getRoleName(),
personModel.getSnils(),
personModel.getIdERN(),
new PassportInfo(
personModel.getPassportSeries(),
personModel.getPassportNumber(),
personModel.getPassportIssueDate()
)
);
}
private FileInfo getFileInfo(String fileNameBase, String fileName,
EmployeeInfoFileFormType formType, String departureDateTime) {
return new FileInfo(
fileNameBase,
fileName,
formType.getFilePatternCode(),
formType.getFilePatternName(),
departureDateTime
);
}
}

View file

@ -1,37 +0,0 @@
package ervu.service.fileupload;
/**
* @author Alexandr Shalaginov
*/
class KafkaMessage {
private final String username;
private final String filename;
private final String originalFilename;
public KafkaMessage(String username, String filename, String originalFilename) {
this.username = username;
this.filename = filename;
this.originalFilename = originalFilename;
}
public String getUsername() {
return username;
}
public String getFilename() {
return filename;
}
public String getOriginalFilename() {
return originalFilename;
}
@Override
public String toString() {
return "KafkaMessage{" +
"username='" + username + '\'' +
", filename='" + filename + '\'' +
", originalFilename='" + originalFilename + '\'' +
'}';
}
}

View file

@ -0,0 +1,54 @@
package ervu.service.fileupload.model;
import java.util.Objects;
/**
* @author Alexandr Shalaginov
*/
public class EmployeeInfoKafkaMessage {
private final OrgInfo orgInfo;
private final SenderInfo senderInfo;
private final FileInfo fileInfo;
public EmployeeInfoKafkaMessage(OrgInfo orgInfo, SenderInfo senderInfo, FileInfo fileInfo) {
this.orgInfo = orgInfo;
this.senderInfo = senderInfo;
this.fileInfo = fileInfo;
}
public OrgInfo getOrgInfo() {
return orgInfo;
}
public SenderInfo getSenderInfo() {
return senderInfo;
}
public FileInfo getFileInfo() {
return fileInfo;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
EmployeeInfoKafkaMessage that = (EmployeeInfoKafkaMessage) o;
return Objects.equals(orgInfo, that.orgInfo) && Objects.equals(senderInfo,
that.senderInfo
) && Objects.equals(fileInfo, that.fileInfo);
}
@Override
public int hashCode() {
return Objects.hash(orgInfo, senderInfo, fileInfo);
}
@Override
public String toString() {
return "KafkaMessage{" +
"orgInfo=" + orgInfo +
", senderInfo=" + senderInfo +
", fileInfo=" + fileInfo +
'}';
}
}

View file

@ -0,0 +1,73 @@
package ervu.service.fileupload.model;
import java.util.Objects;
/**
* @author Alexandr Shalaginov
*/
public class FileInfo {
private final String fileNameBase;
private final String fileName;
private final String filePatternCode;
private final String filePatternName;
private final String departureDateTime;
public FileInfo(String fileNameBase, String fileName, String filePatternCode,
String filePatternName, String departureDateTime) {
this.fileNameBase = fileNameBase;
this.fileName = fileName;
this.filePatternCode = filePatternCode;
this.filePatternName = filePatternName;
this.departureDateTime = departureDateTime;
}
public String getFileNameBase() {
return fileNameBase;
}
public String getFileName() {
return fileName;
}
public String getFilePatternCode() {
return filePatternCode;
}
public String getFilePatternName() {
return filePatternName;
}
public String getDepartureDateTime() {
return departureDateTime;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
FileInfo fileInfo = (FileInfo) o;
return Objects.equals(fileNameBase, fileInfo.fileNameBase) && Objects.equals(
fileName, fileInfo.fileName) && Objects.equals(filePatternCode,
fileInfo.filePatternCode
) && Objects.equals(filePatternName, fileInfo.filePatternName)
&& Objects.equals(departureDateTime, fileInfo.departureDateTime);
}
@Override
public int hashCode() {
return Objects.hash(fileNameBase, fileName, filePatternCode, filePatternName,
departureDateTime
);
}
@Override
public String toString() {
return "FileInfo{" +
"fileNameBase='" + fileNameBase + '\'' +
", fileName='" + fileName + '\'' +
", filePatternCode='" + filePatternCode + '\'' +
", filePatternName='" + filePatternName + '\'' +
", departureDateTime='" + departureDateTime + '\'' +
'}';
}
}

View file

@ -0,0 +1,78 @@
package ervu.service.fileupload.model;
import java.util.Objects;
/**
* @author Alexandr Shalaginov
*/
public class OrgInfo {
private final String orgName;
private final String orgTypeCode;
private final String orgTypeName;
private final String ogrn;
private final String inn;
private final String kpp;
public OrgInfo(String orgName, String orgTypeCode, String orgTypeName, String ogrn, String inn,
String kpp) {
this.orgName = orgName;
this.orgTypeCode = orgTypeCode;
this.orgTypeName = orgTypeName;
this.ogrn = ogrn;
this.inn = inn;
this.kpp = kpp;
}
public String getOrgName() {
return orgName;
}
public String getOrgTypeCode() {
return orgTypeCode;
}
public String getOrgTypeName() {
return orgTypeName;
}
public String getOgrn() {
return ogrn;
}
public String getInn() {
return inn;
}
public String getKpp() {
return kpp;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
OrgInfo orgInfo = (OrgInfo) o;
return Objects.equals(orgName, orgInfo.orgName) && Objects.equals(orgTypeCode,
orgInfo.orgTypeCode
) && Objects.equals(orgTypeName, orgInfo.orgTypeName) && Objects.equals(ogrn,
orgInfo.ogrn
) && Objects.equals(inn, orgInfo.inn) && Objects.equals(kpp, orgInfo.kpp);
}
@Override
public int hashCode() {
return Objects.hash(orgName, orgTypeCode, orgTypeName, ogrn, inn, kpp);
}
@Override
public String toString() {
return "OrgInfo{" +
"orgName='" + orgName + '\'' +
", orgTypeCode='" + orgTypeCode + '\'' +
", orgTypeName='" + orgTypeName + '\'' +
", ogrn='" + ogrn + '\'' +
", inn='" + inn + '\'' +
", kpp='" + kpp + '\'' +
'}';
}
}

View file

@ -0,0 +1,54 @@
package ervu.service.fileupload.model;
import java.util.Objects;
/**
* @author Alexandr Shalaginov
*/
public class PassportInfo {
private final String series;
private final String number;
private final String issueDate;
public PassportInfo(String series, String number, String issueDate) {
this.series = series;
this.number = number;
this.issueDate = issueDate;
}
public String getSeries() {
return series;
}
public String getNumber() {
return number;
}
public String getIssueDate() {
return issueDate;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PassportInfo that = (PassportInfo) o;
return Objects.equals(series, that.series) && Objects.equals(number,
that.number
) && Objects.equals(issueDate, that.issueDate);
}
@Override
public int hashCode() {
return Objects.hash(series, number, issueDate);
}
@Override
public String toString() {
return "PassportInfo{" +
"series='" + series + '\'' +
", number='" + number + '\'' +
", issueDate='" + issueDate + '\'' +
'}';
}
}

View file

@ -0,0 +1,106 @@
package ervu.service.fileupload.model;
import java.util.Objects;
/**
* @author Alexandr Shalaginov
*/
public class SenderInfo {
private final String senderLastName;
private final String senderFirstName;
private final String senderMiddleName;
private final String birthDate;
private final String senderRoleCode;
private final String senderRoleName;
private final String snils;
private final String idERN;
private final PassportInfo document;
public SenderInfo(String senderLastName, String senderFirstName, String senderMiddleName,
String birthDate, String senderRoleCode, String senderRoleName, String snils, String idERN,
PassportInfo document) {
this.senderLastName = senderLastName;
this.senderFirstName = senderFirstName;
this.senderMiddleName = senderMiddleName;
this.birthDate = birthDate;
this.senderRoleCode = senderRoleCode;
this.senderRoleName = senderRoleName;
this.snils = snils;
this.idERN = idERN;
this.document = document;
}
public String getSenderLastName() {
return senderLastName;
}
public String getSenderFirstName() {
return senderFirstName;
}
public String getSenderMiddleName() {
return senderMiddleName;
}
public String getBirthDate() {
return birthDate;
}
public String getSenderRoleCode() {
return senderRoleCode;
}
public String getSenderRoleName() {
return senderRoleName;
}
public String getSnils() {
return snils;
}
public String getIdERN() {
return idERN;
}
public PassportInfo getDocument() {
return document;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SenderInfo that = (SenderInfo) o;
return Objects.equals(senderLastName, that.senderLastName) && Objects.equals(
senderFirstName, that.senderFirstName) && Objects.equals(senderMiddleName,
that.senderMiddleName
) && Objects.equals(birthDate, that.birthDate) && Objects.equals(
senderRoleCode, that.senderRoleCode) && Objects.equals(senderRoleName,
that.senderRoleName
) && Objects.equals(snils, that.snils) && Objects.equals(idERN, that.idERN)
&& Objects.equals(document, that.document);
}
@Override
public int hashCode() {
return Objects.hash(senderLastName, senderFirstName, senderMiddleName, birthDate,
senderRoleCode,
senderRoleName, snils, idERN, document
);
}
@Override
public String toString() {
return "SenderInfo{" +
"senderLastName='" + senderLastName + '\'' +
", senderFirstName='" + senderFirstName + '\'' +
", senderMiddleName='" + senderMiddleName + '\'' +
", birthDate='" + birthDate + '\'' +
", senderRoleCode='" + senderRoleCode + '\'' +
", senderRoleName='" + senderRoleName + '\'' +
", snils='" + snils + '\'' +
", idERN='" + idERN + '\'' +
", document=" + document +
'}';
}
}

View file

@ -9,6 +9,8 @@ public class MillitaryRegistrationPersonModel extends PersonModel {
private String email;
private String mobileNumber;
private String roleCode;
private String roleName;
public String getEmail() {
return email;
@ -25,4 +27,20 @@ public class MillitaryRegistrationPersonModel extends PersonModel {
public void setMobileNumber(String mobileNumber) {
this.mobileNumber = mobileNumber;
}
public String getRoleCode() {
return roleCode;
}
public void setRoleCode(String roleCode) {
this.roleCode = roleCode;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
}

View file

@ -20,6 +20,7 @@ public class OrganizationModel implements Serializable {
private String ogrn;
private String leg;
private String legName;
private String kpp;
@ -128,4 +129,12 @@ public class OrganizationModel implements Serializable {
public void setEmail(String email) {
this.email = email;
}
public String getLegName() {
return legName;
}
public void setLegName(String legName) {
this.legName = legName;
}
}

View file

@ -18,6 +18,12 @@ public class PersonModel implements Serializable {
private String firstName;
private String middleName;
private String birthday;
private String snils;
private String idERN;
private String passportSeries;
private String passportNumber;
private String passportIssueDate;
public String getPrsId() {
return prsId;
@ -58,4 +64,52 @@ public class PersonModel implements Serializable {
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getSnils() {
return snils;
}
public void setSnils(String snils) {
this.snils = snils;
}
public String getIdERN() {
return idERN;
}
public void setIdERN(String idERN) {
this.idERN = idERN;
}
public String getPassportSeries() {
return passportSeries;
}
public void setPassportSeries(String passportSeries) {
this.passportSeries = passportSeries;
}
public String getPassportNumber() {
return passportNumber;
}
public void setPassportNumber(String passportNumber) {
this.passportNumber = passportNumber;
}
public String getPassportIssueDate() {
return passportIssueDate;
}
public void setPassportIssueDate(String passportIssueDate) {
this.passportIssueDate = passportIssueDate;
}
}