Browse Source

new file: gates/src/main/java/ru/mlokoin/gates/controller/CourseController.java

modified:   gates/src/main/java/ru/mlokoin/gates/model/Building.java
modified:   gates/src/main/java/ru/mlokoin/gates/model/Course.java
new file:   gates/src/main/java/ru/mlokoin/gates/model/CourseWraper.java
modified:   gates/src/main/java/ru/mlokoin/gates/model/Program.java
modified:   gates/src/main/java/ru/mlokoin/gates/model/Teacher.java
new file:   gates/src/main/resources/templates/courses-check.html
modified:   gates/src/main/resources/templates/view-as-educations.html
modified:   storage-rs/src/main/java/ru/molokoin/storagers/model/XlsxDocument.java
modified:   storage-rs/src/main/resources/application.yaml
master
esoe 5 months ago
parent
commit
0029230c44
  1. 214
      gates/src/main/java/ru/mlokoin/gates/controller/CourseController.java
  2. 3
      gates/src/main/java/ru/mlokoin/gates/model/Building.java
  3. 2
      gates/src/main/java/ru/mlokoin/gates/model/Course.java
  4. 46
      gates/src/main/java/ru/mlokoin/gates/model/CourseWraper.java
  5. 3
      gates/src/main/java/ru/mlokoin/gates/model/Program.java
  6. 40
      gates/src/main/java/ru/mlokoin/gates/model/Teacher.java
  7. 70
      gates/src/main/resources/templates/courses-check.html
  8. 2
      gates/src/main/resources/templates/view-as-educations.html
  9. 10
      storage-rs/src/main/java/ru/molokoin/storagers/model/XlsxDocument.java
  10. 8
      storage-rs/src/main/resources/application.yaml

214
gates/src/main/java/ru/mlokoin/gates/controller/CourseController.java

