Commit 73b792cc authored by Denis Ligin's avatar Denis Ligin
parents a26bb399 b6fbd590
Pipeline #338 canceled with stage
...@@ -3,6 +3,7 @@ package kz.project.printedFormsService.data.dto; ...@@ -3,6 +3,7 @@ package kz.project.printedFormsService.data.dto;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import kz.project.printedFormsService.data.entity.TemplateEntity; import kz.project.printedFormsService.data.entity.TemplateEntity;
import kz.project.printedFormsService.data.entity.TemplateEntityVersion;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
...@@ -57,7 +58,7 @@ public class TemplateDto { ...@@ -57,7 +58,7 @@ public class TemplateDto {
.code(te.getCode()) .code(te.getCode())
.status(te.getStatus()) .status(te.getStatus())
.templateFile(new TemplateFileDataDto(te.getTemplate().getId(),te.getTemplate().getName(), te.getTemplate().getData())) .templateFile(new TemplateFileDataDto(te.getTemplate().getId(),te.getTemplate().getName(), te.getTemplate().getData()))
.headerFile(te.getTempleateHeader()!=null?new TemplateFileDataDto(te.getTempleateHeader().getId(),te.getTempleateHeader().getName(), te.getTempleateHeader().getData()):null) .headerFile(te.getTemplateHeader()!=null?new TemplateFileDataDto(te.getTemplateHeader().getId(),te.getTemplateHeader().getName(), te.getTemplateHeader().getData()):null)
.type(te.getType().getCode()) .type(te.getType().getCode())
.project(te.getProject()) .project(te.getProject())
.version(te.getVersion()) .version(te.getVersion())
...@@ -72,7 +73,7 @@ public class TemplateDto { ...@@ -72,7 +73,7 @@ public class TemplateDto {
.status(te.getStatus()) .status(te.getStatus())
.project(te.getProject()) .project(te.getProject())
.templateFile(new TemplateFileDataDto(te.getTemplate().getId(),te.getTemplate().getName(), te.getTemplate().getData())) .templateFile(new TemplateFileDataDto(te.getTemplate().getId(),te.getTemplate().getName(), te.getTemplate().getData()))
.headerFile(te.getTempleateHeader()!=null?new TemplateFileDataDto(te.getTempleateHeader().getId(),te.getTempleateHeader().getName(), te.getTempleateHeader().getData()):null) .headerFile(te.getTemplateHeader()!=null?new TemplateFileDataDto(te.getTemplateHeader().getId(),te.getTemplateHeader().getName(), te.getTemplateHeader().getData()):null)
.type(te.getType().getCode()) .type(te.getType().getCode())
.version(te.getVersion()) .version(te.getVersion())
.build(); .build();
...@@ -99,6 +100,24 @@ public class TemplateDto { ...@@ -99,6 +100,24 @@ public class TemplateDto {
return new PageImpl<>(dtos, PageRequest.of(all.getNumber(),all.getSize()),all.getTotalElements()); return new PageImpl<>(dtos, PageRequest.of(all.getNumber(),all.getSize()),all.getTotalElements());
} }
public static Page<TemplateDto> toDtoList(Page<TemplateEntity> all, Page<TemplateEntityVersion> versions){
if(all.getContent() == null && versions.getContent() == null) return null;
List<TemplateDto> dtos = new ArrayList<>();
if (all.getContent() != null){
for (TemplateEntity te:all.getContent()) {
dtos.add(TemplateDto.toDtoAll(te));
}
}
if (versions.getContent() != null){
for (TemplateEntityVersion ver:versions.getContent()) {
dtos.add(TemplateDto.toDtoAll(new TemplateEntity(ver)));
}
}
return new PageImpl<>(dtos, PageRequest.of(all.getNumber(),all.getSize()),all.getTotalElements());
}
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
......
...@@ -46,7 +46,7 @@ public class TemplateResponseDto { ...@@ -46,7 +46,7 @@ public class TemplateResponseDto {
.status(te.getStatus()) .status(te.getStatus())
.project(te.getProject()) .project(te.getProject())
.templateFile(new TemplateDto.TemplateFileDataDto(te.getTemplate().getId(), te.getTemplate().getName(), te.getTemplate().getData())) .templateFile(new TemplateDto.TemplateFileDataDto(te.getTemplate().getId(), te.getTemplate().getName(), te.getTemplate().getData()))
.headerFile(te.getTempleateHeader() != null ? new TemplateDto.TemplateFileDataDto(te.getTempleateHeader().getId(), te.getTempleateHeader().getName(), te.getTempleateHeader().getData()) : null) .headerFile(te.getTemplateHeader() != null ? new TemplateDto.TemplateFileDataDto(te.getTemplateHeader().getId(), te.getTemplateHeader().getName(), te.getTemplateHeader().getData()) : null)
.type(te.getType().getCode()) .type(te.getType().getCode())
.version(te.getVersion()) .version(te.getVersion())
.build(); .build();
......
...@@ -2,11 +2,9 @@ package kz.project.printedFormsService.data.entity; ...@@ -2,11 +2,9 @@ package kz.project.printedFormsService.data.entity;
import jakarta.persistence.*; import jakarta.persistence.*;
import kz.project.printedFormsService.data.entity.dict.DTemplateType; import kz.project.printedFormsService.data.entity.dict.DTemplateType;
import lombok.Data;
@Entity @Entity
@Table(name = "template", schema = "template_schema") @Table(name = "template", schema = "template_schema")
@Data
public class TemplateEntity { public class TemplateEntity {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
...@@ -19,9 +17,130 @@ public class TemplateEntity { ...@@ -19,9 +17,130 @@ public class TemplateEntity {
@ManyToOne @ManyToOne
private DTemplateType type; private DTemplateType type;
@OneToOne @OneToOne
private TemplateFileInfoEntity template; private TemplateFileInfoEntity template;
@OneToOne @OneToOne
private TemplateFileInfoEntity templeateHeader; private TemplateFileInfoEntity templateHeader;
public TemplateEntity() {}
public TemplateEntity(TemplateEntityVersion version){
this.id = version.getId();
this.code = version.getCode();
this.name = version.getName();
this.status = version.getStatus();
this.project = version.getProject();
this.version = version.getVersion();
this.type = version.getType();
this.template = version.getTemplate();
this.templateHeader = version.getTemplateHeader();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getStatus() {
return status;
}
public void setStatus(Boolean status) {
this.status = status;
}
public String getProject() {
return project;
}
public void setProject(String project) {
this.project = project;
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
public DTemplateType getType() {
return type;
}
public void setType(DTemplateType type) {
this.type = type;
}
public TemplateFileInfoEntity getTemplate() {
return template;
}
public void setTemplate(TemplateFileInfoEntity template) {
this.template = template;
}
public TemplateFileInfoEntity getTemplateHeader() {
return templateHeader;
}
public void setTemplateHeader(TemplateFileInfoEntity templateHeader) {
this.templateHeader = templateHeader;
}
@Override
public boolean equals(Object o){
if (this == o) return true;
if (o == null || !(o instanceof TemplateEntity)) return false;
TemplateEntity other = (TemplateEntity) o;
/* Примитивы */
boolean isCodeEqual = this.code == other.getCode() || (this.code != null && this.code.equals(other.getCode()));
boolean isNameEqual = this.name == other.getName() || (this.name != null && this.name.equals(other.getName()));
boolean isStatusEqual = this.status == other.getStatus() || (this.status != null && this.status.equals(other.getStatus()));
boolean isProjectEqual = this.project == other.getProject() || (this.project != null && this.project.equals(other.getProject()));
/* Сложные типы */
boolean isTypeEqual = this.type == other.getType() || (this.type != null && this.type.equals(other.getType()));
boolean isTemplateEqual = this.template == other.getTemplate() || (this.template != null && this.template.equals(other.getTemplate()));
boolean isHeaderEqual = this.templateHeader == other.getTemplateHeader() || (this.templateHeader != null && this.templateHeader.equals(other.getTemplateHeader()));
return isCodeEqual && isNameEqual && isStatusEqual && isProjectEqual && isTypeEqual && isTemplateEqual && isHeaderEqual;
}
@Override
public int hashCode(){
int hash = 17;
if (code != null) hash = 31 * hash * code.hashCode();
if (name != null) hash = 31 * hash * name.hashCode();
if (status != null) hash = 31 * hash * status.hashCode();
if (project != null) hash = 31 * hash * project.hashCode();
if (type != null) hash = 31 * hash * type.hashCode();
if (template != null) hash = 31 * hash * template.hashCode();
if (templateHeader != null) hash = 31 * hash * templateHeader.hashCode();
return hash;
}
} }
package kz.project.printedFormsService.data.entity;
import jakarta.persistence.*;
import kz.project.printedFormsService.data.entity.dict.DTemplateType;
@Entity
@Table(name = "template_version", schema = "template_schema")
public class TemplateEntityVersion {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String code;
private String name;
private Boolean status;
private String project;
private Integer version;
@ManyToOne
private DTemplateType type;
@OneToOne
private TemplateFileInfoEntity template;
@OneToOne
private TemplateFileInfoEntity templateHeader;
public TemplateEntityVersion() {}
public TemplateEntityVersion(TemplateEntity entity) {
this.code = entity.getCode();
this.name = entity.getName();
this.status = entity.getStatus();
this.project = entity.getProject();
this.version = entity.getVersion();
this.type = entity.getType();
this.template = entity.getTemplate();
this.templateHeader = entity.getTemplateHeader();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getStatus() {
return status;
}
public void setStatus(Boolean status) {
this.status = status;
}
public String getProject() {
return project;
}
public void setProject(String project) {
this.project = project;
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
public DTemplateType getType() {
return type;
}
public void setType(DTemplateType type) {
this.type = type;
}
public TemplateFileInfoEntity getTemplate() {
return template;
}
public void setTemplate(TemplateFileInfoEntity template) {
this.template = template;
}
public TemplateFileInfoEntity getTemplateHeader() {
return templateHeader;
}
public void setTemplateHeader(TemplateFileInfoEntity templateHeader) {
this.templateHeader = templateHeader;
}
@Override
public boolean equals(Object o){
if (this == o) return true;
if (o == null || !(o instanceof TemplateEntity)) return false;
TemplateEntity other = (TemplateEntity) o;
/* Примитивы */
boolean isCodeEqual = this.code == other.getCode() || (this.code != null && this.code.equals(other.getCode()));
boolean isNameEqual = this.name == other.getName() || (this.name != null && this.name.equals(other.getName()));
boolean isStatusEqual = this.status == other.getStatus() || (this.status != null && this.status.equals(other.getStatus()));
boolean isProjectEqual = this.project == other.getProject() || (this.project != null && this.project.equals(other.getProject()));
/* Сложные типы */
boolean isTypeEqual = this.type == other.getType() || (this.type != null && this.type.equals(other.getType()));
boolean isTemplateEqual = this.template == other.getTemplate() || (this.template != null && this.template.equals(other.getTemplate()));
boolean isHeaderEqual = this.templateHeader == other.getTemplateHeader() || (this.templateHeader != null && this.templateHeader.equals(other.getTemplateHeader()));
return isCodeEqual && isNameEqual && isStatusEqual && isProjectEqual && isTypeEqual && isTemplateEqual && isHeaderEqual;
}
@Override
public int hashCode(){
int hash = 17;
if (code != null) hash = 31 * hash * code.hashCode();
if (name != null) hash = 31 * hash * name.hashCode();
if (status != null) hash = 31 * hash * status.hashCode();
if (project != null) hash = 31 * hash * project.hashCode();
if (type != null) hash = 31 * hash * type.hashCode();
if (template != null) hash = 31 * hash * template.hashCode();
if (templateHeader != null) hash = 31 * hash * templateHeader.hashCode();
return hash;
}
}
...@@ -21,4 +21,34 @@ public class TemplateFileInfoEntity { ...@@ -21,4 +21,34 @@ public class TemplateFileInfoEntity {
private String path; private String path;
private Integer hash; private Integer hash;
private byte[] data; private byte[] data;
@Override
public boolean equals(Object o){
if (this == o) return true;
if (o == null || !(o instanceof TemplateFileInfoEntity)) return false;
TemplateFileInfoEntity other = (TemplateFileInfoEntity) o;
boolean isNameEqual = this.name == other.getName() || (this.name != null && this.name.equals(other.getName()));
boolean isHeaderEqual = this.isHeader == other.getIsHeader() || (this.isHeader != null && this.isHeader.equals(other.getIsHeader()));
boolean isPathEqual = this.path == other.getPath() || (this.path != null && this.path.equals(other.getPath()));
boolean isHashEqual = this.hash == other.getHash() || (this.hash != null && this.hash.equals(other.getHash()));
boolean isDataEqual = this.data == other.getData() || (this.data != null && this.data.equals(other.getData()));
return isNameEqual && isHeaderEqual && isPathEqual && isHashEqual && isDataEqual;
}
@Override
public int hashCode(){
int hashResult = 17;
if (name != null) hashResult = 31 * hashResult * name.hashCode();
if (isHeader != null) hashResult = 31 * hashResult * isHeader.hashCode();
if (path != null) hashResult = 31 * hashResult * path.hashCode();
if (hash != null) hashResult = 31 * hashResult * hash.hashCode();
if (data != null) hashResult = 31 * hashResult * data.hashCode();
return hashResult;
}
} }
package kz.project.printedFormsService.data.repository;
import kz.project.printedFormsService.data.entity.TemplateEntity;
import kz.project.printedFormsService.data.entity.TemplateEntityVersion;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface TemplateVersionRepository extends JpaRepository<TemplateEntityVersion, Long> {
Page<TemplateEntityVersion> findAllByCode(Pageable pageable, String code);
}
...@@ -5,13 +5,10 @@ import kz.project.printedFormsService.data.dto.TemplateDataForReportDto; ...@@ -5,13 +5,10 @@ import kz.project.printedFormsService.data.dto.TemplateDataForReportDto;
import kz.project.printedFormsService.data.dto.TemplateDto; import kz.project.printedFormsService.data.dto.TemplateDto;
import kz.project.printedFormsService.data.dto.TemplateResponseDto; import kz.project.printedFormsService.data.dto.TemplateResponseDto;
import kz.project.printedFormsService.data.dto.TemplateShortDto; import kz.project.printedFormsService.data.dto.TemplateShortDto;
import kz.project.printedFormsService.data.entity.DocumentEntity;
import kz.project.printedFormsService.data.entity.TemplateEntity; import kz.project.printedFormsService.data.entity.TemplateEntity;
import kz.project.printedFormsService.data.entity.TemplateEntityVersion;
import kz.project.printedFormsService.data.entity.TemplateFileInfoEntity; import kz.project.printedFormsService.data.entity.TemplateFileInfoEntity;
import kz.project.printedFormsService.data.repository.DTemplateTypeRepository; import kz.project.printedFormsService.data.repository.*;
import kz.project.printedFormsService.data.repository.DocumentRepository;
import kz.project.printedFormsService.data.repository.TemplateFileInfoRepository;
import kz.project.printedFormsService.data.repository.TemplateRepository;
import kz.project.printedFormsService.exception.ValidationException; import kz.project.printedFormsService.exception.ValidationException;
import kz.project.printedFormsService.service.TemplateService; import kz.project.printedFormsService.service.TemplateService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -23,7 +20,6 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -23,7 +20,6 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -32,6 +28,7 @@ import java.util.Map; ...@@ -32,6 +28,7 @@ import java.util.Map;
@RequiredArgsConstructor @RequiredArgsConstructor
public class TemplateServiceImpl implements TemplateService { public class TemplateServiceImpl implements TemplateService {
private final TemplateRepository repository; private final TemplateRepository repository;
private final TemplateVersionRepository versionRepository;
private final DTemplateTypeRepository dTemplateTypeRepository; private final DTemplateTypeRepository dTemplateTypeRepository;
private final TemplateFileInfoRepository fileInfoRepository; private final TemplateFileInfoRepository fileInfoRepository;
...@@ -42,7 +39,7 @@ public class TemplateServiceImpl implements TemplateService { ...@@ -42,7 +39,7 @@ public class TemplateServiceImpl implements TemplateService {
Map<String, byte[]> params = new HashMap<>(); Map<String, byte[]> params = new HashMap<>();
TemplateEntity templateEntity = repository.findById(id).orElse(null); TemplateEntity templateEntity = repository.findById(id).orElse(null);
if (templateEntity == null) throw new ValidationException("по данному параметру отсутствуют данные: " + id, 13); if (templateEntity == null) throw new ValidationException("по данному параметру отсутствуют данные: " + id, 13);
TemplateDataForReportDto templ= new TemplateDataForReportDto(templateEntity.getType().getCode(), templateEntity.getTemplate().getData(), templateEntity.getTempleateHeader() != null ? templateEntity.getTempleateHeader().getData() : null); TemplateDataForReportDto templ= new TemplateDataForReportDto(templateEntity.getType().getCode(), templateEntity.getTemplate().getData(), templateEntity.getTemplateHeader() != null ? templateEntity.getTemplateHeader().getData() : null);
params.put("type",templ.getType().getBytes(StandardCharsets.UTF_8)); params.put("type",templ.getType().getBytes(StandardCharsets.UTF_8));
params.put("body", templ.getBody()); params.put("body", templ.getBody());
params.put("header",templ.getHeader()); params.put("header",templ.getHeader());
...@@ -80,7 +77,15 @@ public class TemplateServiceImpl implements TemplateService { ...@@ -80,7 +77,15 @@ public class TemplateServiceImpl implements TemplateService {
} }
if (repository.findById(dto.getTemplateId()).isEmpty()) if (repository.findById(dto.getTemplateId()).isEmpty())
throw new ValidationException("Cо значением templateId=" + dto.getTemplateId() + "запись не существует" , 13); throw new ValidationException("Cо значением templateId=" + dto.getTemplateId() + "запись не существует" , 13);
return TemplateResponseDto.toDto(repository.save(createTemplateEntity(dto, files)));
TemplateEntity existingEntity = repository.findById(dto.getTemplateId()).get();
TemplateEntity receivedEntity = createTemplateEntity(dto, files);
if (!existingEntity.equals(receivedEntity)){
versionRepository.save(new TemplateEntityVersion(existingEntity));
}
return TemplateResponseDto.toDto(repository.save(receivedEntity));
} }
...@@ -113,6 +118,11 @@ public class TemplateServiceImpl implements TemplateService { ...@@ -113,6 +118,11 @@ public class TemplateServiceImpl implements TemplateService {
public Page<TemplateDto> getAllTemplateByCode(String code, Pageable pageable) throws ValidationException { public Page<TemplateDto> getAllTemplateByCode(String code, Pageable pageable) throws ValidationException {
if (code != null) { if (code != null) {
Page<TemplateEntity> allByCode = repository.findAllByCode(pageable, code); Page<TemplateEntity> allByCode = repository.findAllByCode(pageable, code);
Page<TemplateEntityVersion> allVersionsByCode = versionRepository.findAllByCode(pageable, code);
if (allByCode != null && allVersionsByCode != null)
return TemplateDto.toDtoList(allByCode, allVersionsByCode);
if (allByCode != null) if (allByCode != null)
return TemplateDto.toDtoList(allByCode); return TemplateDto.toDtoList(allByCode);
} }
...@@ -142,9 +152,9 @@ public class TemplateServiceImpl implements TemplateService { ...@@ -142,9 +152,9 @@ public class TemplateServiceImpl implements TemplateService {
templateEntity.setVersion(dto.getVersion() + 1); templateEntity.setVersion(dto.getVersion() + 1);
if (files != null && files.size() == 2 && files.get(1) != null) { if (files != null && files.size() == 2 && files.get(1) != null) {
if (dto.getHeaderFileId() != null) { if (dto.getHeaderFileId() != null) {
templateEntity.setTempleateHeader(updateTemplateFiles(files.get(1), dto.getHeaderFileId(), true)); templateEntity.setTemplateHeader(updateTemplateFiles(files.get(1), dto.getHeaderFileId(), true));
} else { } else {
templateEntity.setTempleateHeader(createTemplateFiles(files.get(1), true)); templateEntity.setTemplateHeader(createTemplateFiles(files.get(1), true));
} }
} }
templateEntity.setStatus(dto.getStatus()); templateEntity.setStatus(dto.getStatus());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment