From f5c89b0897d56fbdb06cb866c0c9dc3f636c245c Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Tue, 15 Apr 2025 13:03:58 +0400 Subject: [PATCH] #21 -- Save values and fix front for files upload --- .../java/ru/ulstu/file/model/FileData.java | 13 +--- .../controller/ReportValueController.java | 38 ++++++----- .../report/model/dto/ReportValueDto.java | 10 +++ .../repository/ReportValueRepository.java | 11 ++++ .../ulstu/report/service/ReportService.java | 7 ++ .../report/service/ReportValueService.java | 64 +++++++++++++++++++ .../templates/report/editReportValue.html | 38 +++++++---- 7 files changed, 136 insertions(+), 45 deletions(-) create mode 100644 src/main/java/ru/ulstu/report/repository/ReportValueRepository.java create mode 100644 src/main/java/ru/ulstu/report/service/ReportValueService.java diff --git a/src/main/java/ru/ulstu/file/model/FileData.java b/src/main/java/ru/ulstu/file/model/FileData.java index b85884f..f5ee9fe 100644 --- a/src/main/java/ru/ulstu/file/model/FileData.java +++ b/src/main/java/ru/ulstu/file/model/FileData.java @@ -2,6 +2,7 @@ package ru.ulstu.file.model; import jakarta.persistence.Column; import jakarta.persistence.Entity; +import jakarta.persistence.Lob; import jakarta.persistence.Table; import ru.ulstu.model.BaseEntity; @@ -17,11 +18,9 @@ public class FileData extends BaseEntity { @Column(name = "create_date") private Date createDate; + @Lob private byte[] data; - @Column(name = "is_latex_attach") - private Boolean isLatexAttach; - public String getName() { return name; } @@ -53,12 +52,4 @@ public class FileData extends BaseEntity { public void setData(byte[] data) { this.data = data; } - - public Boolean isLatexAttach() { - return isLatexAttach; - } - - public void setLatexAttach(Boolean latexAttach) { - isLatexAttach = latexAttach; - } } diff --git a/src/main/java/ru/ulstu/report/controller/ReportValueController.java b/src/main/java/ru/ulstu/report/controller/ReportValueController.java index b508f4b..8d0e6bd 100644 --- a/src/main/java/ru/ulstu/report/controller/ReportValueController.java +++ b/src/main/java/ru/ulstu/report/controller/ReportValueController.java @@ -1,39 +1,37 @@ package ru.ulstu.report.controller; +import jakarta.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; -import ru.ulstu.aspirant.service.AspirantService; -import ru.ulstu.indicator.service.IndicatorService; import ru.ulstu.report.model.dto.ReportValueDto; -import ru.ulstu.report.service.ReportPeriodService; -import ru.ulstu.report.service.ReportService; +import ru.ulstu.report.service.ReportValueService; + +import java.io.IOException; @Controller @RequestMapping("report-value") public class ReportValueController { - private final IndicatorService indicatorService; - private final AspirantService aspirantService; - private final ReportService reportService; - private final ReportPeriodService reportPeriodService; + private final ReportValueService reportValueService; - public ReportValueController(IndicatorService indicatorService, - AspirantService aspirantService, - ReportService reportService, - ReportPeriodService reportPeriodService) { - this.indicatorService = indicatorService; - this.aspirantService = aspirantService; - this.reportService = reportService; - this.reportPeriodService = reportPeriodService; + public ReportValueController(ReportValueService reportValueService) { + this.reportValueService = reportValueService; } @GetMapping("edit-report-value/{reportId}/{indicatorId}") - public String getReportPeriods(@PathVariable("reportId") Integer reportId, - @PathVariable("indicatorId") Integer indicatorId, - Model model) { - model.addAttribute("reportValue", new ReportValueDto(reportId, indicatorService.getIndicatorById(indicatorId))); + public String getReportValue(@PathVariable("reportId") Integer reportId, + @PathVariable("indicatorId") Integer indicatorId, + Model model) { + model.addAttribute("reportValue", reportValueService.getByIndicatorId(reportId, indicatorId)); return "report/editReportValue"; } + + @PostMapping("save-report-value") + public String saveReportValue(@Valid ReportValueDto reportValueDto, Model model) throws IOException { + reportValueService.saveReportValue(reportValueDto); + return "redirect:/report/edit-report/" + reportValueDto.getReportId(); + } } diff --git a/src/main/java/ru/ulstu/report/model/dto/ReportValueDto.java b/src/main/java/ru/ulstu/report/model/dto/ReportValueDto.java index 19304af..885648f 100644 --- a/src/main/java/ru/ulstu/report/model/dto/ReportValueDto.java +++ b/src/main/java/ru/ulstu/report/model/dto/ReportValueDto.java @@ -2,9 +2,11 @@ package ru.ulstu.report.model.dto; import ru.ulstu.file.model.FileDataDto; import ru.ulstu.indicator.model.Indicator; +import ru.ulstu.report.model.ReportValue; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public class ReportValueDto { private Integer id = 0; @@ -25,6 +27,14 @@ public class ReportValueDto { this.indicator = indicator; } + public ReportValueDto(ReportValue reportValue, Integer reportId) { + this.id = reportValue.getId(); + this.reportId = reportId; + this.indicator = reportValue.getIndicator(); + this.files = reportValue.getFiles().stream().map(FileDataDto::new).collect(Collectors.toList()); + this.indicatorValue = reportValue.getIndicatorValue(); + } + public Indicator getIndicator() { return indicator; } diff --git a/src/main/java/ru/ulstu/report/repository/ReportValueRepository.java b/src/main/java/ru/ulstu/report/repository/ReportValueRepository.java new file mode 100644 index 0000000..c4a0eba --- /dev/null +++ b/src/main/java/ru/ulstu/report/repository/ReportValueRepository.java @@ -0,0 +1,11 @@ +package ru.ulstu.report.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import ru.ulstu.report.model.ReportValue; + +public interface ReportValueRepository extends JpaRepository { + @Query("SELECT rv FROM Report r JOIN r.values rv WHERE r.id = :reportId AND rv.indicator.id = :indicatorId") + ReportValue findByReportIdAndIndicatorId(@Param("reportId") Integer reportId, @Param("indicatorId") Integer indicatorId); +} diff --git a/src/main/java/ru/ulstu/report/service/ReportService.java b/src/main/java/ru/ulstu/report/service/ReportService.java index cbe46e6..7c32beb 100644 --- a/src/main/java/ru/ulstu/report/service/ReportService.java +++ b/src/main/java/ru/ulstu/report/service/ReportService.java @@ -5,6 +5,7 @@ import ru.ulstu.aspirant.model.Aspirant; import ru.ulstu.aspirant.service.AspirantService; import ru.ulstu.report.model.Report; import ru.ulstu.report.model.ReportPeriod; +import ru.ulstu.report.model.ReportValue; import ru.ulstu.report.model.dto.ReportDto; import ru.ulstu.report.repository.ReportRepository; import ru.ulstu.user.UserService; @@ -61,4 +62,10 @@ public class ReportService { public void deleteReport(Integer id) { reportRepository.deleteById(id); } + + public void addReportValue(Integer reportId, ReportValue reportValue) { + Report report = getReportById(reportId); + report.getValues().add(reportValue); + reportRepository.save(report); + } } diff --git a/src/main/java/ru/ulstu/report/service/ReportValueService.java b/src/main/java/ru/ulstu/report/service/ReportValueService.java new file mode 100644 index 0000000..ae885df --- /dev/null +++ b/src/main/java/ru/ulstu/report/service/ReportValueService.java @@ -0,0 +1,64 @@ +package ru.ulstu.report.service; + +import org.springframework.stereotype.Service; +import ru.ulstu.file.service.FileService; +import ru.ulstu.indicator.service.IndicatorService; +import ru.ulstu.report.model.ReportValue; +import ru.ulstu.report.model.dto.ReportValueDto; +import ru.ulstu.report.repository.ReportValueRepository; + +import java.io.IOException; + +@Service +public class ReportValueService { + private final ReportValueRepository reportValueRepository; + private final IndicatorService indicatorService; + private final FileService fileService; + private final ReportService reportService; + + public ReportValueService(ReportValueRepository reportValueRepository, + IndicatorService indicatorService, + FileService fileService, + ReportService reportService) { + this.reportValueRepository = reportValueRepository; + this.indicatorService = indicatorService; + this.fileService = fileService; + this.reportService = reportService; + } + + public ReportValue saveReportValue(ReportValueDto reportValueDto) throws IOException { + ReportValue reportValue; + if (reportValueDto.getId() == null || reportValueDto.getId() == 0) { + reportValue = new ReportValue(); + } else { + reportValue = getReportValueById(reportValueDto.getId()); + } + reportValue.setIndicatorValue(reportValueDto.getIndicatorValue()); + reportValue.setIndicator(indicatorService.getIndicatorById(reportValueDto.getIndicator().getId())); + reportValue.setFiles(fileService.saveOrCreate(reportValueDto.getFiles().stream() + .filter(f -> !f.isDeleted()) + .toList())); + reportValue = reportValueRepository.save(reportValue); + reportService.addReportValue(reportValueDto.getReportId(), reportValue); + + return reportValue; + } + + public ReportValue getReportValueById(Integer reportValueId) { + return reportValueRepository + .findById(reportValueId) + .orElseThrow(() -> new RuntimeException("Report value not found by id")); + } + + public void deleteReportValue(Integer id) { + reportValueRepository.deleteById(id); + } + + public ReportValueDto getByIndicatorId(Integer reportId, Integer indicatorId) { + ReportValue reportValue = reportValueRepository.findByReportIdAndIndicatorId(reportId, indicatorId); + if (reportValue == null) { + return new ReportValueDto(reportId, indicatorService.getIndicatorById(indicatorId)); + } + return new ReportValueDto(reportValue, reportId); + } +} diff --git a/src/main/resources/templates/report/editReportValue.html b/src/main/resources/templates/report/editReportValue.html index 0d3ebfa..b94e985 100644 --- a/src/main/resources/templates/report/editReportValue.html +++ b/src/main/resources/templates/report/editReportValue.html @@ -2,21 +2,15 @@ xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:th="http://www.w3.org/1999/xhtml" layout:decorate="~{default}">
-

-
+

Редактирование показателя

+

+ + + - - - Отмена
@@ -37,8 +31,13 @@
- + + @@ -52,7 +51,18 @@
+ + + + Отмена + +