diff --git a/gates/src/main/java/ru/mlokoin/gates/config/WebConfig.java b/gates/src/main/java/ru/mlokoin/gates/config/WebConfig.java index 1acf8ba..426e82b 100644 --- a/gates/src/main/java/ru/mlokoin/gates/config/WebConfig.java +++ b/gates/src/main/java/ru/mlokoin/gates/config/WebConfig.java @@ -9,7 +9,7 @@ import org.springframework.web.reactive.function.client.WebClient; public class WebConfig { @Bean WebClient webClient() { - final int maxInMemorySize = 50 * 1024 * 1024; // 50MB + final int maxInMemorySize = 1000 * 1024 * 1024; // 1000MB final ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder() .codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(maxInMemorySize)) .build(); diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/v1/CretareaController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/CretareaController.java index e40d145..4a94abb 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/v1/CretareaController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/CretareaController.java @@ -149,8 +149,8 @@ public class CretareaController { + wraper.getList().toString()); for (ProgramCretarea cretarea : wraper.getList()) { - //Проверка наличия полного наименования критерия - if (!cretarea.getName().equals("")) { + //Проверка наличия краткого наименования критерия в базе + if (!cretarea.getName_short().equals("")) { client.post() .uri("http://resource-service-api:8181/cretarea/create") .body(Mono.just(cretarea), ProgramCretarea.class) 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 9fab9a1..b13a576 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 @@ -68,7 +68,7 @@ public class EducationsController { } //Обращение к xlsx-файлу как к Реестру обученных - XlsxDocumentReestr xlsxEducations = new XlsxDocumentReestr(xlsx); + XlsxDocumentReestr reestr = new XlsxDocumentReestr(xlsx); //получение списка студентов из базы System.out.println("Получение списка студентов из базы ..."); @@ -92,118 +92,48 @@ public class EducationsController { 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<>(); - for (EducatonEntry xlsx_entry : xlsx_educations) { - if (xlsx_entry != null) { - if (xlsx_entry.getStudent() != null - || xlsx_entry.getCourse() != null) { - if (!filtered.contains(xlsx_entry)) { - boolean exists = false; - for (EducatonEntry base_entry : base_educations) { - if (base_entry.getSertificate_number().equals(xlsx_entry.getSertificate_number()) - && base_entry.getCourse().getProtocol_number().equals(xlsx_entry.getCourse().getProtocol_number()) - && base_entry.getCourse().getPlace().equals(xlsx_entry.getCourse().getPlace()) - && base_entry.getCourse().getStart_date().equals(xlsx_entry.getCourse().getStart_date()) - && base_entry.getCourse().getTeacher().getFullName().equals(xlsx_entry.getCourse().getTeacher().getFullName()) - && base_entry.getCourse().getBuilding().getName_short().equals(xlsx_entry.getCourse().getBuilding().getName_short()) - && base_entry.getCourse().getProgram().getName().equals(xlsx_entry.getCourse().getProgram().getName())) { - - exists = true; - break; - } - } - if (!exists) { - filtered.add(xlsx_entry); - } - } + List unique = reestr.getUniqueEducations(); + List absent = storage.getAbsentEducationEntries(unique); + + // удаление строки заголовков из списка записей + // absent.remove(0); + + //актуалзация полей согласно базе + for (EducatonEntry educatonEntry : absent) { + for (Course course : base_courses) { + if (educatonEntry.getCourse() != null + && course.isSimilar(educatonEntry.getCourse())) { + educatonEntry.setCourse(course); + break; + } + } + for (Student student : base_students) { + if (educatonEntry.getStudent() != null + && student.isSimilar(educatonEntry.getStudent())) { + educatonEntry.setStudent(student); + break; } } } //ограничение количества выводимых пользователю записей - if (filtered.size() > 0) { - if (filtered.size() > 200) { - filtered = filtered.subList(0, 200); + if (absent.size() > 0) { + if (absent.size() > 200) { + absent = absent.subList(0, 200); } } - EducationEntryWraper wraper = new EducationEntryWraper(filtered); + EducationEntryWraper wraper = new EducationEntryWraper(absent); wraper.setCourses(base_courses); wraper.setStudents(base_students); //передача данных в модель - model.addAttribute("absentReview", new AbsentReview(xlsxEducations, storage)); + model.addAttribute("absentReview", new AbsentReview(reestr, storage)); model.addAttribute("baseReview", new BaseReview(storage)); - model.addAttribute("xlsxReview", new XlsxReview(xlsxEducations)); + model.addAttribute("xlsxReview", new XlsxReview(reestr)); model.addAttribute("wrapEducations", wraper); model.addAttribute("errors", errors); - model.addAttribute("filename", xlsxEducations.getDocument().getName()); + model.addAttribute("filename", reestr.getDocument().getName()); model.addAttribute("id", id); // model.addAttribute("xlsx", xlsx.getData()); // model.addAttribute("headers", xlsx.getHeaders()); diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/v1/StudentController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/StudentController.java index c5754bb..780c66e 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/v1/StudentController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/StudentController.java @@ -17,8 +17,8 @@ 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.XlsxCell; 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.student.Student; import ru.mlokoin.gates.model.student.StudentWraper; @@ -50,60 +50,34 @@ public class StudentController { //получение данных файла в переменную xlsx XlsxDocument xlsx = storage.getXlsxDocument(id); - - //получение перечня студентов из xlsx - ArrayList xlsx_students = new ArrayList<>(); - Map> map = xlsx.getData(); - for (Map.Entry> entry : map.entrySet()) { - xlsx_students.add(new Student(entry, base_organizations)); - } - System.out.println("Всего студентов в xlsx: " + xlsx_students.size()); + XlsxDocumentReestr reestr = new XlsxDocumentReestr(xlsx); - //получение перечня студентов из базы - List base_students = storage.getBaseStudents(); - System.out.println("Всего студентов в базе: " + base_students.size()); + List unique = reestr.getUniqueStudents(); + System.out.println("Всего уникальных студентов в xlsx: " + unique.size()); + List absent = storage.getAbsentStudents(unique); + System.out.println("Всего отсутствующих студентов в базе: " + absent.size()); - /** - * Удаляем повторяющихся студентов из списка - * Исключаем из списка студентов, данные о которых уже присутствуют в базе - */ - List filtered = new ArrayList<>(); - for (Student xlsx_student : xlsx_students) { - if (xlsx_student != null) { - // если имя не отсутствует, считаем, что студент существует - if (xlsx_student.getFirst_name() != null){ - if (!filtered.contains(xlsx_student)) { - boolean exists = false; - if (base_students.size() > 0) { - for (Student base_student : base_students) { - exists = xlsx_student.getFirst_name().equals(base_student.getFirst_name()) - && xlsx_student.getLast_name().equals(base_student.getLast_name()) - && xlsx_student.getSecond_name().equals(base_student.getSecond_name()) - && xlsx_student.getProfession().equals(base_student.getProfession()) - && xlsx_student.getOrganization().equals(base_student.getOrganization()) - && xlsx_student.getDirection().equals(base_student.getDirection()); - - if (exists) { - break; - } - } - } - if (!exists) { - filtered.add(xlsx_student); - } - } + //актуализируем список организаций + for (Student student : absent) { + for (Organization organization : base_organizations) { + if (student.getOrganization() != null + && organization.isSimilar(student.getOrganization()) + ) { + student.setOrganization(organization); + break; } } + } - System.out.println("Уникальных студентов в xlsx: " + filtered.size()); - + //передает список студентов в шаблон - if (filtered.size() > 0) { - if (filtered.size() > 200) { - filtered = filtered.subList(0, 200); + if (absent.size() > 0) { + if (absent.size() > 200) { + absent = absent.subList(0, 200); } //создаем врапер для списка студентов - StudentWraper wraper = new StudentWraper(filtered); + StudentWraper wraper = new StudentWraper(absent); + wraper.setOrganizations(base_organizations); //передаем врапер в шаблон model.addAttribute("studentWraper", wraper); 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 index e111b2c..4bc410a 100644 --- 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 @@ -25,30 +25,6 @@ public class XlsxDocumentReestr extends XlsxDocument { setHeaders(xlsx.getHeaders()); } - /** - * Получение списка обучений с вложенными объектами сверенными с базой и содержащими id - * @param base_courses - * @param base_students - * @param base_teachers - * @param base_programs - * @param base_buildings - * @param base_organizations - * @return - */ - 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, base_courses, base_students, base_teachers, base_programs, base_buildings, base_organizations)); - } - return educations; - } - /** * Получить список обучений из xlsx-документа, * вложенные объекты не сверены с базой, не указаны id @@ -58,7 +34,9 @@ public class XlsxDocumentReestr extends XlsxDocument { List educations = new ArrayList<>(); Map> map = getData(); for (Map.Entry> entry : map.entrySet()) { - educations.add(new EducatonEntry(entry)); + if (entry.getKey() != 0){ + educations.add(new EducatonEntry(entry)); + } } return educations; } @@ -68,30 +46,20 @@ public class XlsxDocumentReestr extends XlsxDocument { * @return */ public List getUniqueEducations() { - List educations = new ArrayList<>(); - Map> map = getData(); - for (Map.Entry> entry : map.entrySet()) { - educations.add(new EducatonEntry(entry)); + List educations = getEducationsAsIs(); + List unique = new ArrayList<>(); + for (EducatonEntry entry : educations) { + if (!unique.contains(entry)) { + unique.add(entry); + } } - return educations; + return unique; } public int getEducationsCount(){ return getUniqueEducations().size(); } - /** - * Подсчет количества обучений - * @return количество внесенных в реестр обучений - * считаем по количеству строк в документе, отнимаем одну строку, содержащую заголовки - */ - // public int getEducationsCount() { - // if (getData() == null || getData().isEmpty() || getData().size() == 0 || getData().size() == 1) { - // return 0; - // } - // return getData().size() -1; - // } - /** * Получить список критериев из Реестра обученных * diff --git a/gates/src/main/java/ru/mlokoin/gates/model/program/Program.java b/gates/src/main/java/ru/mlokoin/gates/model/program/Program.java index 099310f..045af6a 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/program/Program.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/program/Program.java @@ -84,6 +84,8 @@ public class Program { this.setCretarea(new ProgramCretarea(entry)); } public boolean isSimilar(Program program) { - return (this.getName().equals(program.getName()) && this.getLenght().equals(program.getLenght()) && this.getPrice().equals(program.getPrice())); + return (this.getName().equals(program.getName()) + && this.getLenght().equals(program.getLenght()) + && this.getPrice().equals(program.getPrice())); } } diff --git a/gates/src/main/java/ru/mlokoin/gates/model/student/Student.java b/gates/src/main/java/ru/mlokoin/gates/model/student/Student.java index 53b13f8..9ecacbc 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/student/Student.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/student/Student.java @@ -68,8 +68,8 @@ public class Student implements Serializable{ this.second_name = Naimer.getSecondNameOf(cells.get(3).getContent()); this.last_name = Naimer.getLastNameOf(cells.get(3).getContent()); - this.profession = cells.get(4).getContent(); - this.direction = cells.get(2).getContent(); + this.profession = Stringer.clear(cells.get(4).getContent()); + this.direction = Stringer.clear(cells.get(2).getContent()); /** * Данные, отсутствующие в реестре: * - category @@ -107,10 +107,8 @@ public class Student implements Serializable{ && this.last_name.equals(student.getLast_name()) && this.profession.equals(student.getProfession()) && this.direction.equals(student.getDirection()) + && this.organization.isSimilar(student.getOrganization()) ) { - if (this.organization != null && student.getOrganization() != null) { - return this.organization.isSimilar(student.getOrganization()); - } return true; } return false; 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 dd189d4..450ba89 100644 --- a/gates/src/main/java/ru/mlokoin/gates/repository/Storage.java +++ b/gates/src/main/java/ru/mlokoin/gates/repository/Storage.java @@ -101,14 +101,16 @@ public class Storage { if (xlsxList == null || xlsxList.isEmpty()) { return new ArrayList(); } + List result = new ArrayList<>(xlsxList); + if (baseList == null || baseList.isEmpty()) { return result; } for (Program program : xlsxList) { for (Program baseProgram : baseList) { - if (program.getName().equals(baseProgram.getName())) { + if (program.isSimilar(baseProgram)) { result.remove(program); break; } @@ -436,7 +438,7 @@ public class Storage { return list; } - private List getAbsentEducationEntries(List xlsxList) { + public List getAbsentEducationEntries(List xlsxList) { List baseList = getBaseEducationEntries(); if (xlsxList == null || xlsxList.isEmpty()) { return new ArrayList(); diff --git a/storage-rs/pom.xml b/storage-rs/pom.xml index af55657..0cc9254 100644 --- a/storage-rs/pom.xml +++ b/storage-rs/pom.xml @@ -25,12 +25,12 @@ org.apache.poi poi - 5.2.0 + 5.3.0 org.apache.poi poi-ooxml - 5.2.0 + 5.3.0