diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/v1/BuildingController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/BuildingController.java index ae4ebaa..5ea2f57 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/v1/BuildingController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/BuildingController.java @@ -123,9 +123,7 @@ public class BuildingController { }) public String saveBuildings(@ModelAttribute("wrapBuildngs") BuildingWraper wraper, @PathVariable String id){ for (Building building : wraper.getList()) { - //Проверка наличия флага для добавления в базу - //по полю табельного номера - if (building.getName_full() != ""){ + if (building.getName_short() != ""){ client.post() .uri("http://resource-service-api:8181/building/create") .body(Mono.just(building), Building.class) 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 df4c638..6551fb5 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 @@ -23,6 +23,7 @@ import ru.mlokoin.gates.model.course.Course; import ru.mlokoin.gates.model.course.CourseWraper; import ru.mlokoin.gates.model.fs.xlsx.XlsxCell; import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument; +import ru.mlokoin.gates.model.fs.xlsx.XlsxDocumentReestr; import ru.mlokoin.gates.model.program.Program; import ru.mlokoin.gates.model.teacher.Teacher; import ru.mlokoin.gates.repository.Storage; @@ -88,81 +89,44 @@ public class CourseController { } // Получение курсов из xlsx - List xlsx_courses = new ArrayList<>();// 7 столбец - Map> map = xlsx.getData(); - for (Map.Entry> entry : map.entrySet()) { - xlsx_courses.add(new Course((Entry>) entry, teachers, programs, buildings)); - } - - //Получение перечня курсов из базы - System.out.println("Получение списка курсов из базы ..."); - List base_courses = storage.getBaseCourses(); - System.out.println("Количество курсов в базе: " + base_courses.size()); + System.out.println("Получение списка курсов из xlsx-файла ..."); + XlsxDocumentReestr reestr = new XlsxDocumentReestr(xlsx); + List xlsx_courses = reestr.getUniqueCourses(); - /***************************************************************************************** - * - * Удаление повторяющихся курсов - * - удаляем повторяющиеся курсы в xlsx-файле - * - удаляем курсы, присутствующие в базе - * * - ******************************************************************************************/ - System.out.println("Удаляем повторяющиеся в xlsx-файле курсы ..."); - System.out.println("Количество курсов в xlsx_courses: " + xlsx_courses.size()); - List filtered = new ArrayList(); - for (Course course : xlsx_courses) { - if (course != null) { - if (course.getStart_date() != null && course.getBuilding() != null && course.getTeacher() != null) { - if (!filtered.contains(course)) { - boolean exists = false; - - //Проверяем наличие курса в базе - if (base_courses.size() > 0) { - //Сравниваем курс из xlsx-файла с каждой записью в базе - for (Course base_course : base_courses) { - // номер протокола нулевой, сравниваем курсы по дате начала обучения, объекту строительства, фио преподавателя - if (course.getProtocol_number() == null || - course.getProtocol_number().isEmpty() || - course.getProtocol_number().equals("")) { - - exists = course.getTeacher().equals(base_course.getTeacher()) - && course.getProgram().equals(base_course.getProgram()) - && course.getPlace().equals(base_course.getPlace()) - && course.getStart_date().equals(base_course.getStart_date()); - if (exists) { - break; - } - } - // номер протокола не нулевой, сравниваем курсы по номеру протокола - else { - exists = course.getProtocol_number().equals(base_course.getProtocol_number()); - if (exists) { - break; - } - } - } - } - - //Если курс еще не в списке и не существует в базе, добавляем курс в список - if (!exists) { - filtered.add(course); - } - } - + //Получение курсов, отсутствующих в базе + List absent = storage.getAbsentCourses(xlsx_courses); + System.out.println("Количество уникальных курсов filtered: " + absent.size()); + + //актуализация данных о преподавателях, программах, объектах строительства + for (Course course : absent) { + for (Teacher teacher : teachers) { + if (course.getTeacher().isSimilar(teacher)) { + course.setTeacher(teacher); + } + } + for (Program program : programs) { + if (course.getProgram().isSimilar(program)) { + course.setProgram(program); + } + } + for (Building building : buildings) { + if (course.getBuilding().isSimilar(building)) { + course.setBuilding(building); } } + } - System.out.println("Количество уникальных курсов filtered: " + filtered.size()); //Передаем курсы в шаблон - if (filtered.size() > 0) { + if (absent.size() > 0) { //Ограничиваем количество курсов, подлежащих передаче в wraper // System.out.println("Общее количество курсов для добавления в базу: " + filtered.size()); - if (filtered.size() > 200) { - filtered = filtered.subList(0, 200); + if (absent.size() > 200) { + absent = absent.subList(0, 200); } //Создаем wraper для передачи в шаблон - CourseWraper wraper = new CourseWraper(filtered); + CourseWraper wraper = new CourseWraper(absent); wraper.addPrograms(programs); wraper.addBuildings(buildings); wraper.addTeachers(teachers); 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 61f3339..e40d145 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 @@ -164,7 +164,7 @@ public class CretareaController { * Возвращаем пользователя на страницу перечня новых критериев * - если он не пустой */ - return "redirect:/cretareas/check/" + id; + return "redirect:/program-cretareas/check/" + id; } } diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/v1/ProgramController.java b/gates/src/main/java/ru/mlokoin/gates/controller/v1/ProgramController.java index 39035e2..3a564be 100644 --- a/gates/src/main/java/ru/mlokoin/gates/controller/v1/ProgramController.java +++ b/gates/src/main/java/ru/mlokoin/gates/controller/v1/ProgramController.java @@ -22,6 +22,7 @@ import reactor.core.publisher.Mono; import ru.mlokoin.gates.model.cretarea.ProgramCretarea; import ru.mlokoin.gates.model.fs.xlsx.XlsxCell; import ru.mlokoin.gates.model.fs.xlsx.XlsxDocument; +import ru.mlokoin.gates.model.fs.xlsx.XlsxDocumentReestr; import ru.mlokoin.gates.model.program.Program; import ru.mlokoin.gates.model.program.ProgramWraper; import ru.mlokoin.gates.repository.Storage; @@ -48,63 +49,50 @@ public class ProgramController { System.out.println("Получение перечня программ из xlsx-файла ..."); //получение данных файла в переменную xlsx XlsxDocument xlsx = storage.getXlsxDocument(id); + XlsxDocumentReestr reestr = new XlsxDocumentReestr(xlsx); //список программ из файла - ArrayList xlsx_programs = new ArrayList<>();//7 столбец - Map> map = xlsx.getData(); - for (Map.Entry> entry : map.entrySet()) { - Program programm = new Program(); - programm.setName(Stringer.clear(entry - .getValue() - .get(6) - .getContent())); - xlsx_programs.add(programm); - } - xlsx_programs.remove(0);//Удалили из списка заголовок - Set xlsx_programSet = Set.copyOf(xlsx_programs); + List unique_programs = reestr.getUniquePrograms(); - //список уникальных наименований из файла - System.out.println("Список уникальных сокращенных наименований критериев из файла:"); - Set xlsx_stringSet = new HashSet<>(); - for (Program pc : xlsx_programSet) { - System.out.println(pc.getName()); - xlsx_stringSet.add(pc.getName()); + //заменяем критерии программ обучения данными из базы + //получаем список критериев + System.out.println("Подстановка в объект программы критериев из базы ..."); + List base_cretareas = storage.getBaseCretareas(); + for (Program program : unique_programs) { + for (ProgramCretarea cretarea : base_cretareas) { + if (program.getCretarea().isSimilar(cretarea)) { + System.out.println("Найдено совпадение: " + program.getCretarea().getName_short()); + program.setCretarea(cretarea); + break; + } + } } - //Получение перечня программ из базы - System.out.println("Получение списка программ из базы ..."); - List base_programs = storage.getBasePrograms(); - Set base_programSet = Set.copyOf(base_programs); - - //Список наименований программ из базы - System.out.println("Список уникальных наименований программ из базы:"); - Set base_stringSet = new HashSet<>(); - for (Program pc : base_programSet) { - System.out.println(pc.getName()); - base_stringSet.add(pc.getName()); - } + List absent = storage.getAbsentPrograms(unique_programs); - //Удаление программ присутствующих в базе - xlsx_stringSet.removeAll(base_stringSet); + //Подготавлеваем обертку формы + //unique_programs содержит строку заголовков, поэтому проверяем, чтобы было больше одной записи + if (absent.size() != 0 ) { + - if (xlsx_stringSet.size() != 0) { - //Подготовка списка, для передачи в представление - ArrayList list = new ArrayList<>(); - for (String string : xlsx_stringSet) { - Program pc = new Program(); - pc.setName(string); - list.add(pc); - } + //Подготавливаем список направлений обучения для передачи в представление + List study_directions = new ArrayList<>(); + // study_directions.add("направления обучения"); + study_directions.add("Обязательное обучение"); + study_directions.add("Производственное обучение"); + study_directions.add("Профессиональная переподготовка"); + study_directions.add("Обучение водителей"); + study_directions.add("Обучение вновь внедряемым процедурам"); - /** - * Подготавлеваем обертку формы - */ // передаем список новых программ - ProgramWraper pwraper = new ProgramWraper(list); + ProgramWraper pwraper = new ProgramWraper(); + pwraper.setPrograms(absent); - //подготавливаем список критериев - List base_cretareas = storage.getBaseCretareas(); + //передаем список критериев в обертку формы, для селекта pwraper.setCretareas(base_cretareas); + + //подготавливаем список направлений обучения + pwraper.addStudyDirections(study_directions); //передаем обертку в модель model.addAttribute("wrapPrograms", pwraper); diff --git a/gates/src/main/java/ru/mlokoin/gates/model/building/Building.java b/gates/src/main/java/ru/mlokoin/gates/model/building/Building.java index ac13720..8b7af59 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/building/Building.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/building/Building.java @@ -38,4 +38,8 @@ public class Building implements Serializable{ public Building(Entry> entry) { this.setName_short(Stringer.clear(entry.getValue().get(19).getContent())); } + + public boolean isSimilar(Building building) { + return this.getName_short().equals(building.getName_short()); + } } diff --git a/gates/src/main/java/ru/mlokoin/gates/model/course/Course.java b/gates/src/main/java/ru/mlokoin/gates/model/course/Course.java index b01b544..3f6d39b 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/course/Course.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/course/Course.java @@ -64,14 +64,12 @@ public class Course { } catch (Exception e) { this.setStart_date(null); } - // this.setStart_date(new Date(Long.parseLong(Stringer.clear(entry.getValue().get(7).getContent())))); - + try { this.setProtocol_date(new Date(Long.parseLong(Stringer.clear(entry.getValue().get(9).getContent())))); } catch (Exception e) { this.setProtocol_date(null); } - // this.setProtocol_date(new Date(Long.parseLong(Stringer.clear(entry.getValue().get(9).getContent())))); // Stringer.clear(entry.getValue().get(9).getContent())); this.setProtocol_number(Stringer.clear(entry.getValue().get(13).getContent())); this.setReport_period(Stringer.clear(entry.getValue().get(17).getContent())); diff --git a/gates/src/main/java/ru/mlokoin/gates/model/cretarea/ProgramCretarea.java b/gates/src/main/java/ru/mlokoin/gates/model/cretarea/ProgramCretarea.java index e080445..2518a21 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/cretarea/ProgramCretarea.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/cretarea/ProgramCretarea.java @@ -37,5 +37,8 @@ public class ProgramCretarea implements Serializable{ } } + public boolean isSimilar(ProgramCretarea programCretarea) { + return this.name_short.equals(programCretarea.getName_short()); + } } 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 7584dfb..578612d 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 @@ -80,19 +80,14 @@ public class EducatonEntry { Student xlsx_student = new Student(entry, base_organizations); for (Student base_student : base_students) { - if (base_student.getFirst_name().equals(xlsx_student.getFirst_name()) - && base_student.getSecond_name().equals(xlsx_student.getSecond_name()) - && base_student.getLast_name().equals(xlsx_student.getLast_name()) - && base_student.getProfession().equals(xlsx_student.getProfession()) - && base_student.getDirection().equals(xlsx_student.getDirection()) - && base_student.getOrganization().getName_full().equals(xlsx_student.getOrganization().getName_full())) { + if (base_student.isSimilar(xlsx_student)){ this.student = base_student; break; } } - this.ones = cells.get(16).getContent(); - this.sertificate_number = cells.get(14).getContent(); + this.ones = Stringer.clear(cells.get(16).getContent()); + this.sertificate_number = Stringer.clear(cells.get(14).getContent()); } } @@ -122,7 +117,7 @@ public class EducatonEntry { && educatonEntry.getSertificate_number() != "" && !educatonEntry.getSertificate_number().isEmpty()) { if (educatonEntry.getSertificate_number().equals(this.getSertificate_number())) { - if (educatonEntry.getCourse().getStart_date().equals(this.getCourse().getStart_date())) { + if (educatonEntry.getCourse().isSimilar(this.course)) { return true; } } 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 202e977..3db10cf 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,10 +16,4 @@ 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 index 4bb7d23..e111b2c 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 @@ -20,7 +20,9 @@ import ru.mlokoin.gates.model.teacher.Teacher; public class XlsxDocumentReestr extends XlsxDocument { public XlsxDocumentReestr(XlsxDocument xlsx) { - super(xlsx); + setData(xlsx.getData()); + setDocument(xlsx.getDocument()); + setHeaders(xlsx.getHeaders()); } /** diff --git a/gates/src/main/java/ru/mlokoin/gates/model/monitor/AbsentReview.java b/gates/src/main/java/ru/mlokoin/gates/model/monitor/AbsentReview.java index 698fada..8f16252 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/monitor/AbsentReview.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/monitor/AbsentReview.java @@ -23,7 +23,7 @@ public class AbsentReview { setBuildingsCount(storage.getAbsentBuildingsCount(xlsxEducations.getUniqueBuildings())); setCoursesCount(storage.getAbsentCoursesCount(xlsxEducations.getUniqueCourses())); - setProgramCretareaCount(storage.getAbsentProgramsCount(xlsxEducations.getUniquePrograms())); + setProgramsCount(storage.getAbsentProgramsCount(xlsxEducations.getUniquePrograms())); setTeachersCount(storage.getAbsentTeachersCount(xlsxEducations.getUniqueTeachers())); setStudentsCount(storage.getAbsentStudentsCount(xlsxEducations.getUniqueStudents())); setOrganizationsCount(storage.getAbsentOrganizationsCount(xlsxEducations.getUniqueOrganizations())); 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 38a477d..099310f 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 @@ -51,5 +51,39 @@ public class Program { public Program(Entry> entry) { this.setName(Stringer.clear(entry.getValue().get(6).getContent())); + + //устанавливаем длительность программы + try { + String s = Stringer.clear(entry.getValue().get(8).getContent()); + if (s == "") { + s = 0 + ""; + } else { + s = s.split("\\.", 2)[0]; + } + this.setLenght(Integer.parseInt(s));//если что, субстринг до точки + } catch (Exception e) { + this.setLenght(0); + } + + + this.setStudy_direction(Stringer.clear(entry.getValue().get(11).getContent())); + + //устанавливаем стоимость обучения + try { + String s = Stringer.clear(entry.getValue().get(15).getContent()); + if (s == "") { + s = 0 + ""; + } else { + s = s.split("\\.", 2)[0]; + } + this.setPrice(Integer.parseInt(s)); + } catch (Exception e) { + this.setPrice(0); + } + + 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())); } } diff --git a/gates/src/main/java/ru/mlokoin/gates/model/program/ProgramWraper.java b/gates/src/main/java/ru/mlokoin/gates/model/program/ProgramWraper.java index f6c0759..198d6ff 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/program/ProgramWraper.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/program/ProgramWraper.java @@ -13,17 +13,21 @@ import ru.mlokoin.gates.model.cretarea.ProgramCretarea; public class ProgramWraper { List programs; List cretareas; + List directions; public ProgramWraper(){ init(); } public ProgramWraper(ArrayList list) { + init(); this.programs = list; } public void init(){ this.programs = new ArrayList<>(); + this.cretareas = new ArrayList<>(); + this.directions = new ArrayList<>(); } public void addProgram(Program program){ @@ -34,6 +38,15 @@ public class ProgramWraper { this.cretareas.add(cretarea); } + public void addStudyDirection(String study_direction){ + this.directions.add(study_direction); + } + + public void addStudyDirections(List study_directions){ + this.directions.addAll(study_directions); + } + + public String toString(){ return this.programs.toString(); } 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 9ded67a..53b13f8 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 @@ -114,6 +114,5 @@ public class Student implements Serializable{ return true; } return false; - } } diff --git a/gates/src/main/java/ru/mlokoin/gates/model/teacher/Teacher.java b/gates/src/main/java/ru/mlokoin/gates/model/teacher/Teacher.java index 17d5728..54b06ab 100644 --- a/gates/src/main/java/ru/mlokoin/gates/model/teacher/Teacher.java +++ b/gates/src/main/java/ru/mlokoin/gates/model/teacher/Teacher.java @@ -103,4 +103,8 @@ public class Teacher implements Serializable{ this.setSecond_name(Naimer.getSecondNameOf(fio)); this.setLast_name(Naimer.getLastNameOf(fio)); } + + public boolean isSimilar(Teacher teacher) { + return this.getFullName().equals(teacher.getFullName()); + } } \ No newline at end of file diff --git a/gates/src/main/resources/templates/courses-check.html b/gates/src/main/resources/templates/courses-check.html index 8807377..ad44645 100644 --- a/gates/src/main/resources/templates/courses-check.html +++ b/gates/src/main/resources/templates/courses-check.html @@ -41,6 +41,7 @@
+ diff --git a/gates/src/main/resources/templates/organization-check.html b/gates/src/main/resources/templates/organization-check.html index c47bd1e..0848d5b 100644 --- a/gates/src/main/resources/templates/organization-check.html +++ b/gates/src/main/resources/templates/organization-check.html @@ -25,6 +25,8 @@ + +
Место проведения занятий (place)
diff --git a/gates/src/main/resources/templates/programs-check.html b/gates/src/main/resources/templates/programs-check.html index 73c1bf8..dff19ce 100644 --- a/gates/src/main/resources/templates/programs-check.html +++ b/gates/src/main/resources/templates/programs-check.html @@ -12,13 +12,6 @@

check-programs

-
    -
  • Наименование программы не должно содержать знаков переноса строки. - При внесении в базу они заменяются пробелами и не проходят проверку при сравнении с наименованием в xlsx
  • -
  • -
  • -
-
Наименование программы (name)
- +
Форма собственности (ownership) Продолжительность, часов (lenght) Направление обучения (study_direction)Стоимость (price)Стоимость, руб. (price) Критерий (cretarea_id)
- + + + - + + + + + - + + + +