Browse Source

teacher-controller remake

master
esoe 4 months ago
parent
commit
03cffb5901
  1. 2
      gates/src/main/java/ru/mlokoin/gates/controller/Hello.java
  2. 293
      gates/src/main/java/ru/mlokoin/gates/controller/TeacherController.java
  3. 21
      gates/src/main/java/ru/mlokoin/gates/controller/v1/BuildingController.java
  4. 59
      gates/src/main/java/ru/mlokoin/gates/controller/v1/CourseController.java
  5. 21
      gates/src/main/java/ru/mlokoin/gates/controller/v1/CretareaController.java
  6. 14
      gates/src/main/java/ru/mlokoin/gates/controller/v1/EducationsController.java
  7. 29
      gates/src/main/java/ru/mlokoin/gates/controller/v1/GatesController.java
  8. 31
      gates/src/main/java/ru/mlokoin/gates/controller/v1/OrganizationController.java
  9. 35
      gates/src/main/java/ru/mlokoin/gates/controller/v1/ProgramController.java
  10. 111
      gates/src/main/java/ru/mlokoin/gates/controller/v1/TeacherController.java
  11. 8
      gates/src/main/java/ru/mlokoin/gates/controller/v2/Check.java
  12. 2
      gates/src/main/java/ru/mlokoin/gates/model/building/Building.java
  13. 2
      gates/src/main/java/ru/mlokoin/gates/model/building/BuildingWraper.java
  14. 10
      gates/src/main/java/ru/mlokoin/gates/model/course/Course.java
  15. 5
      gates/src/main/java/ru/mlokoin/gates/model/course/CourseWraper.java
  16. 2
      gates/src/main/java/ru/mlokoin/gates/model/cretarea/ProgramCretarea.java
  17. 2
      gates/src/main/java/ru/mlokoin/gates/model/cretarea/ProgramCretareaWraper.java
  18. 4
      gates/src/main/java/ru/mlokoin/gates/model/education/EducatonEntry.java
  19. 2
      gates/src/main/java/ru/mlokoin/gates/model/fs/Document.java
  20. 61
      gates/src/main/java/ru/mlokoin/gates/model/fs/Metadata.java
  21. 9
      gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxCell.java
  22. 3
      gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxDocument.java
  23. 2
      gates/src/main/java/ru/mlokoin/gates/model/organization/Organization.java
  24. 2
      gates/src/main/java/ru/mlokoin/gates/model/organization/OrganizationWraper.java
  25. 3
      gates/src/main/java/ru/mlokoin/gates/model/program/Program.java
  26. 3
      gates/src/main/java/ru/mlokoin/gates/model/program/ProgramWraper.java
  27. 3
      gates/src/main/java/ru/mlokoin/gates/model/student/Student.java
  28. 29
      gates/src/main/java/ru/mlokoin/gates/model/teacher/Teacher.java
  29. 2
      gates/src/main/java/ru/mlokoin/gates/model/teacher/TeacherWraper.java
  30. 238
      gates/src/main/java/ru/mlokoin/gates/repository/Storage.java
  31. 2
      gates/src/main/java/ru/mlokoin/gates/teh/strings/Arrayer.java
  32. 2
      gates/src/main/java/ru/mlokoin/gates/teh/strings/Naimer.java

2
gates/src/main/java/ru/mlokoin/gates/controller/Hello.java

@ -16,6 +16,4 @@ public class Hello {
public String hello(){ public String hello(){
return "hello"; return "hello";
} }
} }

293
gates/src/main/java/ru/mlokoin/gates/controller/TeacherController.java

@ -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<String> 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 <XlsxDocument>(){})
.block();
// получаем данные в виде мапы строк
Map<Integer, List<XlsxCell>> map = xlsx.getData();
// удаляем строку заголовков
map.remove(0);
System.out.println("Количество записей: " + map.size());
Set<String> xlsx_strings = new HashSet<>();//строки для браузера
Set<Teacher> xlsx_teachers = new HashSet<>();//объекты для обработки
//перебираем мапу
for (Map.Entry<Integer, List<XlsxCell>> 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<Teacher> base_teachers = client.method(HttpMethod.GET)
.uri("http://resource-service-api:8181/teacher/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <Set<Teacher>>(){})
.block();
/**
* Удаление преподавателей присутствующих в базе
* сравнение по объектам не проходит:
* - в объектах xlsx отсутствуют id, которые приходят с объектами из базы
* - менять Teacher.equals не хочется, он на lombok завязан
* - перевожу ФИО в строку и сравниваю строки!!!
*/
// xlsx_teachers.removeAll(base_teachers);
Set<String> xlsx_teachers_str = xlsx_strings;
Set<String> 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<Teacher> 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;
}
}

