esoe
4 months ago
32 changed files with 544 additions and 470 deletions
@ -1,293 +0,0 @@
@@ -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; |
||||
} |
||||
} |
@ -0,0 +1,111 @@
@@ -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; |
||||
} |
||||
} |
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
package ru.mlokoin.gates.controller.v2; |
||||
|
||||
public class Check { |
||||
/** |
||||
* |
||||
*/ |
||||
|
||||
} |
@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
|
||||
package ru.mlokoin.gates.model; |
||||
package ru.mlokoin.gates.model.building; |
||||
|
||||
import java.io.Serializable; |
||||
|
@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
|
||||
package ru.mlokoin.gates.model; |
||||
package ru.mlokoin.gates.model.building; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
@ -1,9 +1,12 @@
@@ -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 { |
@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
|
||||
package ru.mlokoin.gates.model; |
||||
package ru.mlokoin.gates.model.cretarea; |
||||
|
||||
import java.io.Serializable; |
||||
|
@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
|
||||
package ru.mlokoin.gates.model; |
||||
package ru.mlokoin.gates.model.cretarea; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
@ -1,8 +1,10 @@
@@ -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 |
@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
|
||||
package ru.mlokoin.gates.model; |
||||
package ru.mlokoin.gates.model.fs; |
||||
|
||||
import java.io.Serializable; |
||||
|
@ -0,0 +1,61 @@
@@ -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();
|
||||
} |
||||
} |
@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
|
||||
package ru.mlokoin.gates.model; |
||||
package ru.mlokoin.gates.model.organization; |
||||
|
||||
import java.io.Serializable; |
||||
|
@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
|
||||
package ru.mlokoin.gates.model; |
||||
package ru.mlokoin.gates.model.organization; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
@ -1,8 +1,9 @@
@@ -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 |
@ -1,9 +1,10 @@
@@ -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 |
@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
|
||||
package ru.mlokoin.gates.model; |
||||
package ru.mlokoin.gates.model.teacher; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
@ -0,0 +1,238 @@
@@ -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; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} |
Loading…
Reference in new issue