@ -0,0 +1,214 @@
package ru.mlokoin.gates.controller;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Date;
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.Building;
import ru.mlokoin.gates.model.Course;
import ru.mlokoin.gates.model.Program;
import ru.mlokoin.gates.model.ProgramCretarea;
import ru.mlokoin.gates.model.ProgramWraper;
import ru.mlokoin.gates.model.Teacher;
import ru.mlokoin.gates.model.XlsxCell;
import ru.mlokoin.gates.model.XlsxDocument;
@Controller
@RequestMapping(path = "/courses")
public class CourseController {
@Autowired
private WebClient client;
@GetMapping("/check/{id}")
public String checkCoursess(Model model, @PathVariable String id) {
System.out.println("Проверка курсов, для внесения в базу ...");
System.out.println("Получение перечня курсов из xlsx-файла ...");
//получение данных файла в переменную xlsx
XlsxDocument xlsx = client.method(HttpMethod.GET)
.uri("http://storage-rs:8282/api/document/content/"
+ id + ".xlsx")
.retrieve()
.bodyToMono(new ParameterizedTypeReference <XlsxDocument>(){})
.block();
//список курсов из файла
List<Course> xlsx_courses = new ArrayList<>();//7 столбец
Map<Integer, List<XlsxCell>> map = xlsx.getData();
for (Map.Entry<Integer, List<XlsxCell>> entry : map.entrySet()) {
Course course = new Course();
course.setPlace(entry
.getValue()
.get(5)
.getContent());
//Обработка даты начала обучения
course.setStart_date(
new Date(
Long.parseLong(
entry
.getValue()
.get(7)
.getContent())));
//Обработка даты создания протокола
course.setProtocol_date(
new Date(
Long.parseLong(
entry
.getValue()
.get(9)
.getContent())));
//Номер протокола
course.setProtocol_number(entry
.getValue()
.get(13)
.getContent());
//отчтный период
course.setReport_period(entry
.getValue()
.get(17)
.getContent());
//Извлекаем ФИО преподавателя
course.setTeacher(new Teacher(entry
.getValue()
.get(18)
.getContent()));
//извлекаем программу обучения
course.setProgram(new Program(entry
.getValue()
.get(6)
.getContent()));
course.setBuilding(new Building(entry
.getValue()
.get(19)
.getContent()));
xlsx_courses.add(course);
}
xlsx_courses.remove(0);//Удалили из списка заголовок
Set<Course> xlsx_courseSet = Set.copyOf(xlsx_courses);//удалили повторения
//список номеров протоколов из файла в консоль
System.out.println("Список протоколов из файла:" + xlsx_courseSet.size());
// Set<String> xlsx_stringSet = new HashSet<>();
for (Course c : xlsx_courseSet) {
System.out.println(c.getProtocol_number() + " от " + c.getProtocol_date());
// xlsx_stringSet.add(c.);
}
// //Получение перечня программ из базы
// System.out.println("Получение списка программ из базы ...");
// List<Program> base_programs = client.method(HttpMethod.GET)
// .uri("http://resource-service-api:8181/program/list")
// .retrieve()
// .bodyToMono(new ParameterizedTypeReference <List<Program>>(){})
// .block();
// Set<Program> base_programSet = Set.copyOf(base_programs);
// //Список наименований программ из базы
// System.out.println("Список уникальных наименований программ из базы:");
// Set<String> base_stringSet = new HashSet<>();
// for (Program pc : base_programSet) {
// System.out.println(pc.getName());
// base_stringSet.add(pc.getName());
// }
// //Удаление программ присутствующих в базе
// xlsx_stringSet.removeAll(base_stringSet);
// if (xlsx_stringSet.size() != 0) {
// //Подготовка списка, для передачи в представление
// ArrayList<Program> list = new ArrayList<>();
// for (String string : xlsx_stringSet) {
// Program pc = new Program();
// pc.setName(string);
// list.add(pc);
// }
// /**
// * Подготавлеваем обертку формы
// */
// // передаем список новых программ
// ProgramWraper pwraper = new ProgramWraper(list);
// //подготавливаем список критериев
// List<ProgramCretarea> base_cretareas = client.method(HttpMethod.GET)
// .uri("http://resource-service-api:8181/cretarea/list")
// .retrieve()
// .bodyToMono(new ParameterizedTypeReference <List<ProgramCretarea>>(){})
// .block();
// //передаем список критериев в обертку формы, для селекта
// pwraper.setCretareas(base_cretareas);
// //передаем обертку в модель
// model.addAttribute("wrapPrograms", pwraper);
// model.addAttribute("id", id);
// return "programs-check";
// }
return "courses-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 savePrograms(@ModelAttribute("wrapPrograms") ProgramWraper wraper, @PathVariable String id){
/**
* Отправляем запросы на добавление новых программ в базу
*/
System.out.println("Программы для добавления в базу: "
+ wraper.getPrograms().toString());
for (Program program : wraper.getPrograms()) {
//Проверка наличия полного наименования имени программы
if (!program.getName().equals("")) {
//проверка наличия длительности программы
if (program.getLenght() != null) {
//проверка наличия направления обучения
if (!program.getStudy_direction().equals("")){
//проверка наличия критерия
if (program.getCretarea() != null){
client.post()
.uri("http://resource-service-api:8181/program/create")
.body(Mono.just(program), Program.class)
.retrieve()
.toBodilessEntity()
.timeout(Duration.ofSeconds(1))
.block();
}
}
}
}
}
/**
* Возвращаем пользователя на страницу перечня новых критериев
* - если он не пустой
*/
return "redirect:/programs/check/" + id;
}
}

3
gates/src/main/java/ru/mlokoin/gates/model/Building.java

@ -26,4 +26,7 @@ public class Building implements Serializable{
this.code_short = code_short; this.code_short = code_short;
this.code_full = code_full; this.code_full = code_full;
} }
public Building(String name_short){
this.setName_short(name_short);
}
} }

