diff --git a/README.md b/README.md index 251cc05..28e90f1 100644 --- a/README.md +++ b/README.md @@ -75,4 +75,5 @@ POSTGRES_DB='tech-services' Микросервисы располагаются в контейнерах docker Развертывание сервисов в windows осуществляется PowerShell скриптом (run.ps1) +$ipconfig 10.100.113.239 diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/v1/CourseController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/CourseController.java index 4eaa874..04e6121 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/v1/CourseController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/CourseController.java @@ -96,7 +96,7 @@ public class CourseController { //Получение перечня курсов из базы System.out.println("Получение списка курсов из базы ..."); - List base_courses = storage.getBaseCourse(); + List base_courses = storage.getBaseCourses(); System.out.println("Количество курсов в базе: " + base_courses.size()); /***************************************************************************************** diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/v1/EducationsController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/EducationsController.java index 210ea70..61978d1 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/v1/EducationsController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/EducationsController.java @@ -1,8 +1,9 @@ package ru.mlokoin.gates.controller.v1; +import java.util.ArrayList; +import java.util.List; + import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.ParameterizedTypeReference; -import org.springframework.http.HttpMethod; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @@ -10,12 +11,24 @@ 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.building.Building; +import ru.mlokoin.gates.model.course.Course; +import ru.mlokoin.gates.model.education.EducationEntryWraper; +import ru.mlokoin.gates.model.education.EducatonEntry; import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument; +import ru.mlokoin.gates.model.fs.xlsx.XlsxDocumentReestr; +import ru.mlokoin.gates.model.organization.Organization; +import ru.mlokoin.gates.model.program.Program; +import ru.mlokoin.gates.model.student.Student; +import ru.mlokoin.gates.model.teacher.Teacher; import ru.mlokoin.gates.repository.Storage; @Controller @RequestMapping(path = "/") public class EducationsController { + @Autowired + private WebClient client; + @Autowired private Storage storage; @@ -26,17 +39,136 @@ public class EducationsController { * - кнопки запуска механизмов проверок полей формы (критерии, программы, итд ...) * @param model * @param id + * @param xlsxEducations TODO * @return */ @GetMapping("/document/view-as-educations/{id}") public String viewAsEducations(Model model, @PathVariable String id) { - System.out.println("Просмотр содержимого файла ..."); - XlsxDocument xlsx = storage.getXlsxDocument(id); - model.addAttribute("filename", xlsx.getDocument().getName()); + // создание списка ошибок + List errors = new ArrayList<>(); + + // Получение данных файла в переменную xlsx, json объект сериализуем в java файл + System.out.println("Получение данных из xlsx-файла ..."); + XlsxDocument xlsx; + try { + xlsx = storage.getXlsxDocument(id); + } catch (Exception e) { + errors.add("Ошибка при получении данных из xlsx-файла :: " +e.getMessage()); + System.out.println("Не удалось получить данные из xlsx-файла: " + e.getMessage()); + xlsx = new XlsxDocument(); + } + + //Обращение к xlsx-файлу как к Реестру обученных + XlsxDocumentReestr xlsxEducations = new XlsxDocumentReestr(xlsx); + + //получение списка студентов из базы + System.out.println("Получение списка студентов из базы ..."); + List base_students; + try { + base_students = storage.getBaseStudents(); + } catch (Exception e) { + errors.add("Ошибка при получении списка студентов из базы :: " +e.getMessage()); + System.out.println("Не удалось получить список студентов из базы: " + e.getMessage()); + base_students = new ArrayList<>(); + } + + //получение списка курсов из базы + System.out.println("Получение списка курсов из базы ..."); + List base_courses; + try { + base_courses = storage.getBaseCourses(); + } catch (Exception e) { + errors.add("Ошибка при получении списка курсов из базы :: " +e.getMessage()); + System.out.println("Не удалось получить список курсов из базы: " + e.getMessage()); + base_courses = new ArrayList<>(); + } + + //получение списка преподавателей из базы + System.out.println("Получение списка преподавателей из базы ..."); + List base_teachers; + try { + base_teachers = storage.getBaseTeachers(); + } catch (Exception e) { + errors.add("Ошибка при получении списка преподавателей из базы :: " +e.getMessage()); + System.out.println("Не удалось получить список преподавателей из базы: " + e.getMessage()); + base_teachers = new ArrayList<>(); + } + + //получение списка программ обучения из базы + System.out.println("Получение списка программ обучения из базы ..."); + List base_programs; + try { + base_programs = storage.getBasePrograms(); + } catch (Exception e) { + errors.add("Ошибка при получении списка программ обучения из базы :: " +e.getMessage()); + System.out.println("Не удалось получить список программ обучения из базы: " + e.getMessage()); + base_programs = new ArrayList<>(); + } + + //получение списка объектов строительства из базы + System.out.println("Получение списка объектов строительства из базы ..."); + List base_buildings; + try { + base_buildings = storage.getBaseBuildings(); + } catch (Exception e) { + errors.add("Ошибка при получении списка объектов строительства из базы :: " +e.getMessage()); + System.out.println("Не удалось получить список объектов строительства из базы: " + e.getMessage()); + base_buildings = new ArrayList<>(); + } + + //получение списка организаций из базы + System.out.println("Получение списка организаций из базы ..."); + List base_organizations; + try { + base_organizations = storage.getBaseOrganizations(); + } catch (Exception e) { + errors.add("Ошибка при получении списка организаций из базы :: " +e.getMessage()); + System.out.println("Не удалось получить список организаций из базы: " + e.getMessage()); + base_organizations = new ArrayList<>(); + } + + //получение списка записей об обучениях из базы + System.out.println("Получение списка записей об обучениях из базы ..."); + List base_educations; + try { + base_educations = storage.getBaseEducationEntries(); + } catch (Exception e) { + errors.add("Ошибка при получении списка записей об обучениях из базы :: " +e.getMessage()); + System.out.println("Не удалось получить список записей об обучениях из базы: " + e.getMessage()); + base_educations = new ArrayList<>(); + } + + //получение списка записей об обучениях из xlsx-файла + System.out.println("Получение списка записей об обучениях из xlsx-файла ..."); + List xlsx_educations = new ArrayList<>(); + try { + xlsx_educations = xlsxEducations.getEducations(base_courses, base_students, base_teachers, base_programs, base_buildings, base_organizations); + } catch (Exception e) { + errors.add("Ошибка при получении списка записей об обучениях из xlsx-файла :: " +e.getMessage()); + System.out.println("Не удалось получить список записей об обучениях из xlsx-файла: " + e.getMessage()); + xlsx_educations = new ArrayList<>(); + } + + //фильтрация записей уже присутствующих в базе + List filtered = new ArrayList<>(xlsx_educations); + + if (filtered.size() > 0) { + if (filtered.size() > 200) { + filtered = filtered.subList(0, 200); + } + } + EducationEntryWraper wraper = new EducationEntryWraper(filtered); + wraper.setCourses(base_courses); + wraper.setStudents(base_students); + + //передача данных в модель + model.addAttribute("wrapEducations", wraper); + model.addAttribute("errors", errors); + model.addAttribute("filename", xlsxEducations.getDocument().getName()); model.addAttribute("id", id); - model.addAttribute("xlsx", xlsx.getData()); - model.addAttribute("headers", xlsx.getHeaders()); + // model.addAttribute("xlsx", xlsx.getData()); + // model.addAttribute("headers", xlsx.getHeaders()); return "view-as-educations"; } } diff --git a/gates/src/main/java/ru/mlokoin/gates/model/education/EducationEntryWraper.java b/gates/src/main/java/ru/mlokoin/gates/model/education/EducationEntryWraper.java index b2551ab..0237734 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/education/EducationEntryWraper.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/education/EducationEntryWraper.java @@ -1,5 +1,67 @@ package ru.mlokoin.gates.model.education; +import java.util.ArrayList; +import java.util.List; + +import lombok.Data; +import ru.mlokoin.gates.model.course.Course; +import ru.mlokoin.gates.model.student.Student; + +@Data public class EducationEntryWraper { + public List educations; + public List courses; + public List students; + + public EducationEntryWraper(){ + init(); + } + + public EducationEntryWraper(List list) { + this.init(); + this.educations = list; + } + + public void init(){ + this.educations = new ArrayList<>(); + this.courses = new ArrayList<>(); + this.students = new ArrayList<>(); + } + + public void addEducation(EducatonEntry education){ + this.educations.add(education); + } + + public void addEducations(List educations){ + for (EducatonEntry education : educations) { + this.addEducation(education); + } + } + + public void addCourse(Course course){ + this.courses.add(course); + } + + public void addCourses(List courses){ + for (Course course : courses) { + this.addCourse(course); + } + } + + public void addStudent(Student student){ + this.students.add(student); + } + + public void addStudents(List students){ + for (Student student : students) { + this.addStudent(student); + } + } + + @Override + public String toString() { + return this.educations.toString(); + } + } diff --git a/gates/src/main/java/ru/mlokoin/gates/model/education/EducatonEntry.java b/gates/src/main/java/ru/mlokoin/gates/model/education/EducatonEntry.java index 88f25be..7179b62 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/education/EducatonEntry.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/education/EducatonEntry.java @@ -1,10 +1,18 @@ package ru.mlokoin.gates.model.education; +import java.util.List; +import java.util.Map.Entry; + import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import ru.mlokoin.gates.model.building.Building; import ru.mlokoin.gates.model.course.Course; +import ru.mlokoin.gates.model.fs.xlsx.XlsxCell; +import ru.mlokoin.gates.model.organization.Organization; +import ru.mlokoin.gates.model.program.Program; import ru.mlokoin.gates.model.student.Student; +import ru.mlokoin.gates.model.teacher.Teacher; @NoArgsConstructor @AllArgsConstructor @@ -36,5 +44,37 @@ public class EducatonEntry { this.course = course; this.student = student; } - -} + + /** + * Консруктор записи в реестре обученных из строки xlsx документа + * - + * + * @param entry + * @param base_courses + * @param base_students + */ + public EducatonEntry(Entry> entry, + List base_courses, + List base_students, + List base_teachers, + List base_programs, + List base_buildings, + List base_organizations) { + // Убираем строку заголовков + if (entry.getKey() != 0) { + //получаем строку из файла + List cells = entry.getValue();//строка xlsx + + /** + * Извлекаем данные из ячеек + */ + this.course = new Course(entry, base_teachers, base_programs, base_buildings); + this.student = new Student(entry, base_organizations); + this.ones = cells.get(16).getContent(); + + this.sertificate_number = cells.get(14).getContent(); + + + } + } +} \ No newline at end of file diff --git a/gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxDocument.java b/gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxDocument.java index 3db10cf..202e977 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxDocument.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxDocument.java @@ -16,4 +16,10 @@ public class XlsxDocument implements Serializable{ private Map> data; private Document document; private List headers; + + public XlsxDocument(XlsxDocument xlsx) { + this.data = xlsx.data; + this.document = xlsx.document; + this.headers = xlsx.headers; + } } diff --git a/gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxDocumentReestr.java b/gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxDocumentReestr.java new file mode 100644 index 0000000..3c2ebf6 --- /dev/null +++ b/gates/src/main/java/ru/mlokoin/gates/model/fs/xlsx/XlsxDocumentReestr.java @@ -0,0 +1,38 @@ +package ru.mlokoin.gates.model.fs.xlsx; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import ru.mlokoin.gates.model.building.Building; +import ru.mlokoin.gates.model.course.Course; +import ru.mlokoin.gates.model.education.EducatonEntry; +import ru.mlokoin.gates.model.organization.Organization; +import ru.mlokoin.gates.model.program.Program; +import ru.mlokoin.gates.model.student.Student; +import ru.mlokoin.gates.model.teacher.Teacher; + +/** + * Класс для извлечения данных из Реестра обученных (educations) + */ +public class XlsxDocumentReestr extends XlsxDocument { + + public XlsxDocumentReestr(XlsxDocument xlsx) { + super(xlsx); + } + + public List getEducations(List base_courses, + List base_students, + List base_teachers, + List base_programs, + List base_buildings, + List base_organizations) { + List educations = new ArrayList<>(); + Map> map = getData(); + for (Map.Entry> entry : map.entrySet()) { + educations.add(new EducatonEntry((Entry>) entry, base_courses, base_students, base_teachers, base_programs, base_buildings, base_organizations)); + } + return educations; + } +} diff --git a/gates/src/main/java/ru/mlokoin/gates/repository/Storage.java b/gates/src/main/java/ru/mlokoin/gates/repository/Storage.java index 088d9b0..5676c18 100644 --- a/gates/src/main/java/ru/mlokoin/gates/repository/Storage.java +++ b/gates/src/main/java/ru/mlokoin/gates/repository/Storage.java @@ -18,6 +18,7 @@ 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.education.EducatonEntry; import ru.mlokoin.gates.model.fs.Document; import ru.mlokoin.gates.model.fs.xlsx.XlsxCell; import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument; @@ -43,6 +44,7 @@ public class Storage { private String cretareasLink = "http://resource-service-api:8181/cretarea/list"; private String organizationsLink = "http://resource-service-api:8181/organization/list"; private String studentsLink = "http://resource-service-api:8181/student/list"; + private String educationEntriesLink = "http://resource-service-api:8181/education/list"; @Autowired private WebClient client; @@ -111,7 +113,7 @@ public class Storage { /** * Получение списка курсов из базы данных */ - public List getBaseCourse() { + public List getBaseCourses() { System.out.println("Получение списка курсов из базы данных ..."); List list = client.method(HttpMethod.GET) .uri(coursesLink) @@ -244,6 +246,16 @@ public class Storage { return list; } + public List getBaseEducationEntries() { + System.out.println("Получение списка записей об обучениях из базы данных ..."); + List list = client.method(HttpMethod.GET) + .uri(educationEntriesLink) + .retrieve() + .bodyToMono(new ParameterizedTypeReference >(){}) + .block(); + return list; + } + diff --git a/gates/src/main/resources/templates/view-as-educations.html b/gates/src/main/resources/templates/view-as-educations.html index a043678..3741945 100644 --- a/gates/src/main/resources/templates/view-as-educations.html +++ b/gates/src/main/resources/templates/view-as-educations.html @@ -6,6 +6,15 @@ xmlns:th="http://www.thymeleaf.org"> view-as-educations + @@ -60,6 +69,50 @@ xmlns:th="http://www.thymeleaf.org"> + +
+ +
+
+

EDUCATIONS:

+
+ + + + + + + + + + + + + + + + + + + + +
Номер удостоверения (sertificate_number)ФРДО (frdo_number)ЕИСОТ (eisot_number)Единички (ones)Курс (course)Студент (student)
+ + + + + + + + + + + +
+
+
+ + \ No newline at end of file