21
gates/src/main/java/ru/mlokoin/gates/controller/BuildingController.java → 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.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
@ -21,10 +21,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import ru.mlokoin.gates.model.Building; import ru.mlokoin.gates.model.building.Building;
import ru.mlokoin.gates.model.BuildingWraper; import ru.mlokoin.gates.model.building.BuildingWraper;
import ru.mlokoin.gates.model.XlsxCell; import ru.mlokoin.gates.model.fs.xlsx.XlsxCell;
import ru.mlokoin.gates.model.XlsxDocument; import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument;
import ru.mlokoin.gates.repository.Storage;
import ru.mlokoin.gates.teh.strings.Stringer; import ru.mlokoin.gates.teh.strings.Stringer;
@Controller @Controller
@ -33,18 +34,16 @@ public class BuildingController {
@Autowired @Autowired
private WebClient client; private WebClient client;
@Autowired
private Storage storage;
@GetMapping("/check/{id}") @GetMapping("/check/{id}")
public String checkBuildings(Model model, @PathVariable String id){ public String checkBuildings(Model model, @PathVariable String id){
List<String> errors = new ArrayList<>();//список ошибок List<String> errors = new ArrayList<>();//список ошибок
System.out.println("Проверка объектов строительства, для внесения в базу ..."); System.out.println("Проверка объектов строительства, для внесения в базу ...");
System.out.println("Получение объектов строительства из xlsx-файла ..."); System.out.println("Получение объектов строительства из xlsx-файла ...");
//получение данных файла в переменную xlsx //получение данных файла в переменную xlsx
XlsxDocument xlsx = client.method(HttpMethod.GET) XlsxDocument xlsx = storage.getXlsxDocument(id);
.uri("http://storage-rs:8282/api/document/content/"
+ id + ".xlsx")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <XlsxDocument>(){})
.block();
ArrayList<Building> xlsx_buildings = new ArrayList<>();//19 столбец ArrayList<Building> xlsx_buildings = new ArrayList<>();//19 столбец
Map<Integer, List<XlsxCell>> map = xlsx.getData(); Map<Integer, List<XlsxCell>> map = xlsx.getData();

59
gates/src/main/java/ru/mlokoin/gates/controller/CourseController.java → 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.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
@ -23,14 +23,14 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import ru.mlokoin.gates.model.Building; import ru.mlokoin.gates.model.building.Building;
import ru.mlokoin.gates.model.Course; import ru.mlokoin.gates.model.course.Course;
import ru.mlokoin.gates.model.CourseWraper; import ru.mlokoin.gates.model.course.CourseWraper;
import ru.mlokoin.gates.model.Program; import ru.mlokoin.gates.model.fs.xlsx.XlsxCell;
import ru.mlokoin.gates.model.Teacher; import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument;
import ru.mlokoin.gates.model.XlsxCell; import ru.mlokoin.gates.model.program.Program;
import ru.mlokoin.gates.model.XlsxDocument; import ru.mlokoin.gates.model.teacher.Teacher;
import ru.mlokoin.gates.teh.strings.Stringer; import ru.mlokoin.gates.repository.Storage;
@Controller @Controller
@RequestMapping(path = "/courses") @RequestMapping(path = "/courses")
@ -38,6 +38,9 @@ public class CourseController {
@Autowired @Autowired
private WebClient client; private WebClient client;
@Autowired
private Storage storage;
@GetMapping("/check/{id}") @GetMapping("/check/{id}")
public String checkCoursess(Model model, @PathVariable String id) { public String checkCoursess(Model model, @PathVariable String id) {
System.out.println("Проверка курсов, для внесения в базу ..."); System.out.println("Проверка курсов, для внесения в базу ...");
@ -49,11 +52,7 @@ public class CourseController {
System.out.println("Получение перечня преподавателей из базы ..."); System.out.println("Получение перечня преподавателей из базы ...");
List<Teacher> teachers; List<Teacher> teachers;
try { try {
teachers = client.method(HttpMethod.GET) teachers = storage.getBaseTeachers();
.uri("http://resource-service-api:8181/teacher/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Teacher>>(){})
.block();
} catch (Exception e) { } catch (Exception e) {
errors.add("Ошибка при получении списка преподавателей из базы :: " +e.getMessage()); errors.add("Ошибка при получении списка преподавателей из базы :: " +e.getMessage());
System.out.println("Не удалось получить список преподавателей из базы: " + e.getMessage()); System.out.println("Не удалось получить список преподавателей из базы: " + e.getMessage());
@ -64,11 +63,7 @@ public class CourseController {
System.out.println("Получение перечня программ обучения из базы ..."); System.out.println("Получение перечня программ обучения из базы ...");
List<Program> programs; List<Program> programs;
try { try {
programs = client.method(HttpMethod.GET) programs = storage.getBasePrograms();
.uri("http://resource-service-api:8181/program/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Program>>(){})
.block();
} catch (Exception e) { } catch (Exception e) {
errors.add("Ошибка при получении списка программ обучения из базы :: " +e.getMessage()); errors.add("Ошибка при получении списка программ обучения из базы :: " +e.getMessage());
System.out.println("Не удалось получить список программ обучения из базы: " + e.getMessage()); System.out.println("Не удалось получить список программ обучения из базы: " + e.getMessage());
@ -79,11 +74,7 @@ public class CourseController {
System.out.println("Получение перечня объектов строительства из базы ..."); System.out.println("Получение перечня объектов строительства из базы ...");
List<Building> buildings; List<Building> buildings;
try { try {
buildings = client.method(HttpMethod.GET) buildings = storage.getBaseBuildings();
.uri("http://resource-service-api:8181/building/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Building>>(){})
.block();
} catch (Exception e) { } catch (Exception e) {
errors.add("Ошибка при получении списка объектов строительства из базы :: " +e.getMessage()); errors.add("Ошибка при получении списка объектов строительства из базы :: " +e.getMessage());
System.out.println("Не удалось получить список объектов строительства из базы: " + e.getMessage()); System.out.println("Не удалось получить список объектов строительства из базы: " + e.getMessage());
@ -94,19 +85,14 @@ public class CourseController {
System.out.println("Получение перечня курсов из xlsx-файла ..."); System.out.println("Получение перечня курсов из xlsx-файла ...");
XlsxDocument xlsx; XlsxDocument xlsx;
try { try {
xlsx = client.method(HttpMethod.GET) xlsx = storage.getXlsxDocument(id);
.uri("http://storage-rs:8282/api/document/content/"
+ id + ".xlsx")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <XlsxDocument>(){})
.block();
} catch (Exception e) { } catch (Exception e) {
errors.add("Ошибка при получении списка курсов из xlsx-файла :: " +e.getMessage()); errors.add("Ошибка при получении списка курсов из xlsx-файла :: " +e.getMessage());
System.out.println("Не удалось получить список курсов из xlsx-файла: " + e.getMessage()); System.out.println("Не удалось получить список курсов из xlsx-файла: " + e.getMessage());
xlsx = new XlsxDocument(); xlsx = new XlsxDocument();
} }
// Полчение курсов из xlsx // Получение курсов из xlsx
List<Course> xlsx_courses = new ArrayList<>();// 7 столбец List<Course> xlsx_courses = new ArrayList<>();// 7 столбец
Map<Integer, List<XlsxCell>> map = xlsx.getData(); Map<Integer, List<XlsxCell>> map = xlsx.getData();
for (Map.Entry<Integer, List<XlsxCell>> entry : map.entrySet()) { for (Map.Entry<Integer, List<XlsxCell>> entry : map.entrySet()) {
@ -115,11 +101,9 @@ public class CourseController {
//Получение перечня курсов из базы //Получение перечня курсов из базы
System.out.println("Получение списка курсов из базы ..."); System.out.println("Получение списка курсов из базы ...");
List<Course> base_courses = client.method(HttpMethod.GET) List<Course> base_courses = storage.getBaseCourse();
.uri("http://resource-service-api:8181/course/list")
.retrieve() /***************************************************************************************** */
.bodyToMono(new ParameterizedTypeReference <List<Course>>(){})
.block();
//Удаляем повторяющиеся курсы //Удаляем повторяющиеся курсы
// List<Course> set = new ArrayList<>(xlsx_courses); // List<Course> set = new ArrayList<>(xlsx_courses);
@ -159,9 +143,6 @@ public class CourseController {
} }
System.out.println("Количество курсов для добавления в базу (xlsx_courses): " + xlsx_courses.size()); System.out.println("Количество курсов для добавления в базу (xlsx_courses): " + xlsx_courses.size());
} }
// Set<Course> set = Set.copyOf(xlsx_courses);// Удалили повторения
// List<Course> courses = new ArrayList<>(set);
if (xlsx_courses.size() > 0) { if (xlsx_courses.size() > 0) {
//Ограничиваем количество курсов, подлежащих передаче в wraper //Ограничиваем количество курсов, подлежащих передаче в wraper
System.out.println("Общее количество курсов для добавления в базу: " + xlsx_courses.size()); System.out.println("Общее количество курсов для добавления в базу: " + xlsx_courses.size());

21
gates/src/main/java/ru/mlokoin/gates/controller/CretareaController.java → 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.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
@ -21,10 +21,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import ru.mlokoin.gates.model.ProgramCretarea; import ru.mlokoin.gates.model.cretarea.ProgramCretarea;
import ru.mlokoin.gates.model.ProgramCretareaWraper; import ru.mlokoin.gates.model.cretarea.ProgramCretareaWraper;
import ru.mlokoin.gates.model.XlsxCell; import ru.mlokoin.gates.model.fs.xlsx.XlsxCell;
import ru.mlokoin.gates.model.XlsxDocument; import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument;
import ru.mlokoin.gates.repository.Storage;
import ru.mlokoin.gates.teh.strings.Stringer; import ru.mlokoin.gates.teh.strings.Stringer;
/** /**
@ -44,6 +45,9 @@ public class CretareaController {
@Autowired @Autowired
private WebClient client; private WebClient client;
@Autowired
private Storage storage;
/** /**
* Проверка критериев xlsx-файла: * Проверка критериев xlsx-файла:
* - получание списка уникальных критериев из файла * - получание списка уникальных критериев из файла
@ -60,12 +64,7 @@ public class CretareaController {
public String checkCretareas(Model model, @PathVariable String id) { public String checkCretareas(Model model, @PathVariable String id) {
System.out.println("Проверка критериев, для внесения в базу ..."); System.out.println("Проверка критериев, для внесения в базу ...");
System.out.println("Получение перечня критериев из xlsx-файла ..."); System.out.println("Получение перечня критериев из xlsx-файла ...");
XlsxDocument xlsx = client.method(HttpMethod.GET) XlsxDocument xlsx = storage.getXlsxDocument(id);
.uri("http://storage-rs:8282/api/document/content/"
+ id + ".xlsx")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <XlsxDocument>(){})
.block();
//список критериев из файла //список критериев из файла
ArrayList<ProgramCretarea> xlsx_cretareas = new ArrayList<>();//13 столбец ArrayList<ProgramCretarea> xlsx_cretareas = new ArrayList<>();//13 столбец
Map<Integer, List<XlsxCell>> map = xlsx.getData(); Map<Integer, List<XlsxCell>> map = xlsx.getData();

14
gates/src/main/java/ru/mlokoin/gates/controller/EducationsController.java → 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.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference; 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.bind.annotation.RequestMapping;
import org.springframework.web.reactive.function.client.WebClient; 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 @Controller
@RequestMapping(path = "/") @RequestMapping(path = "/")
public class EducationsController { public class EducationsController {
@Autowired @Autowired
private WebClient client; private Storage storage;
/** /**
* Предоставление пользователю формы "view-as-educations" * Предоставление пользователю формы "view-as-educations"
@ -30,12 +31,7 @@ public class EducationsController {
@GetMapping("/document/view-as-educations/{id}") @GetMapping("/document/view-as-educations/{id}")
public String viewAsEducations(Model model, @PathVariable String id) { public String viewAsEducations(Model model, @PathVariable String id) {
System.out.println("Просмотр содержимого файла ..."); System.out.println("Просмотр содержимого файла ...");
XlsxDocument xlsx = client.method(HttpMethod.GET) XlsxDocument xlsx = storage.getXlsxDocument(id);
.uri("http://storage-rs:8282/api/document/content/"
+ id + ".xlsx")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <XlsxDocument>(){})
.block();
model.addAttribute("filename", xlsx.getDocument().getName()); model.addAttribute("filename", xlsx.getDocument().getName());
model.addAttribute("id", id); model.addAttribute("id", id);

29
gates/src/main/java/ru/mlokoin/gates/controller/GatesController.java → 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.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
@ -19,8 +19,9 @@ import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import ru.mlokoin.gates.model.Document; import ru.mlokoin.gates.model.fs.Document;
import ru.mlokoin.gates.model.XlsxDocument; import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument;
import ru.mlokoin.gates.repository.Storage;
import ru.mlokoin.gates.teh.fs.MpFile; import ru.mlokoin.gates.teh.fs.MpFile;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@ -36,6 +37,9 @@ public class GatesController {
@Autowired @Autowired
private WebClient client; private WebClient client;
@Autowired
private Storage storage;
/** /**
* Get list of documents from the resource service API and add to model * Get list of documents from the resource service API and add to model
* - endpoint: /document/list * - endpoint: /document/list
@ -44,18 +48,9 @@ public class GatesController {
* @return the view name "documents" * @return the view name "documents"
*/ */
@GetMapping("/document/list") @GetMapping("/document/list")
public String getMethodName(Model model) { public String documentList(Model model) {
// Call the resource service API to get the list of documents List<Document> docs = storage.getDocumentList();
List<Document> docs = client.method(HttpMethod.GET)
.uri("http://resource-service-api:8181/storage-entry/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Document>>(){})
.block();
// Добавление списка документов в модель
model.addAttribute("documents", docs); model.addAttribute("documents", docs);
// Возвращение ползователю обновленной страницы "documents"
return "documents"; return "documents";
} }
@ -67,11 +62,7 @@ public class GatesController {
*/ */
@GetMapping("/storage") @GetMapping("/storage")
public String getStorage(Model model){ public String getStorage(Model model){
List<Document> docs = client.method(HttpMethod.GET) List<Document> docs = storage.getDocumentList();
.uri("http://storage-rs:8282/api/list-uploads")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Document>>(){})
.block();
model.addAttribute("documents", docs); model.addAttribute("documents", docs);
return "storage"; return "storage";
} }

31
gates/src/main/java/ru/mlokoin/gates/controller/OrganizationController.java → 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.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
@ -21,12 +21,13 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import ru.mlokoin.gates.model.Building; import ru.mlokoin.gates.model.building.Building;
import ru.mlokoin.gates.model.BuildingWraper; import ru.mlokoin.gates.model.building.BuildingWraper;
import ru.mlokoin.gates.model.Organization; import ru.mlokoin.gates.model.fs.xlsx.XlsxCell;
import ru.mlokoin.gates.model.OrganizationWraper; import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument;
import ru.mlokoin.gates.model.XlsxCell; import ru.mlokoin.gates.model.organization.Organization;
import ru.mlokoin.gates.model.XlsxDocument; import ru.mlokoin.gates.model.organization.OrganizationWraper;
import ru.mlokoin.gates.repository.Storage;
import ru.mlokoin.gates.teh.strings.Stringer; import ru.mlokoin.gates.teh.strings.Stringer;
@Controller @Controller
@ -35,6 +36,9 @@ public class OrganizationController {
@Autowired @Autowired
private WebClient client; private WebClient client;
@Autowired
private Storage storage;
@GetMapping("/check/{id}") @GetMapping("/check/{id}")
public String checkOrganizations(Model model, @PathVariable String id){ public String checkOrganizations(Model model, @PathVariable String id){
//список ошибок //список ошибок
@ -43,12 +47,7 @@ public class OrganizationController {
System.out.println("Проверка организаций, для внесения в базу ..."); System.out.println("Проверка организаций, для внесения в базу ...");
System.out.println("Получение списка организаций из xlsx-файла ..."); System.out.println("Получение списка организаций из xlsx-файла ...");
//получение данных файла в переменную xlsx //получение данных файла в переменную xlsx
XlsxDocument xlsx = client.method(HttpMethod.GET) XlsxDocument xlsx = storage.getXlsxDocument(id);
.uri("http://storage-rs:8282/api/document/content/"
+ id + ".xlsx")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <XlsxDocument>(){})
.block();
ArrayList<Organization> xlsx_orgs = new ArrayList<>();//1 столбец ArrayList<Organization> xlsx_orgs = new ArrayList<>();//1 столбец
Map<Integer, List<XlsxCell>> map = xlsx.getData(); Map<Integer, List<XlsxCell>> map = xlsx.getData();
@ -92,11 +91,7 @@ public class OrganizationController {
* Получение перечня организаций из базы * Получение перечня организаций из базы
*/ */
System.out.println("Получение списка организаций из базы ..."); System.out.println("Получение списка организаций из базы ...");
Set<Organization> base_organizations = client.method(HttpMethod.GET) Set<Organization> base_organizations = new HashSet<>(storage.getBaseOrganizations());
.uri("http://resource-service-api:8181/organization/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <Set<Organization>>(){})
.block();
//Удаление из списка организаций, присутствующих в базе //Удаление из списка организаций, присутствующих в базе
Set<String> xlsx_organizations_str = new HashSet<>(); Set<String> xlsx_organizations_str = new HashSet<>();

35
gates/src/main/java/ru/mlokoin/gates/controller/ProgramController.java → 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.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
@ -21,11 +21,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import ru.mlokoin.gates.model.Program; import ru.mlokoin.gates.model.cretarea.ProgramCretarea;
import ru.mlokoin.gates.model.ProgramCretarea; import ru.mlokoin.gates.model.fs.xlsx.XlsxCell;
import ru.mlokoin.gates.model.ProgramWraper; import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument;
import ru.mlokoin.gates.model.XlsxCell; import ru.mlokoin.gates.model.program.Program;
import ru.mlokoin.gates.model.XlsxDocument; import ru.mlokoin.gates.model.program.ProgramWraper;
import ru.mlokoin.gates.repository.Storage;
import ru.mlokoin.gates.teh.strings.Stringer; import ru.mlokoin.gates.teh.strings.Stringer;
@Controller @Controller
@ -34,6 +35,9 @@ public class ProgramController {
@Autowired @Autowired
private WebClient client; private WebClient client;
@Autowired
private Storage storage;
/** /**
* Проверка соответствия программ обучения из файла - содержащимся в базе * Проверка соответствия программ обучения из файла - содержащимся в базе
* @param model * @param model
@ -45,12 +49,7 @@ public class ProgramController {
System.out.println("Проверка программ обучения, для внесения в базу ..."); System.out.println("Проверка программ обучения, для внесения в базу ...");
System.out.println("Получение перечня программ из xlsx-файла ..."); System.out.println("Получение перечня программ из xlsx-файла ...");
//получение данных файла в переменную xlsx //получение данных файла в переменную xlsx
XlsxDocument xlsx = client.method(HttpMethod.GET) XlsxDocument xlsx = storage.getXlsxDocument(id);
.uri("http://storage-rs:8282/api/document/content/"
+ id + ".xlsx")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <XlsxDocument>(){})
.block();
//список программ из файла //список программ из файла
ArrayList<Program> xlsx_programs = new ArrayList<>();//7 столбец ArrayList<Program> xlsx_programs = new ArrayList<>();//7 столбец
Map<Integer, List<XlsxCell>> map = xlsx.getData(); Map<Integer, List<XlsxCell>> map = xlsx.getData();
@ -75,11 +74,7 @@ public class ProgramController {
//Получение перечня программ из базы //Получение перечня программ из базы
System.out.println("Получение списка программ из базы ..."); System.out.println("Получение списка программ из базы ...");
List<Program> base_programs = client.method(HttpMethod.GET) List<Program> base_programs = storage.getBasePrograms();
.uri("http://resource-service-api:8181/program/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Program>>(){})
.block();
Set<Program> base_programSet = Set.copyOf(base_programs); Set<Program> base_programSet = Set.copyOf(base_programs);
//Список наименований программ из базы //Список наименований программ из базы
@ -109,11 +104,7 @@ public class ProgramController {
ProgramWraper pwraper = new ProgramWraper(list); ProgramWraper pwraper = new ProgramWraper(list);
//подготавливаем список критериев //подготавливаем список критериев
List<ProgramCretarea> base_cretareas = client.method(HttpMethod.GET) List<ProgramCretarea> base_cretareas = storage.getBaseCretareas();
.uri("http://resource-service-api:8181/cretarea/list")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<ProgramCretarea>>(){})
.block();
//передаем список критериев в обертку формы, для селекта //передаем список критериев в обертку формы, для селекта
pwraper.setCretareas(base_cretareas); pwraper.setCretareas(base_cretareas);

111
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<String> errors = new ArrayList<>();
//Запрашиваем данные файла из хранилища
System.out.println("Получение перечня преподавателей из xlsx-файла ...");
XlsxDocument xlsx = storage.getXlsxDocument(id);
// список уникальных преподавателей из xlsx-файла
List<Teacher> xlsx_teachers = storage.getXlsxTeachers(xlsx);
// список преподавателей из базы
List<Teacher> base_teachers = storage.getBaseTeachers();
// список преподавателей, отсутствующих в базе
List<Teacher> 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;
}
}

8
gates/src/main/java/ru/mlokoin/gates/controller/v2/Check.java

@ -0,0 +1,8 @@
package ru.mlokoin.gates.controller.v2;
public class Check {
/**
*
*/
}

2
gates/src/main/java/ru/mlokoin/gates/model/Building.java → 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; import java.io.Serializable;

2
gates/src/main/java/ru/mlokoin/gates/model/BuildingWraper.java → 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.ArrayList;
import java.util.List; import java.util.List;

10
gates/src/main/java/ru/mlokoin/gates/model/Course.java → 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.ArrayList;
import java.util.Date; import java.util.Date;
@ -9,6 +9,10 @@ import java.util.Objects;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; 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; import ru.mlokoin.gates.teh.strings.Stringer;
/** /**
@ -235,4 +239,8 @@ public class Course {
// } // }
return true; return true;
} }
/**
*
*/
} }

5
gates/src/main/java/ru/mlokoin/gates/model/CourseWraper.java → 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.ArrayList;
import java.util.List; import java.util.List;
import lombok.Data; 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 @Data
public class CourseWraper { public class CourseWraper {

2
gates/src/main/java/ru/mlokoin/gates/model/ProgramCretarea.java → 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; import java.io.Serializable;

2
gates/src/main/java/ru/mlokoin/gates/model/ProgramCretareaWraper.java → 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.ArrayList;
import java.util.List; import java.util.List;

4
gates/src/main/java/ru/mlokoin/gates/model/EducatonEntry.java → 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.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import ru.mlokoin.gates.model.course.Course;
import ru.mlokoin.gates.model.student.Student;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor

2
gates/src/main/java/ru/mlokoin/gates/model/Document.java → 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; import java.io.Serializable;

61
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();
}
}

9
gates/src/main/java/ru/mlokoin/gates/model/XlsxCell.java → 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.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import ru.mlokoin.gates.teh.strings.Stringer;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@ -16,6 +17,10 @@ public class XlsxCell {
private String type;// STRING, NUMERIC, BOOLEAN, FORMULA private String type;// STRING, NUMERIC, BOOLEAN, FORMULA
public XlsxCell(String content){ public XlsxCell(String content){
this.content = content; if (Stringer.checkForEmpty(content)) {
this.content = "";
} else {
this.content = Stringer.clear(content);
}
} }
} }

3
gates/src/main/java/ru/mlokoin/gates/model/XlsxDocument.java → 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.io.Serializable;
import java.util.List; import java.util.List;
@ -7,6 +7,7 @@ import java.util.Map;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import ru.mlokoin.gates.model.fs.Document;
@Data @Data
@AllArgsConstructor @AllArgsConstructor

2
gates/src/main/java/ru/mlokoin/gates/model/Organization.java → 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; import java.io.Serializable;

2
gates/src/main/java/ru/mlokoin/gates/model/OrganizationWraper.java → 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.ArrayList;
import java.util.List; import java.util.List;

3
gates/src/main/java/ru/mlokoin/gates/model/Program.java → 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.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import ru.mlokoin.gates.model.cretarea.ProgramCretarea;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor

3
gates/src/main/java/ru/mlokoin/gates/model/ProgramWraper.java → 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.ArrayList;
import java.util.List; import java.util.List;
import lombok.Data; import lombok.Data;
import ru.mlokoin.gates.model.cretarea.ProgramCretarea;
/** /**
* Обертка для списка программ обучения - для thymeleaf * Обертка для списка программ обучения - для thymeleaf

3
gates/src/main/java/ru/mlokoin/gates/model/Student.java → 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.io.Serializable;
import java.util.Date; import java.util.Date;
@ -6,6 +6,7 @@ import java.util.Date;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import ru.mlokoin.gates.model.organization.Organization;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor

29
gates/src/main/java/ru/mlokoin/gates/model/Teacher.java → 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; import java.io.Serializable;
@ -58,32 +58,7 @@ public class Teacher implements Serializable{
* @return String fio * @return String fio
*/ */
public String getFullName(){ public String getFullName(){
StringBuilder sb = new StringBuilder(); return Naimer.getFioOf(this);
// Добавление фамилии
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;
} }
/** /**

2
gates/src/main/java/ru/mlokoin/gates/model/TeacherWraper.java → 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.ArrayList;
import java.util.List; import java.util.List;

238
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<Document> getDocumentList() {
System.out.println("Получение списка документов, размещенных в файловом хранилище ...");
return client.method(HttpMethod.GET)
.uri(storageListLink)
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Document>>(){})
.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 <XlsxDocument>(){})
.block();
}
/**
* Получение перечня программ обучения из базы
* @param id
* @return
*/
public List<Program> getBasePrograms() {
System.out.println("Получение перечня программ обучения из базы ...");
List<Program> list = client.method(HttpMethod.GET)
.uri(programsLink)
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Program>>(){})
.block();
return list;
}
/**
* Получение перечня объектов строительства из базы
* @param id
* @return
*/
public List<Building> getBaseBuildings() {
System.out.println("Получение перечня объектов строительства из базы ...");
List<Building> list = client.method(HttpMethod.GET)
.uri(buildingsLink)
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Building>>(){})
.block();
return list;
}
/**
* Получение списка курсов из базы данных
*/
public List<Course> getBaseCourse() {
System.out.println("Получение списка курсов из базы данных ...");
List<Course> list = client.method(HttpMethod.GET)
.uri(coursesLink)
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Course>>(){})
.block();
return list;
}
/**
* Получение перечня преподавателей из базы данных
*/
public List<Teacher> getBaseTeachers() {
System.out.println("Получение перечня преподавателей из базы данных ...");
List<Teacher> list = client.method(HttpMethod.GET)
.uri(teachersLink)
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Teacher>>(){})
.block();
return list;
}
/**
* Получение перечня преподавателей из xlsx-файла
*
* @return <List<Teacher>> Перечень преподавателей, полученных из xlsx-файла
* В объектах перечня незаполнены поля id
* Объекты сформированы на основании ФИО преподавателя, указанного в xlsx-файле
*
*/
public List<Teacher> getXlsxTeachers(XlsxDocument xlsx) {
System.out.println("Получение перечня преподавателей из xlsx-файла ...");
List<Teacher> list = new ArrayList<>();
// получаем данные в виде мапы строк
Map<Integer, List<XlsxCell>> map = xlsx.getData();
// удаляем строку заголовков
map.remove(0);
for (Map.Entry<Integer, List<XlsxCell>> entry : map.entrySet()) {
String fio = Stringer.clear(entry
.getValue()
.get(18)
.getContent());
list.add(new Teacher(fio));
}
// удаляем дубликаты
Set <Teacher> set = new HashSet<>(list);
list = new ArrayList<>(set);
return list;
}
/**
* Получение списка преподавателей, отсутствующих в базе данных (новых преподавателей)
*
* @param xlsxList список уникальных преподаватетей из файла
* @param baseList список преподавателей из базы
* @return List<Teacher>
*/
public List<Teacher> getAbsentTeachers(List<Teacher> xlsxList, List<Teacher> baseList) {
System.out.println("Получение списка преподавателей, отсутствующих в базе данных ...");
if (xlsxList == null || xlsxList.isEmpty()) {
return new ArrayList<Teacher>();
}
List<Teacher> 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<Teacher> sortTeachers(List<Teacher> list) {
System.out.println("Сортировка списка преподавателей ...");
Comparator<Teacher> 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<ProgramCretarea> getBaseCretareas() {
System.out.println("Получение списка критериев из баз данных ...");
List<ProgramCretarea> list = client.method(HttpMethod.GET)
.uri(cretareasLink)
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<ProgramCretarea>>(){})
.block();
return list;
}
/**
* Получение списка организаций из базы данных
*/
public List<Organization> getBaseOrganizations() {
System.out.println("Получение списка организаций из базы данных ...");
List<Organization> list = client.method(HttpMethod.GET)
.uri(organizationsLink)
.retrieve()
.bodyToMono(new ParameterizedTypeReference <List<Organization>>(){})
.block();
return list;
}
}

2
gates/src/main/java/ru/mlokoin/gates/teh/strings/Arrayer.java

@ -46,4 +46,6 @@ public class Arrayer {
List<String> result = list.stream().distinct().toList(); List<String> result = list.stream().distinct().toList();
return result; return result;
} }
} }

2
gates/src/main/java/ru/mlokoin/gates/teh/strings/Naimer.java

@ -1,6 +1,6 @@
package ru.mlokoin.gates.teh.strings; package ru.mlokoin.gates.teh.strings;
import ru.mlokoin.gates.model.Teacher; import ru.mlokoin.gates.model.teacher.Teacher;
/** /**
* Обработка строк, содержащих сведения о ФИО * Обработка строк, содержащих сведения о ФИО

Loading…
Cancel
Save