2
gates/src/main/java/ru/mlokoin/gates/model/Course.java

@ -14,7 +14,7 @@ public class Course {
private String place;//место проведения занятий private String place;//место проведения занятий
private Date start_date;//дата начала курса private Date start_date;//дата начала курса
private Date protocol_date;//дата протокола private Date protocol_date;//дата протокола
private String protocol_number;//номер протоколаssss private String protocol_number;//номер протокола
private String report_period;//отчетный период (наименование месяца) private String report_period;//отчетный период (наименование месяца)
private Teacher teacher;//сведения о преподаватле private Teacher teacher;//сведения о преподаватле
private Program program;//сведения о программе обучения private Program program;//сведения о программе обучения

46
gates/src/main/java/ru/mlokoin/gates/model/CourseWraper.java

@ -0,0 +1,46 @@
package ru.mlokoin.gates.model;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
@Data
public class CourseWraper {
List<Course> courses;
List<Program> programs;
List<Building> buildings;
List<Teacher> teachers;
public CourseWraper(){
init();
}
public CourseWraper(List<Course> list) {
this.courses = list;
}
public void init(){
this.courses = new ArrayList<>();
}
public void addCourse(Course course){
this.courses.add(course);
}
public void addProgram(Program program){
this.programs.add(program);
}
public void addBuilding(Building building){
this.buildings.add(building);
}
public void addTeacher(Teacher teacher){
this.teachers.add(teacher);
}
public String toString(){
return this.courses.toString();
}
}

3
gates/src/main/java/ru/mlokoin/gates/model/Program.java

@ -39,6 +39,9 @@ public class Program {
this.price = price; this.price = price;
this.cretarea = cretarea; this.cretarea = cretarea;
} }
public Program(String name){
this.setName(name);
}

40
gates/src/main/java/ru/mlokoin/gates/model/Teacher.java

@ -41,4 +41,44 @@ public class Teacher implements Serializable{
this.employee_id = employee_id; this.employee_id = employee_id;
this.snils = snils; this.snils = snils;
} }
/**
* Создание объекта преподаватель из строки ФИО
* - отсутствует обработка четвертого слова (оглы, угли итд ... )
* - если только одно слово, заменяется на "- - -"
* - если пустая строка, заменяется на "- - -"
*
* @param full_name
*/
public Teacher(String full_name){
String[] arr = full_name.split(" ");
for (int i = 0; i < arr.length; i++){
switch (i) {
case 0: {
if (arr.length > 1){
setSecond_name(arr[i]);//Фамилия
break;
}
setSecond_name("-");//Фамилия
setFirst_name("-");//Имя
setLast_name("-");//Отчество
break;
}
case 1: {
setFirst_name(arr[i]);//Имя
break;
}
case 2: {
setLast_name(arr[i]);//Отчество
break;
}
}
}
}
public String getFullName(){
return getSecond_name() + " " +
getFirst_name() + " " +
getLast_name();
}
} }

70
gates/src/main/resources/templates/courses-check.html

