From 0029230c440c99ee27e72ffd712bfcf5374b27cf Mon Sep 17 00:00:00 2001 From: esoe Date: Mon, 1 Jul 2024 17:42:31 +0300 Subject: [PATCH] new file: gates/src/main/java/ru/mlokoin/gates/controller/CourseController.java modified: gates/src/main/java/ru/mlokoin/gates/model/Building.java modified: gates/src/main/java/ru/mlokoin/gates/model/Course.java new file: gates/src/main/java/ru/mlokoin/gates/model/CourseWraper.java modified: gates/src/main/java/ru/mlokoin/gates/model/Program.java modified: gates/src/main/java/ru/mlokoin/gates/model/Teacher.java new file: gates/src/main/resources/templates/courses-check.html modified: gates/src/main/resources/templates/view-as-educations.html modified: storage-rs/src/main/java/ru/molokoin/storagers/model/XlsxDocument.java modified: storage-rs/src/main/resources/application.yaml --- .../gates/controller/CourseController.java | 214 ++++++++++++++++++ .../java/ru/mlokoin/gates/model/Building.java | 3 + .../java/ru/mlokoin/gates/model/Course.java | 2 +- .../ru/mlokoin/gates/model/CourseWraper.java | 46 ++++ .../java/ru/mlokoin/gates/model/Program.java | 3 + .../java/ru/mlokoin/gates/model/Teacher.java | 40 ++++ .../resources/templates/courses-check.html | 70 ++++++ .../templates/view-as-educations.html | 2 +- .../storagers/model/XlsxDocument.java | 10 +- .../src/main/resources/application.yaml | 8 + 10 files changed, 394 insertions(+), 4 deletions(-) create mode 100644 gates/src/main/java/ru/mlokoin/gates/controller/CourseController.java create mode 100644 gates/src/main/java/ru/mlokoin/gates/model/CourseWraper.java create mode 100644 gates/src/main/resources/templates/courses-check.html diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/CourseController.java b/gates/src/main/java/ru/mlokoin/gates/controller/CourseController.java new file mode 100644 index 0000000..4e6366b --- /dev/null +++ b/gates/src/main/java/ru/mlokoin/gates/controller/CourseController.java @@ -0,0 +1,214 @@ +package ru.mlokoin.gates.controller; + +import java.time.Duration; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.reactive.function.client.WebClient; + +import reactor.core.publisher.Mono; +import ru.mlokoin.gates.model.Building; +import ru.mlokoin.gates.model.Course; +import ru.mlokoin.gates.model.Program; +import ru.mlokoin.gates.model.ProgramCretarea; +import ru.mlokoin.gates.model.ProgramWraper; +import ru.mlokoin.gates.model.Teacher; +import ru.mlokoin.gates.model.XlsxCell; +import ru.mlokoin.gates.model.XlsxDocument; + +@Controller +@RequestMapping(path = "/courses") +public class CourseController { + @Autowired + private WebClient client; + + @GetMapping("/check/{id}") + public String checkCoursess(Model model, @PathVariable String id) { + System.out.println("Проверка курсов, для внесения в базу ..."); + System.out.println("Получение перечня курсов из xlsx-файла ..."); + //получение данных файла в переменную xlsx + XlsxDocument xlsx = client.method(HttpMethod.GET) + .uri("http://storage-rs:8282/api/document/content/" + + id + ".xlsx") + .retrieve() + .bodyToMono(new ParameterizedTypeReference (){}) + .block(); + //список курсов из файла + List xlsx_courses = new ArrayList<>();//7 столбец + Map> map = xlsx.getData(); + for (Map.Entry> entry : map.entrySet()) { + Course course = new Course(); + course.setPlace(entry + .getValue() + .get(5) + .getContent()); + //Обработка даты начала обучения + course.setStart_date( + new Date( + Long.parseLong( + entry + .getValue() + .get(7) + .getContent()))); + //Обработка даты создания протокола + course.setProtocol_date( + new Date( + Long.parseLong( + entry + .getValue() + .get(9) + .getContent()))); + //Номер протокола + course.setProtocol_number(entry + .getValue() + .get(13) + .getContent()); + //отчтный период + course.setReport_period(entry + .getValue() + .get(17) + .getContent()); + //Извлекаем ФИО преподавателя + course.setTeacher(new Teacher(entry + .getValue() + .get(18) + .getContent())); + //извлекаем программу обучения + course.setProgram(new Program(entry + .getValue() + .get(6) + .getContent())); + course.setBuilding(new Building(entry + .getValue() + .get(19) + .getContent())); + + xlsx_courses.add(course); + } + xlsx_courses.remove(0);//Удалили из списка заголовок + Set xlsx_courseSet = Set.copyOf(xlsx_courses);//удалили повторения + + //список номеров протоколов из файла в консоль + System.out.println("Список протоколов из файла:" + xlsx_courseSet.size()); + // Set xlsx_stringSet = new HashSet<>(); + for (Course c : xlsx_courseSet) { + System.out.println(c.getProtocol_number() + " от " + c.getProtocol_date()); + // xlsx_stringSet.add(c.); + } + + // //Получение перечня программ из базы + // System.out.println("Получение списка программ из базы ..."); + // List base_programs = client.method(HttpMethod.GET) + // .uri("http://resource-service-api:8181/program/list") + // .retrieve() + // .bodyToMono(new ParameterizedTypeReference >(){}) + // .block(); + // Set base_programSet = Set.copyOf(base_programs); + + // //Список наименований программ из базы + // System.out.println("Список уникальных наименований программ из базы:"); + // Set base_stringSet = new HashSet<>(); + // for (Program pc : base_programSet) { + // System.out.println(pc.getName()); + // base_stringSet.add(pc.getName()); + // } + + // //Удаление программ присутствующих в базе + // xlsx_stringSet.removeAll(base_stringSet); + + // if (xlsx_stringSet.size() != 0) { + // //Подготовка списка, для передачи в представление + // ArrayList list = new ArrayList<>(); + // for (String string : xlsx_stringSet) { + // Program pc = new Program(); + // pc.setName(string); + // list.add(pc); + // } + + // /** + // * Подготавлеваем обертку формы + // */ + // // передаем список новых программ + // ProgramWraper pwraper = new ProgramWraper(list); + + // //подготавливаем список критериев + // List base_cretareas = client.method(HttpMethod.GET) + // .uri("http://resource-service-api:8181/cretarea/list") + // .retrieve() + // .bodyToMono(new ParameterizedTypeReference >(){}) + // .block(); + // //передаем список критериев в обертку формы, для селекта + // pwraper.setCretareas(base_cretareas); + + // //передаем обертку в модель + // model.addAttribute("wrapPrograms", pwraper); + // model.addAttribute("id", id); + + // return "programs-check"; + // } + return "courses-check"; + // return "redirect:/document/view-as-educations/" + id; + } + + /** + * Добавление новых программ обучения в базу + * @param wraper + * @param id + * @return + */ + @PostMapping( + path="/save/{id}", + consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, + produces = { + MediaType.APPLICATION_JSON_VALUE + }) + public String savePrograms(@ModelAttribute("wrapPrograms") ProgramWraper wraper, @PathVariable String id){ + /** + * Отправляем запросы на добавление новых программ в базу + */ + System.out.println("Программы для добавления в базу: " + + wraper.getPrograms().toString()); + for (Program program : wraper.getPrograms()) { + //Проверка наличия полного наименования имени программы + if (!program.getName().equals("")) { + //проверка наличия длительности программы + if (program.getLenght() != null) { + //проверка наличия направления обучения + if (!program.getStudy_direction().equals("")){ + //проверка наличия критерия + if (program.getCretarea() != null){ + client.post() + .uri("http://resource-service-api:8181/program/create") + .body(Mono.just(program), Program.class) + .retrieve() + .toBodilessEntity() + .timeout(Duration.ofSeconds(1)) + .block(); + } + } + } + } + } + /** + * Возвращаем пользователя на страницу перечня новых критериев + * - если он не пустой + */ + return "redirect:/programs/check/" + id; + } + +} diff --git a/gates/src/main/java/ru/mlokoin/gates/model/Building.java b/gates/src/main/java/ru/mlokoin/gates/model/Building.java index 9b54206..b91a8e6 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/Building.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/Building.java @@ -26,4 +26,7 @@ public class Building implements Serializable{ this.code_short = code_short; this.code_full = code_full; } + public Building(String name_short){ + this.setName_short(name_short); + } } diff --git a/gates/src/main/java/ru/mlokoin/gates/model/Course.java b/gates/src/main/java/ru/mlokoin/gates/model/Course.java index bc03270..4f9233b 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/Course.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/Course.java @@ -14,7 +14,7 @@ public class Course { private String place;//место проведения занятий private Date start_date;//дата начала курса private Date protocol_date;//дата протокола - private String protocol_number;//номер протоколаssss + private String protocol_number;//номер протокола private String report_period;//отчетный период (наименование месяца) private Teacher teacher;//сведения о преподаватле private Program program;//сведения о программе обучения diff --git a/gates/src/main/java/ru/mlokoin/gates/model/CourseWraper.java b/gates/src/main/java/ru/mlokoin/gates/model/CourseWraper.java new file mode 100644 index 0000000..a459a02 --- /dev/null +++ b/gates/src/main/java/ru/mlokoin/gates/model/CourseWraper.java @@ -0,0 +1,46 @@ +package ru.mlokoin.gates.model; + +import java.util.ArrayList; +import java.util.List; + +import lombok.Data; + +@Data +public class CourseWraper { + List courses; + List programs; + List buildings; + List teachers; + + public CourseWraper(){ + init(); + } + + public CourseWraper(List list) { + this.courses = list; + } + public void init(){ + this.courses = new ArrayList<>(); + } + + public void addCourse(Course course){ + this.courses.add(course); + } + + public void addProgram(Program program){ + this.programs.add(program); + } + + public void addBuilding(Building building){ + this.buildings.add(building); + } + + public void addTeacher(Teacher teacher){ + this.teachers.add(teacher); + } + + public String toString(){ + return this.courses.toString(); + } + +} diff --git a/gates/src/main/java/ru/mlokoin/gates/model/Program.java b/gates/src/main/java/ru/mlokoin/gates/model/Program.java index e9c3e18..f40cc11 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/Program.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/Program.java @@ -39,6 +39,9 @@ public class Program { this.price = price; this.cretarea = cretarea; } + public Program(String name){ + this.setName(name); + } diff --git a/gates/src/main/java/ru/mlokoin/gates/model/Teacher.java b/gates/src/main/java/ru/mlokoin/gates/model/Teacher.java index 11997b6..ae0bf1f 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/Teacher.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/Teacher.java @@ -41,4 +41,44 @@ public class Teacher implements Serializable{ this.employee_id = employee_id; this.snils = snils; } + + /** + * Создание объекта преподаватель из строки ФИО + * - отсутствует обработка четвертого слова (оглы, угли итд ... ) + * - если только одно слово, заменяется на "- - -" + * - если пустая строка, заменяется на "- - -" + * + * @param full_name + */ + public Teacher(String full_name){ + String[] arr = full_name.split(" "); + for (int i = 0; i < arr.length; i++){ + switch (i) { + case 0: { + if (arr.length > 1){ + setSecond_name(arr[i]);//Фамилия + break; + } + setSecond_name("-");//Фамилия + setFirst_name("-");//Имя + setLast_name("-");//Отчество + break; + } + case 1: { + setFirst_name(arr[i]);//Имя + break; + } + case 2: { + setLast_name(arr[i]);//Отчество + break; + } + } + } + } + + public String getFullName(){ + return getSecond_name() + " " + + getFirst_name() + " " + + getLast_name(); + } } \ No newline at end of file diff --git a/gates/src/main/resources/templates/courses-check.html b/gates/src/main/resources/templates/courses-check.html new file mode 100644 index 0000000..7e45062 --- /dev/null +++ b/gates/src/main/resources/templates/courses-check.html @@ -0,0 +1,70 @@ + + + + + check-courses + + + + + + +
+

check-courses

+
    +
  • +
  • +
+ +
+
+ +
+ + \ No newline at end of file diff --git a/gates/src/main/resources/templates/view-as-educations.html b/gates/src/main/resources/templates/view-as-educations.html index 0d4e185..3bce84b 100644 --- a/gates/src/main/resources/templates/view-as-educations.html +++ b/gates/src/main/resources/templates/view-as-educations.html @@ -38,7 +38,7 @@ xmlns:th="http://www.thymeleaf.org">
-
+
diff --git a/storage-rs/src/main/java/ru/molokoin/storagers/model/XlsxDocument.java b/storage-rs/src/main/java/ru/molokoin/storagers/model/XlsxDocument.java index be01628..22606e7 100644 --- a/storage-rs/src/main/java/ru/molokoin/storagers/model/XlsxDocument.java +++ b/storage-rs/src/main/java/ru/molokoin/storagers/model/XlsxDocument.java @@ -10,6 +10,7 @@ import java.util.List; import java.util.Map; import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; @@ -68,8 +69,13 @@ public class XlsxDocument implements Serializable{ xlsxCell.setType("STRING"); } break; case NUMERIC: { - xlsxCell = new XlsxCell(cell.getNumericCellValue() + ""); - xlsxCell.setType("NUMERIC"); + if (DateUtil.isCellDateFormatted(cell)) { + xlsxCell = new XlsxCell(cell.getDateCellValue().getTime() + "" ); + xlsxCell.setType("DATE"); + } else { + xlsxCell = new XlsxCell(cell.getNumericCellValue() + ""); + xlsxCell.setType("NUMERIC"); + } } break; case BOOLEAN: { xlsxCell = new XlsxCell(cell.getBooleanCellValue() + ""); diff --git a/storage-rs/src/main/resources/application.yaml b/storage-rs/src/main/resources/application.yaml index 5f531d8..f8496fa 100644 --- a/storage-rs/src/main/resources/application.yaml +++ b/storage-rs/src/main/resources/application.yaml @@ -13,6 +13,14 @@ spring: multipart: max-file-size: 50MB max-request-size: 50MB + mvc: + hiddenmethod: + filter: + enabled: true + format: + date: yyyy-MM-dd + date-time: yyyy-MM-dd HH:mm:ss + time: HH:mm:ss server: port: 8282 storage: