diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/BuildingController.java b/gates/src/main/java/ru/mlokoin/gates/controller/BuildingController.java
index 242cd47..9e66ba6 100644
--- a/gates/src/main/java/ru/mlokoin/gates/controller/BuildingController.java
+++ b/gates/src/main/java/ru/mlokoin/gates/controller/BuildingController.java
@@ -1,6 +1,15 @@
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;
@@ -11,7 +20,11 @@ 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.BuildingWraper;
+import ru.mlokoin.gates.model.XlsxCell;
+import ru.mlokoin.gates.model.XlsxDocument;
@Controller
@RequestMapping(path = "/buildings")
@@ -21,8 +34,102 @@ public class BuildingController {
@GetMapping("/check/{id}")
public String checkBuildings(Model model, @PathVariable String id){
- return "buildings-check";
- // return "redirect:/document/view-as-educations/" + id;
+ List errors = new ArrayList<>();//список ошибок
+ 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 (){})
+ .block();
+
+ ArrayList xlsx_buildings = new ArrayList<>();//19 столбец
+ Map> map = xlsx.getData();
+ for (Map.Entry> entry : map.entrySet()) {
+ /**
+ * Обработка пустых строк
+ */
+ String string = "";
+ try {
+ string = entry.
+ getValue().
+ get(19).
+ getContent();
+ } catch (Exception e){
+ System.out.println("Не указан объект строительства: " + entry.getKey() + " :: " + e.getMessage());
+ string = "-";
+ }
+
+ Building building = new Building();
+ building.setName_short(string);
+ xlsx_buildings.add(building);
+ }
+ xlsx_buildings.remove(0);//Удалили из списка заголовок
+ Set xlsx_buildingSet = Set.copyOf(xlsx_buildings);//удалили повторения
+
+ //объекты строительства вконсоль ...
+ System.out.println("###############################");
+ System.out.println(">> Объекты строительства из файла: " + xlsx_buildingSet.size());
+ for (Building building : xlsx_buildingSet) {
+ System.out.println("Объект строительства (xlsx): " + building.getName_short());
+ }
+
+ //Ошибки в консоль
+ System.out.println("###############################");
+ System.out.println(">> errors: " + errors.size());
+ for (String msg : errors) {
+ System.out.println("msg: " + msg);
+ }
+
+ /**
+ * Получение перечня объектов строительства из базы
+ */
+ System.out.println("Получение списка объектов строительства из базы ...");
+ Set base_buildings = client.method(HttpMethod.GET)
+ .uri("http://resource-service-api:8181/building/list")
+ .retrieve()
+ .bodyToMono(new ParameterizedTypeReference >(){})
+ .block();
+
+ //Удаление из списка объектов строительства, присутствующих в базе
+ Set xlsx_buildings_str = new HashSet<>();
+ Set base_buildings_str = new HashSet<>();
+
+ for (Building b : xlsx_buildingSet) {
+ String s = b.getName_short();
+ xlsx_buildings_str.add(s);
+ }
+
+ System.out.println("Объекты строительства в базе:");
+ for (Building b : base_buildings) {
+ String s = b.getName_short();
+ System.out.println("base_buildings : " + s);
+ base_buildings_str.add(s);
+ }
+ xlsx_buildings_str.removeAll(base_buildings_str);
+
+ /**
+ * Если xlsx содержит элементы, отсутствующие в базе,
+ * вернуть страницу проверки объектов строительства
+ */
+ if (xlsx_buildings_str.size() != 0) {
+ ArrayList list = new ArrayList<>();
+ for (String string : xlsx_buildings_str) {
+ Building b = new Building();
+ b.setName_short(string);
+ list.add(b);
+ }
+
+ BuildingWraper bw = new BuildingWraper(list);
+
+ model.addAttribute("wrapBuildings", bw);
+ model.addAttribute("errors", errors);
+ model.addAttribute("id", id);
+ return "buildings-check";
+ }
+ return "redirect:/document/view-as-educations/" + id;
}
@PostMapping(
@@ -32,6 +139,19 @@ public class BuildingController {
MediaType.APPLICATION_JSON_VALUE
})
public String saveBuildings(@ModelAttribute("wrapBuildngs") BuildingWraper wraper, @PathVariable String id){
+ for (Building building : wraper.getList()) {
+ //Проверка наличия флага для добавления в базу
+ //по полю табельного номера
+ if (building.getName_full() != ""){
+ client.post()
+ .uri("http://resource-service-api:8181/building/create")
+ .body(Mono.just(building), Building.class)
+ .retrieve()
+ .toBodilessEntity()
+ .timeout(Duration.ofSeconds(1))
+ .block();
+ }
+ }
return "redirect:/buildings/check/" + id;
}
}
diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/OrganizationController.java b/gates/src/main/java/ru/mlokoin/gates/controller/OrganizationController.java
new file mode 100644
index 0000000..fe3aea1
--- /dev/null
+++ b/gates/src/main/java/ru/mlokoin/gates/controller/OrganizationController.java
@@ -0,0 +1,162 @@
+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.Building;
+import ru.mlokoin.gates.model.BuildingWraper;
+import ru.mlokoin.gates.model.Organization;
+import ru.mlokoin.gates.model.OrganizationWraper;
+import ru.mlokoin.gates.model.XlsxCell;
+import ru.mlokoin.gates.model.XlsxDocument;
+
+@Controller
+@RequestMapping(path = "/organizations")
+public class OrganizationController {
+ @Autowired
+ private WebClient client;
+
+ @GetMapping("/check/{id}")
+ public String checkOrganizations(Model model, @PathVariable String id){
+ //список ошибок
+ List errors = new ArrayList<>();
+
+ 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 (){})
+ .block();
+
+ ArrayList xlsx_orgs = new ArrayList<>();//1 столбец
+ Map> map = xlsx.getData();
+ for (Map.Entry> entry : map.entrySet()) {
+ /**
+ * Обработка пустых строк
+ */
+ String string = "";
+ try {
+ string = entry.
+ getValue().
+ get(1).
+ getContent();
+ } catch (Exception e){
+ System.out.println("Не указан объект строительства: " + entry.getKey() + " :: " + e.getMessage());
+ string = "-";
+ }
+
+ Organization organization = new Organization();
+ organization.setName_full(string);
+ xlsx_orgs.add(organization);
+ }
+ xlsx_orgs.remove(0);//Удалили из списка заголовок
+ Set xlsx_orgSet = Set.copyOf(xlsx_orgs);//удалили повторения
+
+ //организации вконсоль ...
+ System.out.println("###############################");
+ System.out.println(">> Организации из файла: " + xlsx_orgSet.size());
+ for (Organization organization : xlsx_orgSet) {
+ System.out.println("Объект строительства (xlsx): " + organization.getName_full());
+ }
+
+ //Ошибки в консоль
+ System.out.println("###############################");
+ System.out.println(">> errors: " + errors.size());
+ for (String msg : errors) {
+ System.out.println("msg: " + msg);
+ }
+
+ /**
+ * Получение перечня организаций из базы
+ */
+ System.out.println("Получение списка организаций из базы ...");
+ Set base_organizations = client.method(HttpMethod.GET)
+ .uri("http://resource-service-api:8181/organization/list")
+ .retrieve()
+ .bodyToMono(new ParameterizedTypeReference >(){})
+ .block();
+
+ //Удаление из списка организаций, присутствующих в базе
+ Set xlsx_organizations_str = new HashSet<>();
+ Set base_organizations_str = new HashSet<>();
+
+ for (Organization o : xlsx_orgSet) {
+ String s = o.getName_full();
+ xlsx_organizations_str.add(s);
+ }
+
+ System.out.println("Организации в базе:");
+ for (Organization o : base_organizations) {
+ String s = o.getName_full();
+ System.out.println("base_organizations : " + s);
+ base_organizations_str.add(s);
+ }
+ xlsx_organizations_str.removeAll(base_organizations_str);
+
+ /**
+ * Если xlsx содержит элементы, отсутствующие в базе,
+ * вернуть страницу проверки организаций
+ */
+ if (xlsx_organizations_str.size() != 0) {
+ ArrayList list = new ArrayList<>();
+ for (String string : xlsx_organizations_str) {
+ Organization o = new Organization();
+ o.setName_full(string);
+ list.add(o);
+ }
+
+ OrganizationWraper ow = new OrganizationWraper(list);
+
+ model.addAttribute("wrapOrganizations", ow);
+ model.addAttribute("errors", errors);
+ model.addAttribute("id", id);
+ return "organization-check";
+ }
+ return "redirect:/document/view-as-educations/" + id;
+ }
+
+ @PostMapping(
+ path="/save/{id}",
+ consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
+ produces = {
+ MediaType.APPLICATION_JSON_VALUE
+ })
+ public String saveOranizations(@ModelAttribute("wrapOrganizations") OrganizationWraper wraper, @PathVariable String id){
+ for (Organization organization : wraper.getList()) {
+ //Проверка наличия флага для добавления в базу
+ //по полю табельного номера
+ if (organization.getName_full() != ""){
+ client.post()
+ .uri("http://resource-service-api:8181/organization/create")
+ .body(Mono.just(organization), Organization.class)
+ .retrieve()
+ .toBodilessEntity()
+ .timeout(Duration.ofSeconds(1))
+ .block();
+ }
+ }
+ return "redirect:/organizations/check/" + id;
+ }
+
+}
diff --git a/gates/src/main/java/ru/mlokoin/gates/controller/TeacherController.java b/gates/src/main/java/ru/mlokoin/gates/controller/TeacherController.java
index 3ed1137..bca6457 100644
--- a/gates/src/main/java/ru/mlokoin/gates/controller/TeacherController.java
+++ b/gates/src/main/java/ru/mlokoin/gates/controller/TeacherController.java
@@ -148,10 +148,10 @@ public class TeacherController {
*/
System.out.println("Получение списка преподавателей из базы ...");
Set base_teachers = client.method(HttpMethod.GET)
- .uri("http://resource-service-api:8181/teacher/list")
- .retrieve()
- .bodyToMono(new ParameterizedTypeReference >(){})
- .block();
+ .uri("http://resource-service-api:8181/teacher/list")
+ .retrieve()
+ .bodyToMono(new ParameterizedTypeReference >(){})
+ .block();
/**
* Удаление преподавателей присутствующих в базе
diff --git a/gates/src/main/java/ru/mlokoin/gates/model/Building.java b/gates/src/main/java/ru/mlokoin/gates/model/Building.java
index bd866a5..9b54206 100644
--- a/gates/src/main/java/ru/mlokoin/gates/model/Building.java
+++ b/gates/src/main/java/ru/mlokoin/gates/model/Building.java
@@ -14,7 +14,7 @@ import lombok.NoArgsConstructor;
@Data
public class Building implements Serializable{
private long id;
- private String name_short;//Сокращенное наименование
+ private String name_short;//Сокращенное наименование (абревиатура)
private String name_full;//Полное наименование
private String code_short;//Краткий код
private String code_full;//Полный код
diff --git a/gates/src/main/java/ru/mlokoin/gates/model/OrganizationWraper.java b/gates/src/main/java/ru/mlokoin/gates/model/OrganizationWraper.java
new file mode 100644
index 0000000..c5310d5
--- /dev/null
+++ b/gates/src/main/java/ru/mlokoin/gates/model/OrganizationWraper.java
@@ -0,0 +1,31 @@
+package ru.mlokoin.gates.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import lombok.Data;
+
+@Data
+public class OrganizationWraper {
+ List list;
+
+ public OrganizationWraper(){
+ init();
+ }
+
+ public OrganizationWraper(List list){
+ this.list = list;
+ }
+
+ public void init(){
+ this.list = new ArrayList<>();
+ }
+
+ public void add(Organization organization){
+ this.list.add(organization);
+ }
+ public String toString(){
+ return this.list.toString();
+ }
+
+}
diff --git a/gates/src/main/resources/templates/buildings-check.html b/gates/src/main/resources/templates/buildings-check.html
index 1874eb6..342d085 100644
--- a/gates/src/main/resources/templates/buildings-check.html
+++ b/gates/src/main/resources/templates/buildings-check.html
@@ -13,7 +13,7 @@
+
+ check-organizations
+
+
+
+
+
+
Организации, отсутствующие в базе:
+
+
+
+
errors (потенциальные ошибки в исходном документе):
+
+
+
+
+
+
diff --git a/gates/src/main/resources/templates/organization-check.html b/gates/src/main/resources/templates/organization-check.html
new file mode 100644
index 0000000..c47bd1e
--- /dev/null
+++ b/gates/src/main/resources/templates/organization-check.html
@@ -0,0 +1,69 @@
+
+
+