@ -0,0 +1,70 @@
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>check-courses</title>
<!-- Скрипт обработки thymeleaf компонентов -->
<script src="https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs@2/webcomponents-loader.min.js"></script>
<!-- скрипт просмотра *.MD документов -->
<!-- <script type="module" src="https://cdn.jsdelivr.net/gh/zerodevx/zero-md@1/src/zero-md.min.js"></script> -->
</head>
<body>
<header>
<h2>check-courses</h2>
<ul>
<li></li>
<li></li>
</ul>
</header>
<main>
<!-- <form th:action="@{/courses/save/{id}(id=${id})}"
th:method="post"
th:object="${wrapCourses}">
<table rules="all">
<thead>
<th><span>Место проведения занятий (place)</span></th>
<th><span>Дата начала (start_date)</span></th>
<th><span>Дата протокола (protocol_date)</span></th>
<th><span>Номер протокола (protocol_number)</span></th>
<th><span>Отчетный период (report_period)</span></th>
<th><span>Преподаватель (teacher)</span></th>
<th><span>Программа обучения (program)</span></th>
<th><span>Объект строительства (building)</span></th>
</thead>
<tbody>
<tr th:each="course, courseStat : *{getCourses()}" >
<td>
<input type="text" th:field="*{programs[__${courseStat.index}__].name}">
</td>
<td>
<input type="text" th:field="*{programs[__${courseStat.index}__].lenght}"/>
</td>
<td>
<select th:field="*{programs[__${courseStat.index}__].study_direction}">
<option value="0" disabled >выберите нарпавление обучения</option>
<option value="1" >Обучение вновь внедряемым процедурам</option>
<option value="2" >Обучение водителей</option>
<option value="3" >Обязательное обучение</option>
<option value="4" >Производственное обучение</option>
<option value="4" >Профессиональная переподготовка</option>
</select>
</td>
<td>
<input type="text" th:field="*{programs[__${courseStat.index}__].price}"/>
</td>
<td>
<select th:field="*{programs[__${pStat.index}__].cretarea.id}">
<option value="0" disabled >выберите критерий</option>
<option th:each="option : *{cretareas}" th:value="${option.id}" th:text="${option.name_short}"></option>
</select>
</td>
</tr>
</tbody>
</table>
<input type="submit" value="POST-ALL"/>
</form> -->
</main>
</body>
</html>

2
gates/src/main/resources/templates/view-as-educations.html

@ -38,7 +38,7 @@ xmlns:th="http://www.thymeleaf.org">
<form th:action="@{/organizations/check/{id}(id=${id})}" th:method="get"> <form th:action="@{/organizations/check/{id}(id=${id})}" th:method="get">
<input type="submit" value="CHECK-ORGANIZATION"/> <input type="submit" value="CHECK-ORGANIZATION"/>
</form> </form>
<form th:action="@{#}" th:method="get"> <form th:action="@{/courses/check/{id}(id=${id})}" th:method="get">
<input type="submit" value="CHECK-COURSES"/> <input type="submit" value="CHECK-COURSES"/>
</form> </form>
<form th:action="@{#}" th:method="get"> <form th:action="@{#}" th:method="get">

10
storage-rs/src/main/java/ru/molokoin/storagers/model/XlsxDocument.java

@ -10,6 +10,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
@ -68,8 +69,13 @@ public class XlsxDocument implements Serializable{
xlsxCell.setType("STRING"); xlsxCell.setType("STRING");
} break; } break;
case NUMERIC: { case NUMERIC: {
xlsxCell = new XlsxCell(cell.getNumericCellValue() + ""); if (DateUtil.isCellDateFormatted(cell)) {
xlsxCell.setType("NUMERIC"); xlsxCell = new XlsxCell(cell.getDateCellValue().getTime() + "" );
xlsxCell.setType("DATE");
} else {
xlsxCell = new XlsxCell(cell.getNumericCellValue() + "");
xlsxCell.setType("NUMERIC");
}
} break; } break;
case BOOLEAN: { case BOOLEAN: {
xlsxCell = new XlsxCell(cell.getBooleanCellValue() + ""); xlsxCell = new XlsxCell(cell.getBooleanCellValue() + "");

8
storage-rs/src/main/resources/application.yaml

@ -13,6 +13,14 @@ spring:
multipart: multipart:
max-file-size: 50MB max-file-size: 50MB
max-request-size: 50MB max-request-size: 50MB
mvc:
hiddenmethod:
filter:
enabled: true
format:
date: yyyy-MM-dd
date-time: yyyy-MM-dd HH:mm:ss
time: HH:mm:ss
server: server:
port: 8282 port: 8282
storage: storage:

Loading…
Cancel
Save