diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/Hello.java b/gates/src/main/java/ru/mlokoin/gates/controller/Hello.java index 345724a..03ff745 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/Hello.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/Hello.java @@ -16,6 +16,4 @@ public class Hello { public String hello(){ return "hello"; } - - } diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/TeacherController.java b/gates/src/main/java/ru/mlokoin/gates/controller/TeacherController.java deleted file mode 100644 index 9665769..0000000 --- a/gates/src/main/java/ru/mlokoin/gates/controller/TeacherController.java +++ /dev/null @@ -1,293 +0,0 @@ -package ru.mlokoin.gates.controller; - -import java.time.Duration; -import java.util.ArrayList; -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.Teacher; -import ru.mlokoin.gates.model.TeacherWraper; -import ru.mlokoin.gates.model.XlsxCell; -import ru.mlokoin.gates.model.XlsxDocument; - -@Controller -@RequestMapping(path = "/teachers") -public class TeacherController { - @Autowired - private WebClient client; - - /** - * Проверка преподавателей - * @param model - * @param id - * @return - */ - @GetMapping("/check/{id}") - public String checkTeachers(Model model, @PathVariable String id) { - System.out.println("Проверка преподавателей, для внесения в базу ..."); - - //список ошибок - List errors = new ArrayList<>(); - - //Запрашиваем данные файла из хранилища - System.out.println("Получение перечня преподавателей из xlsx-файла ..."); - XlsxDocument xlsx = client.method(HttpMethod.GET) - .uri("http://storage-rs:8282/api/document/content/" - + id + ".xlsx") - .retrieve() - .bodyToMono(new ParameterizedTypeReference (){}) - .block(); - - // получаем данные в виде мапы строк - Map> map = xlsx.getData(); - - // удаляем строку заголовков - map.remove(0); - System.out.println("Количество записей: " + map.size()); - - Set xlsx_strings = new HashSet<>();//строки для браузера - Set xlsx_teachers = new HashSet<>();//объекты для обработки - - //перебираем мапу - for (Map.Entry> entry : map.entrySet()) { - // получаем значение поля "Преподаватель", заменяем пустые поля на слово "Нет" - // пустые сроки не выводятся браузром, нет смысла туда передавать пустые объекты - String string = ""; - try { - string = entry - .getValue() - .get(18) - .getContent(); - } catch (Exception e) { - string = "Нет"; - } - - /** - * Преобразование строки в объект Преподавателя - * - обработка возможных ошибок в файле - * - разбор строк происходит в основном переборе, чтобы можно было извлечь номер строки с ошибками для пользователя - */ - Teacher t = new Teacher(); - // проверка на пустую строку - if (string.equals("") | - (string == null) | - (string.isEmpty()) | - (string.length() == 0) | - (string.isBlank()) | - (string.equals("Нет")) | - (string.equals("Нет Нет Нет"))) { - //если строка пустая, то добавляем ошибку - errors.add("Возможна ошибка в строке документа: " + entry.getKey() + " :: Преподаватель не указан"); - string = "Нет"; - t.setSecond_name("Нет");//Фамилия - t.setFirst_name("");//Имя - t.setLast_name("");//Отчество - } else { - //если строка не пустая, то разбираем ее на слова - String[] arr = string.split(" ", 4); - - for (int i = 0; i < arr.length; i++){ - switch (i) { - //проверяем первое слово (фамилия) - case 0: { - //если строка состоит из одного слова, то возможна ошибка - if (arr.length == 1){ - t.setSecond_name(arr[i]);//Фамилия - t.setFirst_name("");//Имя - t.setLast_name("");//Отчество - errors.add("Возможна ошибка в строке документа: " + entry.getKey() + " :: В поле *Преподаватель* указано одно слово ... " + string); - break; - } - t.setSecond_name(arr[i]);//Фамилия - break; - } - case 1: { - //если строка состоит из двух слов, то возможна ошибка - if (arr.length == 2){ - t.setFirst_name(arr[i]);//второе слово - имя - t.setLast_name("");//третье слово - Отчество - errors.add("Возможна ошибка в строке документа: " + entry.getKey() + " :: В поле *Преподаватель* указано два слова ... " + string); - break; - } - t.setFirst_name(arr[i]);//Имя - break; - } - case 2: { - //если строка состоит из трех слов, то ошибка не добавляется - if (arr.length == 3){ - t.setLast_name(arr[i]);//третье слово - Отчество - break; - } - t.setLast_name(arr[i]);//Отчество - break; - } - case 3: { - //если строка содержит четыре и больше слов - t.setLast_name(t.getLast_name() + " " + arr[i]);//допишем в поле Отчество все последующие слова - errors.add("Возможна ошибка в строке документа: " + entry.getKey() + " :: В поле *Преподаватель* указано больше трех слов ... " + string); - // System.out.println("Отчество из xlsx-файла (4 больше слов): " + t.getLast_name()); - break; - } - default: - break; - } - } - } - xlsx_strings.add(string); - xlsx_teachers.add(t); - } - - // Промежуточные результаты разбора данных xlsx в консоль - System.out.println("Всего преподавателей(obj): " + xlsx_teachers.size()); - System.out.println("Всего преподавателей(str): " + xlsx_strings.size()); - System.out.println(">> errors: " + errors.size()); - - /** - * Получение перечня преподавателей из базы - */ - System.out.println("Получение списка преподавателей из базы ..."); - Set base_teachers = client.method(HttpMethod.GET) - .uri("http://resource-service-api:8181/teacher/list") - .retrieve() - .bodyToMono(new ParameterizedTypeReference >(){}) - .block(); - - /** - * Удаление преподавателей присутствующих в базе - * сравнение по объектам не проходит: - * - в объектах xlsx отсутствуют id, которые приходят с объектами из базы - * - менять Teacher.equals не хочется, он на lombok завязан - * - перевожу ФИО в строку и сравниваю строки!!! - */ - // xlsx_teachers.removeAll(base_teachers); - Set xlsx_teachers_str = xlsx_strings; - Set base_teachers_str = new HashSet<>(); - // for (Teacher t : xlsx_teachers) { - // String s = t.getSecond_name() + " " - // + t.getFirst_name() + " " - // + t.getLast_name(); - // xlsx_teachers_str.add(s); - // } - - for (Teacher t : base_teachers) { - StringBuilder sb = new StringBuilder(); - - sb.append(t.getSecond_name()); - if (t.getFirst_name() != "") { - sb.append(" ") - .append(t.getFirst_name()); - } - if (t.getLast_name() != "") { - sb.append(" ") - .append(t.getLast_name()); - } - base_teachers_str.add(sb.toString()); - } - - xlsx_teachers_str.removeAll(base_teachers_str); - - /** - * Если какието преподаватели отсутствуют в базе, - * вернуть страницу проверки преподавателей - */ - if (xlsx_teachers_str.size() != 0) { - /** - * Подготовка списка, для передачи в представление - * - опять преобразуем список из строкового в объектный - */ - ArrayList list = new ArrayList<>(); - for (String string : xlsx_teachers_str) { - Teacher t = new Teacher(); - String[] arr = string.split(" ", 4); - for (int i = 0; i < arr.length; i++){ - switch (i) { - case 0: { - t.setSecond_name(arr[i]);//Фамилия - break; - } - case 1: { - t.setFirst_name(arr[i]);//Имя - break; - } - case 2: { - t.setLast_name(arr[i]);//Отчество - break; - } - case 3: { - t.setLast_name(t.getLast_name() + " " + arr[i]);//Отчество c остальными дописками - break; - } - default: - break; - } - } - list.add(t); - } - - //кладем список в обертку для формы - TeacherWraper teacherWraper = new TeacherWraper(list); - - model.addAttribute("wrapTeachers", teacherWraper); - model.addAttribute("errors", errors); - model.addAttribute("id", id); - - return "teachers-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 saveTeachers(@ModelAttribute("wrapTeachers") TeacherWraper wraper, @PathVariable String id){ - /** - * Отправляем запросы на добавление новых критериев в базу - */ - System.out.println("Преподаватели для добавления в базу: " - + wraper.getList().toString()); - - for (Teacher teacher : wraper.getList()) { - //Проверка наличия флага для добавления в базу - //по полю табельного номера - // if (teacher.getEmployee_id() != ""){ - client.post() - .uri("http://resource-service-api:8181/teacher/create") - .body(Mono.just(teacher), Teacher.class) - .retrieve() - .toBodilessEntity() - .timeout(Duration.ofSeconds(2)) - .block(); - // } - } - /** - * Возвращаем пользователя на страницу перечня новых критериев - * - если он не пустой - */ - return "redirect:/teachers/check/" + id; - } -} diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/BuildingController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/BuildingController.java similarity index 89% rename from gates/src/main/java/ru/mlokoin/gates/controller/BuildingController.java rename to gates/src/main/java/ru/mlokoin/gates/controller/v1/BuildingController.java index c031f28..6f601f5 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/BuildingController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/BuildingController.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.controller; +package ru.mlokoin.gates.controller.v1; import java.time.Duration; import java.util.ArrayList; @@ -21,10 +21,11 @@ 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.BuildingWraper; -import ru.mlokoin.gates.model.XlsxCell; -import ru.mlokoin.gates.model.XlsxDocument; +import ru.mlokoin.gates.model.building.Building; +import ru.mlokoin.gates.model.building.BuildingWraper; +import ru.mlokoin.gates.model.fs.xlsx.XlsxCell; +import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument; +import ru.mlokoin.gates.repository.Storage; import ru.mlokoin.gates.teh.strings.Stringer; @Controller @@ -33,18 +34,16 @@ public class BuildingController { @Autowired private WebClient client; + @Autowired + private Storage storage; + @GetMapping("/check/{id}") public String checkBuildings(Model model, @PathVariable String id){ List errors = new ArrayList<>();//список ошибок 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(); + XlsxDocument xlsx = storage.getXlsxDocument(id); ArrayList xlsx_buildings = new ArrayList<>();//19 столбец Map> map = xlsx.getData(); @@ -97,7 +96,7 @@ public class BuildingController { /** * Если xlsx содержит элементы, отсутствующие в базе, * вернуть страницу проверки объектов строительства - */ + */ if (xlsx_buildings_str.size() != 0) { ArrayList list = new ArrayList<>(); for (String string : xlsx_buildings_str) { diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/CourseController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/CourseController.java similarity index 82% rename from gates/src/main/java/ru/mlokoin/gates/controller/CourseController.java rename to gates/src/main/java/ru/mlokoin/gates/controller/v1/CourseController.java index 8a785c4..b4ef83d 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/CourseController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/CourseController.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.controller; +package ru.mlokoin.gates.controller.v1; import java.time.Duration; import java.util.ArrayList; @@ -23,14 +23,14 @@ 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.CourseWraper; -import ru.mlokoin.gates.model.Program; -import ru.mlokoin.gates.model.Teacher; -import ru.mlokoin.gates.model.XlsxCell; -import ru.mlokoin.gates.model.XlsxDocument; -import ru.mlokoin.gates.teh.strings.Stringer; +import ru.mlokoin.gates.model.building.Building; +import ru.mlokoin.gates.model.course.Course; +import ru.mlokoin.gates.model.course.CourseWraper; +import ru.mlokoin.gates.model.fs.xlsx.XlsxCell; +import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument; +import ru.mlokoin.gates.model.program.Program; +import ru.mlokoin.gates.model.teacher.Teacher; +import ru.mlokoin.gates.repository.Storage; @Controller @RequestMapping(path = "/courses") @@ -38,6 +38,9 @@ public class CourseController { @Autowired private WebClient client; + @Autowired + private Storage storage; + @GetMapping("/check/{id}") public String checkCoursess(Model model, @PathVariable String id) { System.out.println("Проверка курсов, для внесения в базу ..."); @@ -49,11 +52,7 @@ public class CourseController { System.out.println("Получение перечня преподавателей из базы ..."); List teachers; try { - teachers = client.method(HttpMethod.GET) - .uri("http://resource-service-api:8181/teacher/list") - .retrieve() - .bodyToMono(new ParameterizedTypeReference >(){}) - .block(); + teachers = storage.getBaseTeachers(); } catch (Exception e) { errors.add("Ошибка при получении списка преподавателей из базы :: " +e.getMessage()); System.out.println("Не удалось получить список преподавателей из базы: " + e.getMessage()); @@ -64,11 +63,7 @@ public class CourseController { System.out.println("Получение перечня программ обучения из базы ..."); List programs; try { - programs = client.method(HttpMethod.GET) - .uri("http://resource-service-api:8181/program/list") - .retrieve() - .bodyToMono(new ParameterizedTypeReference >(){}) - .block(); + programs = storage.getBasePrograms(); } catch (Exception e) { errors.add("Ошибка при получении списка программ обучения из базы :: " +e.getMessage()); System.out.println("Не удалось получить список программ обучения из базы: " + e.getMessage()); @@ -79,11 +74,7 @@ public class CourseController { System.out.println("Получение перечня объектов строительства из базы ..."); List buildings; try { - buildings = client.method(HttpMethod.GET) - .uri("http://resource-service-api:8181/building/list") - .retrieve() - .bodyToMono(new ParameterizedTypeReference >(){}) - .block(); + buildings = storage.getBaseBuildings(); } catch (Exception e) { errors.add("Ошибка при получении списка объектов строительства из базы :: " +e.getMessage()); System.out.println("Не удалось получить список объектов строительства из базы: " + e.getMessage()); @@ -94,19 +85,14 @@ public class CourseController { System.out.println("Получение перечня курсов из xlsx-файла ..."); XlsxDocument xlsx; try { - xlsx = client.method(HttpMethod.GET) - .uri("http://storage-rs:8282/api/document/content/" - + id + ".xlsx") - .retrieve() - .bodyToMono(new ParameterizedTypeReference (){}) - .block(); + xlsx = storage.getXlsxDocument(id); } catch (Exception e) { errors.add("Ошибка при получении списка курсов из xlsx-файла :: " +e.getMessage()); System.out.println("Не удалось получить список курсов из xlsx-файла: " + e.getMessage()); xlsx = new XlsxDocument(); } - // Полчение курсов из xlsx + // Получение курсов из xlsx List xlsx_courses = new ArrayList<>();// 7 столбец Map> map = xlsx.getData(); for (Map.Entry> entry : map.entrySet()) { @@ -115,12 +101,10 @@ public class CourseController { //Получение перечня курсов из базы System.out.println("Получение списка курсов из базы ..."); - List base_courses = client.method(HttpMethod.GET) - .uri("http://resource-service-api:8181/course/list") - .retrieve() - .bodyToMono(new ParameterizedTypeReference >(){}) - .block(); + List base_courses = storage.getBaseCourse(); + /***************************************************************************************** */ + //Удаляем повторяющиеся курсы // List set = new ArrayList<>(xlsx_courses); // Set set = new HashSet<>(xlsx_courses); @@ -159,9 +143,6 @@ public class CourseController { } System.out.println("Количество курсов для добавления в базу (xlsx_courses): " + xlsx_courses.size()); } - // Set set = Set.copyOf(xlsx_courses);// Удалили повторения - - // List courses = new ArrayList<>(set); if (xlsx_courses.size() > 0) { //Ограничиваем количество курсов, подлежащих передаче в wraper System.out.println("Общее количество курсов для добавления в базу: " + xlsx_courses.size()); diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/CretareaController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/CretareaController.java similarity index 91% rename from gates/src/main/java/ru/mlokoin/gates/controller/CretareaController.java rename to gates/src/main/java/ru/mlokoin/gates/controller/v1/CretareaController.java index fc410f3..296b762 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/CretareaController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/CretareaController.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.controller; +package ru.mlokoin.gates.controller.v1; import java.time.Duration; import java.util.ArrayList; @@ -21,10 +21,11 @@ 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.ProgramCretarea; -import ru.mlokoin.gates.model.ProgramCretareaWraper; -import ru.mlokoin.gates.model.XlsxCell; -import ru.mlokoin.gates.model.XlsxDocument; +import ru.mlokoin.gates.model.cretarea.ProgramCretarea; +import ru.mlokoin.gates.model.cretarea.ProgramCretareaWraper; +import ru.mlokoin.gates.model.fs.xlsx.XlsxCell; +import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument; +import ru.mlokoin.gates.repository.Storage; import ru.mlokoin.gates.teh.strings.Stringer; /** @@ -44,6 +45,9 @@ public class CretareaController { @Autowired private WebClient client; + @Autowired + private Storage storage; + /** * Проверка критериев xlsx-файла: * - получание списка уникальных критериев из файла @@ -60,12 +64,7 @@ public class CretareaController { public String checkCretareas(Model model, @PathVariable String id) { System.out.println("Проверка критериев, для внесения в базу ..."); System.out.println("Получение перечня критериев из xlsx-файла ..."); - XlsxDocument xlsx = client.method(HttpMethod.GET) - .uri("http://storage-rs:8282/api/document/content/" - + id + ".xlsx") - .retrieve() - .bodyToMono(new ParameterizedTypeReference (){}) - .block(); + XlsxDocument xlsx = storage.getXlsxDocument(id); //список критериев из файла ArrayList xlsx_cretareas = new ArrayList<>();//13 столбец Map> map = xlsx.getData(); diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/EducationsController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/EducationsController.java similarity index 78% rename from gates/src/main/java/ru/mlokoin/gates/controller/EducationsController.java rename to gates/src/main/java/ru/mlokoin/gates/controller/v1/EducationsController.java index ef23796..210ea70 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/EducationsController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/EducationsController.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.controller; +package ru.mlokoin.gates.controller.v1; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.ParameterizedTypeReference; @@ -10,13 +10,14 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.reactive.function.client.WebClient; -import ru.mlokoin.gates.model.XlsxDocument; +import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument; +import ru.mlokoin.gates.repository.Storage; @Controller @RequestMapping(path = "/") public class EducationsController { @Autowired - private WebClient client; + private Storage storage; /** * Предоставление пользователю формы "view-as-educations" @@ -30,12 +31,7 @@ public class EducationsController { @GetMapping("/document/view-as-educations/{id}") public String viewAsEducations(Model model, @PathVariable String id) { System.out.println("Просмотр содержимого файла ..."); - XlsxDocument xlsx = client.method(HttpMethod.GET) - .uri("http://storage-rs:8282/api/document/content/" - + id + ".xlsx") - .retrieve() - .bodyToMono(new ParameterizedTypeReference (){}) - .block(); + XlsxDocument xlsx = storage.getXlsxDocument(id); model.addAttribute("filename", xlsx.getDocument().getName()); model.addAttribute("id", id); diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/GatesController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/GatesController.java similarity index 89% rename from gates/src/main/java/ru/mlokoin/gates/controller/GatesController.java rename to gates/src/main/java/ru/mlokoin/gates/controller/v1/GatesController.java index 7a8b0b0..c4a327d 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/GatesController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/GatesController.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.controller; +package ru.mlokoin.gates.controller.v1; import java.net.URI; import java.net.URISyntaxException; @@ -19,8 +19,9 @@ import org.springframework.web.reactive.function.BodyInserters; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; -import ru.mlokoin.gates.model.Document; -import ru.mlokoin.gates.model.XlsxDocument; +import ru.mlokoin.gates.model.fs.Document; +import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument; +import ru.mlokoin.gates.repository.Storage; import ru.mlokoin.gates.teh.fs.MpFile; import org.springframework.web.bind.annotation.RequestParam; @@ -36,6 +37,9 @@ public class GatesController { @Autowired private WebClient client; + @Autowired + private Storage storage; + /** * Get list of documents from the resource service API and add to model * - endpoint: /document/list @@ -44,18 +48,9 @@ public class GatesController { * @return the view name "documents" */ @GetMapping("/document/list") - public String getMethodName(Model model) { - // Call the resource service API to get the list of documents - List docs = client.method(HttpMethod.GET) - .uri("http://resource-service-api:8181/storage-entry/list") - .retrieve() - .bodyToMono(new ParameterizedTypeReference >(){}) - .block(); - - // Добавление списка документов в модель + public String documentList(Model model) { + List docs = storage.getDocumentList(); model.addAttribute("documents", docs); - - // Возвращение ползователю обновленной страницы "documents" return "documents"; } @@ -67,11 +62,7 @@ public class GatesController { */ @GetMapping("/storage") public String getStorage(Model model){ - List docs = client.method(HttpMethod.GET) - .uri("http://storage-rs:8282/api/list-uploads") - .retrieve() - .bodyToMono(new ParameterizedTypeReference >(){}) - .block(); + List docs = storage.getDocumentList(); model.addAttribute("documents", docs); return "storage"; } diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/OrganizationController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/OrganizationController.java similarity index 85% rename from gates/src/main/java/ru/mlokoin/gates/controller/OrganizationController.java rename to gates/src/main/java/ru/mlokoin/gates/controller/v1/OrganizationController.java index ee7002a..229d0a8 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/OrganizationController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/OrganizationController.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.controller; +package ru.mlokoin.gates.controller.v1; import java.time.Duration; import java.util.ArrayList; @@ -21,12 +21,13 @@ 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.BuildingWraper; -import ru.mlokoin.gates.model.Organization; -import ru.mlokoin.gates.model.OrganizationWraper; -import ru.mlokoin.gates.model.XlsxCell; -import ru.mlokoin.gates.model.XlsxDocument; +import ru.mlokoin.gates.model.building.Building; +import ru.mlokoin.gates.model.building.BuildingWraper; +import ru.mlokoin.gates.model.fs.xlsx.XlsxCell; +import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument; +import ru.mlokoin.gates.model.organization.Organization; +import ru.mlokoin.gates.model.organization.OrganizationWraper; +import ru.mlokoin.gates.repository.Storage; import ru.mlokoin.gates.teh.strings.Stringer; @Controller @@ -35,6 +36,9 @@ public class OrganizationController { @Autowired private WebClient client; + @Autowired + private Storage storage; + @GetMapping("/check/{id}") public String checkOrganizations(Model model, @PathVariable String id){ //список ошибок @@ -43,12 +47,7 @@ public class OrganizationController { 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(); + XlsxDocument xlsx = storage.getXlsxDocument(id); ArrayList xlsx_orgs = new ArrayList<>();//1 столбец Map> map = xlsx.getData(); @@ -92,11 +91,7 @@ public class OrganizationController { * Получение перечня организаций из базы */ System.out.println("Получение списка организаций из базы ..."); - Set base_organizations = client.method(HttpMethod.GET) - .uri("http://resource-service-api:8181/organization/list") - .retrieve() - .bodyToMono(new ParameterizedTypeReference >(){}) - .block(); + Set base_organizations = new HashSet<>(storage.getBaseOrganizations()); //Удаление из списка организаций, присутствующих в базе Set xlsx_organizations_str = new HashSet<>(); diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/ProgramController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/ProgramController.java similarity index 84% rename from gates/src/main/java/ru/mlokoin/gates/controller/ProgramController.java rename to gates/src/main/java/ru/mlokoin/gates/controller/v1/ProgramController.java index 6e5064f..4df54bc 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/ProgramController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/ProgramController.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.controller; +package ru.mlokoin.gates.controller.v1; import java.time.Duration; import java.util.ArrayList; @@ -21,11 +21,12 @@ 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.Program; -import ru.mlokoin.gates.model.ProgramCretarea; -import ru.mlokoin.gates.model.ProgramWraper; -import ru.mlokoin.gates.model.XlsxCell; -import ru.mlokoin.gates.model.XlsxDocument; +import ru.mlokoin.gates.model.cretarea.ProgramCretarea; +import ru.mlokoin.gates.model.fs.xlsx.XlsxCell; +import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument; +import ru.mlokoin.gates.model.program.Program; +import ru.mlokoin.gates.model.program.ProgramWraper; +import ru.mlokoin.gates.repository.Storage; import ru.mlokoin.gates.teh.strings.Stringer; @Controller @@ -34,6 +35,9 @@ public class ProgramController { @Autowired private WebClient client; + @Autowired + private Storage storage; + /** * Проверка соответствия программ обучения из файла - содержащимся в базе * @param model @@ -45,12 +49,7 @@ public class ProgramController { 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(); + XlsxDocument xlsx = storage.getXlsxDocument(id); //список программ из файла ArrayList xlsx_programs = new ArrayList<>();//7 столбец Map> map = xlsx.getData(); @@ -75,11 +74,7 @@ public class ProgramController { //Получение перечня программ из базы System.out.println("Получение списка программ из базы ..."); - List base_programs = client.method(HttpMethod.GET) - .uri("http://resource-service-api:8181/program/list") - .retrieve() - .bodyToMono(new ParameterizedTypeReference >(){}) - .block(); + List base_programs = storage.getBasePrograms(); Set base_programSet = Set.copyOf(base_programs); //Список наименований программ из базы @@ -109,11 +104,7 @@ public class ProgramController { 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(); + List base_cretareas = storage.getBaseCretareas(); //передаем список критериев в обертку формы, для селекта pwraper.setCretareas(base_cretareas); diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/v1/TeacherController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/TeacherController.java new file mode 100644 index 0000000..412b7d3 --- /dev/null +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/TeacherController.java @@ -0,0 +1,111 @@ +package ru.mlokoin.gates.controller.v1; + +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +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.fs.xlsx.XlsxDocument; +import ru.mlokoin.gates.model.teacher.Teacher; +import ru.mlokoin.gates.model.teacher.TeacherWraper; +import ru.mlokoin.gates.repository.Storage; + +@Controller +@RequestMapping(path = "/teachers") +public class TeacherController { + @Autowired + private WebClient client; + + @Autowired + private Storage storage; + + /** + * Проверка преподавателей + * @param model + * @param id + * @return + */ + @GetMapping("/check/{id}") + public String checkTeachers(Model model, @PathVariable String id) { + System.out.println("Проверка преподавателей, для внесения в базу ..."); + + //список ошибок + List errors = new ArrayList<>(); + + //Запрашиваем данные файла из хранилища + System.out.println("Получение перечня преподавателей из xlsx-файла ..."); + XlsxDocument xlsx = storage.getXlsxDocument(id); + // список уникальных преподавателей из xlsx-файла + List xlsx_teachers = storage.getXlsxTeachers(xlsx); + // список преподавателей из базы + List base_teachers = storage.getBaseTeachers(); + // список преподавателей, отсутствующих в базе + List absent_teachers = storage.getAbsentTeachers(xlsx_teachers, base_teachers); + + /** + * Если какието преподаватели отсутствуют в базе, + * вернуть страницу проверки преподавателей + */ + if (absent_teachers.size() != 0) { + //кладем список в обертку для формы + TeacherWraper teacherWraper = new TeacherWraper(storage.sortTeachers(absent_teachers)); + + model.addAttribute("wrapTeachers", teacherWraper); + model.addAttribute("errors", errors); + model.addAttribute("id", id); + + return "teachers-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 saveTeachers(@ModelAttribute("wrapTeachers") TeacherWraper wraper, @PathVariable String id){ + /** + * Отправляем запросы на добавление новых критериев в базу + */ + System.out.println("Преподаватели для добавления в базу: " + + wraper.getList().toString()); + + for (Teacher teacher : wraper.getList()) { + //Проверка наличия флага для добавления в базу + //по полю табельного номера + // if (teacher.getEmployee_id() != ""){ + client.post() + .uri("http://resource-service-api:8181/teacher/create") + .body(Mono.just(teacher), Teacher.class) + .retrieve() + .toBodilessEntity() + .timeout(Duration.ofSeconds(2)) + .block(); + // } + } + /** + * Возвращаем пользователя на страницу перечня новых критериев + * - если он не пустой + */ + return "redirect:/teachers/check/" + id; + } +} diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/v2/Check.java b/gates/src/main/java/ru/mlokoin/gates/controller/v2/Check.java new file mode 100644 index 0000000..27baf7f --- /dev/null +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v2/Check.java @@ -0,0 +1,8 @@ +package ru.mlokoin.gates.controller.v2; + +public class Check { + /** + * + */ + +} diff --git a/gates/src/main/java/ru/mlokoin/gates/model/Building.java b/gates/src/main/java/ru/mlokoin/gates/model/building/Building.java similarity index 93% rename from gates/src/main/java/ru/mlokoin/gates/model/Building.java rename to gates/src/main/java/ru/mlokoin/gates/model/building/Building.java index b91a8e6..99049eb 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/Building.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/building/Building.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.building; import java.io.Serializable; diff --git a/gates/src/main/java/ru/mlokoin/gates/model/BuildingWraper.java b/gates/src/main/java/ru/mlokoin/gates/model/building/BuildingWraper.java similarity index 90% rename from gates/src/main/java/ru/mlokoin/gates/model/BuildingWraper.java rename to gates/src/main/java/ru/mlokoin/gates/model/building/BuildingWraper.java index c193d9e..b8a5aec 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/BuildingWraper.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/building/BuildingWraper.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.building; import java.util.ArrayList; import java.util.List; diff --git a/gates/src/main/java/ru/mlokoin/gates/model/Course.java b/gates/src/main/java/ru/mlokoin/gates/model/course/Course.java similarity index 95% rename from gates/src/main/java/ru/mlokoin/gates/model/Course.java rename to gates/src/main/java/ru/mlokoin/gates/model/course/Course.java index fe8cc3f..3b94431 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/Course.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/course/Course.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.course; import java.util.ArrayList; import java.util.Date; @@ -9,6 +9,10 @@ import java.util.Objects; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import ru.mlokoin.gates.model.building.Building; +import ru.mlokoin.gates.model.fs.xlsx.XlsxCell; +import ru.mlokoin.gates.model.program.Program; +import ru.mlokoin.gates.model.teacher.Teacher; import ru.mlokoin.gates.teh.strings.Stringer; /** @@ -235,4 +239,8 @@ public class Course { // } return true; } + + /** + * + */ } diff --git a/gates/src/main/java/ru/mlokoin/gates/model/CourseWraper.java b/gates/src/main/java/ru/mlokoin/gates/model/course/CourseWraper.java similarity index 85% rename from gates/src/main/java/ru/mlokoin/gates/model/CourseWraper.java rename to gates/src/main/java/ru/mlokoin/gates/model/course/CourseWraper.java index 1b2b983..e1260de 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/CourseWraper.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/course/CourseWraper.java @@ -1,9 +1,12 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.course; import java.util.ArrayList; import java.util.List; import lombok.Data; +import ru.mlokoin.gates.model.building.Building; +import ru.mlokoin.gates.model.program.Program; +import ru.mlokoin.gates.model.teacher.Teacher; @Data public class CourseWraper { diff --git a/gates/src/main/java/ru/mlokoin/gates/model/ProgramCretarea.java b/gates/src/main/java/ru/mlokoin/gates/model/cretarea/ProgramCretarea.java similarity index 91% rename from gates/src/main/java/ru/mlokoin/gates/model/ProgramCretarea.java rename to gates/src/main/java/ru/mlokoin/gates/model/cretarea/ProgramCretarea.java index f758aba..939c11a 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/ProgramCretarea.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/cretarea/ProgramCretarea.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.cretarea; import java.io.Serializable; diff --git a/gates/src/main/java/ru/mlokoin/gates/model/ProgramCretareaWraper.java b/gates/src/main/java/ru/mlokoin/gates/model/cretarea/ProgramCretareaWraper.java similarity index 90% rename from gates/src/main/java/ru/mlokoin/gates/model/ProgramCretareaWraper.java rename to gates/src/main/java/ru/mlokoin/gates/model/cretarea/ProgramCretareaWraper.java index be5a093..128bac6 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/ProgramCretareaWraper.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/cretarea/ProgramCretareaWraper.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.cretarea; import java.util.ArrayList; import java.util.List; diff --git a/gates/src/main/java/ru/mlokoin/gates/model/EducatonEntry.java b/gates/src/main/java/ru/mlokoin/gates/model/education/EducatonEntry.java similarity index 87% rename from gates/src/main/java/ru/mlokoin/gates/model/EducatonEntry.java rename to gates/src/main/java/ru/mlokoin/gates/model/education/EducatonEntry.java index bbd088f..88f25be 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/EducatonEntry.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/education/EducatonEntry.java @@ -1,8 +1,10 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.education; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import ru.mlokoin.gates.model.course.Course; +import ru.mlokoin.gates.model.student.Student; @NoArgsConstructor @AllArgsConstructor diff --git a/gates/src/main/java/ru/mlokoin/gates/model/Document.java b/gates/src/main/java/ru/mlokoin/gates/model/fs/Document.java similarity index 92% rename from gates/src/main/java/ru/mlokoin/gates/model/Document.java rename to gates/src/main/java/ru/mlokoin/gates/model/fs/Document.java index d77f405..763d332 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/Document.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/fs/Document.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.fs; import java.io.Serializable; diff --git a/gates/src/main/java/ru/mlokoin/gates/model/fs/Metadata.java b/gates/src/main/java/ru/mlokoin/gates/model/fs/Metadata.java new file mode 100644 index 0000000..e2486a1 --- /dev/null +++ b/gates/src/main/java/ru/mlokoin/gates/model/fs/Metadata.java @@ -0,0 +1,61 @@ +package ru.mlokoin.gates.model.fs; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Метаданные объектов файловой системы (файлов и директорий) + */ +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class Metadata { + /** + * Идентификатор + */ + private Long id; + /** + * Путь (полное) к объекту + */ + private Path path; + /** + * Имя объекта + */ + private String name; + /** + * Расширение объекта + */ + private String extension; + /** + * Тип объекта (файл/директория) + */ + private String type; + /** + * Размер объекта в байтах + */ + private long size; + /** + * Время последнего изменения объекта + */ + private long lastModified; + + public Metadata (Path path){ + this.path = path; + } + + public Metadata (Document doc){ + this.name = doc.getName(); + this.extension = doc.getExtension(); + this.path = Paths.get(doc.getPath()); + this.size = doc.getSize(); + + //this.type = doc.getType(); + //this.lastModified = doc.getLastModified(); + } +} diff --git a/gates/src/main/java/ru/mlokoin/gates/model/XlsxCell.java b/gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxCell.java similarity index 68% rename from gates/src/main/java/ru/mlokoin/gates/model/XlsxCell.java rename to gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxCell.java index 08fe136..4c6b7c2 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/XlsxCell.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxCell.java @@ -1,8 +1,9 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.fs.xlsx; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import ru.mlokoin.gates.teh.strings.Stringer; @Data @AllArgsConstructor @@ -16,6 +17,10 @@ public class XlsxCell { private String type;// STRING, NUMERIC, BOOLEAN, FORMULA public XlsxCell(String content){ - this.content = content; + if (Stringer.checkForEmpty(content)) { + this.content = ""; + } else { + this.content = Stringer.clear(content); + } } } diff --git a/gates/src/main/java/ru/mlokoin/gates/model/XlsxDocument.java b/gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxDocument.java similarity index 78% rename from gates/src/main/java/ru/mlokoin/gates/model/XlsxDocument.java rename to gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxDocument.java index cdb8182..3db10cf 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/XlsxDocument.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxDocument.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.fs.xlsx; import java.io.Serializable; import java.util.List; @@ -7,6 +7,7 @@ import java.util.Map; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import ru.mlokoin.gates.model.fs.Document; @Data @AllArgsConstructor diff --git a/gates/src/main/java/ru/mlokoin/gates/model/Organization.java b/gates/src/main/java/ru/mlokoin/gates/model/organization/Organization.java similarity index 92% rename from gates/src/main/java/ru/mlokoin/gates/model/Organization.java rename to gates/src/main/java/ru/mlokoin/gates/model/organization/Organization.java index a173822..85eb683 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/Organization.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/organization/Organization.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.organization; import java.io.Serializable; diff --git a/gates/src/main/java/ru/mlokoin/gates/model/OrganizationWraper.java b/gates/src/main/java/ru/mlokoin/gates/model/organization/OrganizationWraper.java similarity index 87% rename from gates/src/main/java/ru/mlokoin/gates/model/OrganizationWraper.java rename to gates/src/main/java/ru/mlokoin/gates/model/organization/OrganizationWraper.java index c5310d5..cd656b1 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/OrganizationWraper.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/organization/OrganizationWraper.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.organization; import java.util.ArrayList; import java.util.List; diff --git a/gates/src/main/java/ru/mlokoin/gates/model/Program.java b/gates/src/main/java/ru/mlokoin/gates/model/program/Program.java similarity index 90% rename from gates/src/main/java/ru/mlokoin/gates/model/Program.java rename to gates/src/main/java/ru/mlokoin/gates/model/program/Program.java index f40cc11..c3c64cc 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/Program.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/program/Program.java @@ -1,8 +1,9 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.program; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import ru.mlokoin.gates.model.cretarea.ProgramCretarea; @NoArgsConstructor @AllArgsConstructor diff --git a/gates/src/main/java/ru/mlokoin/gates/model/ProgramWraper.java b/gates/src/main/java/ru/mlokoin/gates/model/program/ProgramWraper.java similarity index 84% rename from gates/src/main/java/ru/mlokoin/gates/model/ProgramWraper.java rename to gates/src/main/java/ru/mlokoin/gates/model/program/ProgramWraper.java index d31478f..f6c0759 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/ProgramWraper.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/program/ProgramWraper.java @@ -1,9 +1,10 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.program; import java.util.ArrayList; import java.util.List; import lombok.Data; +import ru.mlokoin.gates.model.cretarea.ProgramCretarea; /** * Обертка для списка программ обучения - для thymeleaf diff --git a/gates/src/main/java/ru/mlokoin/gates/model/Student.java b/gates/src/main/java/ru/mlokoin/gates/model/student/Student.java similarity index 92% rename from gates/src/main/java/ru/mlokoin/gates/model/Student.java rename to gates/src/main/java/ru/mlokoin/gates/model/student/Student.java index 21634f8..f01e7c1 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/Student.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/student/Student.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.student; import java.io.Serializable; import java.util.Date; @@ -6,6 +6,7 @@ import java.util.Date; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import ru.mlokoin.gates.model.organization.Organization; @NoArgsConstructor @AllArgsConstructor diff --git a/gates/src/main/java/ru/mlokoin/gates/model/Teacher.java b/gates/src/main/java/ru/mlokoin/gates/model/teacher/Teacher.java similarity index 74% rename from gates/src/main/java/ru/mlokoin/gates/model/Teacher.java rename to gates/src/main/java/ru/mlokoin/gates/model/teacher/Teacher.java index 7ce7efd..7393ab3 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/Teacher.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/teacher/Teacher.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.teacher; import java.io.Serializable; @@ -58,32 +58,7 @@ public class Teacher implements Serializable{ * @return String fio */ public String getFullName(){ - StringBuilder sb = new StringBuilder(); - - // Добавление фамилии - if (!Stringer.checkForEmpty(getSecond_name())) { - sb.append(getSecond_name() + " "); - } else { - sb.append("Нет "); - } - - // Добавление имени - if (!Stringer.checkForEmpty(getFirst_name())) { - sb.append(getFirst_name() + " "); - } else { - sb.append("Нет "); - } - - // Добавление отчестваы - if (Stringer.checkForEmpty(getLast_name())) { - sb.append(getLast_name()); - } else { - sb.append("Нет"); - } - - // Удалить лишние пробелы в результате - String fio = Stringer.clear(sb.toString()); - return fio; + return Naimer.getFioOf(this); } /** diff --git a/gates/src/main/java/ru/mlokoin/gates/model/TeacherWraper.java b/gates/src/main/java/ru/mlokoin/gates/model/teacher/TeacherWraper.java similarity index 87% rename from gates/src/main/java/ru/mlokoin/gates/model/TeacherWraper.java rename to gates/src/main/java/ru/mlokoin/gates/model/teacher/TeacherWraper.java index f8c850d..b78a46f 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/TeacherWraper.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/teacher/TeacherWraper.java @@ -1,4 +1,4 @@ -package ru.mlokoin.gates.model; +package ru.mlokoin.gates.model.teacher; import java.util.ArrayList; import java.util.List; diff --git a/gates/src/main/java/ru/mlokoin/gates/repository/Storage.java b/gates/src/main/java/ru/mlokoin/gates/repository/Storage.java new file mode 100644 index 0000000..4a2be95 --- /dev/null +++ b/gates/src/main/java/ru/mlokoin/gates/repository/Storage.java @@ -0,0 +1,238 @@ +package ru.mlokoin.gates.repository; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; + +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Service; +import org.springframework.web.reactive.function.client.WebClient; + +import ru.mlokoin.gates.model.building.Building; +import ru.mlokoin.gates.model.course.Course; +import ru.mlokoin.gates.model.cretarea.ProgramCretarea; +import ru.mlokoin.gates.model.fs.Document; +import ru.mlokoin.gates.model.fs.xlsx.XlsxCell; +import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument; +import ru.mlokoin.gates.model.organization.Organization; +import ru.mlokoin.gates.model.program.Program; +import ru.mlokoin.gates.model.teacher.Teacher; +import ru.mlokoin.gates.teh.strings.Stringer; + +/** + * API для работы с данными из хранилища + * storage servise + * resource service + */ +@Service +public class Storage { + private String storageLink = "http://storage-rs:8282/api/document/content/"; + private String storageListLink = "http://resource-service-api:8181/storage-entry/list"; + private String programsLink = "http://resource-service-api:8181/program/list"; + private String buildingsLink = "http://resource-service-api:8181/building/list"; + private String coursesLink = "http://resource-service-api:8181/course/list"; + private String teachersLink = "http://resource-service-api:8181/teacher/list"; + private String cretareasLink = "http://resource-service-api:8181/cretarea/list"; + private String organizationsLink = "http://resource-service-api:8181/organization/list"; + + @Autowired + private WebClient client; + + /** + * Получение списка документов, размещенных в файловом хранилище + * @param id + * @return + */ + public List getDocumentList() { + System.out.println("Получение списка документов, размещенных в файловом хранилище ..."); + return client.method(HttpMethod.GET) + .uri(storageListLink) + .retrieve() + .bodyToMono(new ParameterizedTypeReference >(){}) + .block(); + } + + /** + * Получение всего содержимого xlsx-файла из файлового хранилища + * по id документа в хранилище + * + * @param id Идентфикатор файла + * @return XlsxDocument Объект с данными xlsx файла + */ + public XlsxDocument getXlsxDocument(String id) { + System.out.println("Получение всего содержимого xlsx-файла ..."); + return client.method(HttpMethod.GET) + .uri(storageLink + + id + ".xlsx") + .retrieve() + .bodyToMono(new ParameterizedTypeReference (){}) + .block(); + } + + /** + * Получение перечня программ обучения из базы + * @param id + * @return + */ + public List getBasePrograms() { + System.out.println("Получение перечня программ обучения из базы ..."); + List list = client.method(HttpMethod.GET) + .uri(programsLink) + .retrieve() + .bodyToMono(new ParameterizedTypeReference >(){}) + .block(); + return list; + } + + /** + * Получение перечня объектов строительства из базы + * @param id + * @return + */ + public List getBaseBuildings() { + System.out.println("Получение перечня объектов строительства из базы ..."); + List list = client.method(HttpMethod.GET) + .uri(buildingsLink) + .retrieve() + .bodyToMono(new ParameterizedTypeReference >(){}) + .block(); + return list; + } + + /** + * Получение списка курсов из базы данных + */ + public List getBaseCourse() { + System.out.println("Получение списка курсов из базы данных ..."); + List list = client.method(HttpMethod.GET) + .uri(coursesLink) + .retrieve() + .bodyToMono(new ParameterizedTypeReference >(){}) + .block(); + return list; + } + + /** + * Получение перечня преподавателей из базы данных + */ + public List getBaseTeachers() { + System.out.println("Получение перечня преподавателей из базы данных ..."); + List list = client.method(HttpMethod.GET) + .uri(teachersLink) + .retrieve() + .bodyToMono(new ParameterizedTypeReference >(){}) + .block(); + return list; + } + + /** + * Получение перечня преподавателей из xlsx-файла + * + * @return > Перечень преподавателей, полученных из xlsx-файла + * В объектах перечня незаполнены поля id + * Объекты сформированы на основании ФИО преподавателя, указанного в xlsx-файле + * + */ + public List getXlsxTeachers(XlsxDocument xlsx) { + System.out.println("Получение перечня преподавателей из xlsx-файла ..."); + List list = new ArrayList<>(); + // получаем данные в виде мапы строк + Map> map = xlsx.getData(); + + // удаляем строку заголовков + map.remove(0); + + for (Map.Entry> entry : map.entrySet()) { + String fio = Stringer.clear(entry + .getValue() + .get(18) + .getContent()); + list.add(new Teacher(fio)); + } + + // удаляем дубликаты + Set set = new HashSet<>(list); + list = new ArrayList<>(set); + return list; + } + + /** + * Получение списка преподавателей, отсутствующих в базе данных (новых преподавателей) + * + * @param xlsxList список уникальных преподаватетей из файла + * @param baseList список преподавателей из базы + * @return List + */ + public List getAbsentTeachers(List xlsxList, List baseList) { + System.out.println("Получение списка преподавателей, отсутствующих в базе данных ..."); + if (xlsxList == null || xlsxList.isEmpty()) { + return new ArrayList(); + } + List result = new ArrayList<>(xlsxList); + if (baseList == null || baseList.isEmpty()) { + return result; + } + + for (Teacher xlsxTeacher : xlsxList) { + for (Teacher baseTeacher : baseList) { + if (xlsxTeacher.getFullName().equals(baseTeacher.getFullName())) { + result.remove(xlsxTeacher); + break; + } + } + } + return result; + } + + public List sortTeachers(List list) { + System.out.println("Сортировка списка преподавателей ..."); + Comparator compareBySecondName = Comparator + .comparing(Teacher::getSecond_name) + .thenComparing(Teacher::getFirst_name) + .thenComparing(Teacher::getLast_name); + return list.stream() + .sorted(compareBySecondName) + .collect(Collectors.toCollection(ArrayList::new)); + } + + + /** + * Получение списка критериев из баз данных + */ + public List getBaseCretareas() { + System.out.println("Получение списка критериев из баз данных ..."); + List list = client.method(HttpMethod.GET) + .uri(cretareasLink) + .retrieve() + .bodyToMono(new ParameterizedTypeReference >(){}) + .block(); + return list; + } + + /** + * Получение списка организаций из базы данных + */ + public List getBaseOrganizations() { + System.out.println("Получение списка организаций из базы данных ..."); + List list = client.method(HttpMethod.GET) + .uri(organizationsLink) + .retrieve() + .bodyToMono(new ParameterizedTypeReference >(){}) + .block(); + return list; + } + + + + + + + +} diff --git a/gates/src/main/java/ru/mlokoin/gates/teh/strings/Arrayer.java b/gates/src/main/java/ru/mlokoin/gates/teh/strings/Arrayer.java index 9bae49a..de8e811 100644 --- a/gates/src/main/java/ru/mlokoin/gates/teh/strings/Arrayer.java +++ b/gates/src/main/java/ru/mlokoin/gates/teh/strings/Arrayer.java @@ -46,4 +46,6 @@ public class Arrayer { List result = list.stream().distinct().toList(); return result; } + + } diff --git a/gates/src/main/java/ru/mlokoin/gates/teh/strings/Naimer.java b/gates/src/main/java/ru/mlokoin/gates/teh/strings/Naimer.java index b20638f..684cf90 100644 --- a/gates/src/main/java/ru/mlokoin/gates/teh/strings/Naimer.java +++ b/gates/src/main/java/ru/mlokoin/gates/teh/strings/Naimer.java @@ -1,6 +1,6 @@ package ru.mlokoin.gates.teh.strings; -import ru.mlokoin.gates.model.Teacher; +import ru.mlokoin.gates.model.teacher.Teacher; /** * Обработка строк, содержащих сведения о ФИО