diff --git a/class.png b/class.png index b8eaa52..07bbe4a 100644 --- a/class.png +++ b/class.png Binary files differ diff --git a/class.pu b/class.pu index 5f3c42e..a82b155 100644 --- a/class.pu +++ b/class.pu @@ -19,15 +19,16 @@ username :VARCHAR 20 } - entity CITYMESH { + entity citymesh { + citycode : VARCHAR 255 + meshcode : VARCHAR 255 version :VARCHAR 255 path : VARCHAR 255 line : VARCHAR 255 point :VARCHAR 255 + city : City@ManyToOne } - CITYMESH }|- city : citycode + city --|{ citymesh } note bottom of db : spring.datasource.url=jdbc:h2:./taskdb\nspring.jpa.hibernate.ddl-auto=update @@ -138,7 +139,7 @@ class Citymesh <> { + id : Long - citycode : String@NumberFormat - - meshcode : String + - meshcode : String@NumberFormat version : String path : String point : String @@ -146,7 +147,27 @@ + setPoint(Point) + setLine(JsonLine) } -Citymesh .. CITYMESH +Citymesh .. citymesh +Citymesh . CitymeshPK +class CitymeshPK { + citycode : String + meshcode : String + + equals(Object) : boolean + + hashCode() : int +} + +class Task <> { + + currentId : String + preId : String + - citycode : String@NumberFormat + - meshcode : String@NumberFormat + mesh : Citymesh + status : Status + username : String + validator : String + operation : Operation + updateTime : Date +} interface CommandLineRunner @@ -155,6 +176,7 @@ + run() } DataLoader ..> CityRepository +DataLoader ..> CitymeshRepository CommandLineRunner <|-- DataLoader diff --git a/src/main/java/osm/surveyor/task/city/DataLoader.java b/src/main/java/osm/surveyor/task/city/DataLoader.java index feba2cc..8be2540 100644 --- a/src/main/java/osm/surveyor/task/city/DataLoader.java +++ b/src/main/java/osm/surveyor/task/city/DataLoader.java @@ -25,8 +25,8 @@ @RequiredArgsConstructor @Component public class DataLoader implements CommandLineRunner { - private final CityRepository repository; - private final CitymeshRepository taskRepository; + private final CityRepository cityRepository; + private final CitymeshRepository meshRepository; @Override public void run(String... args) throws Exception { @@ -45,8 +45,8 @@ Point coordinates = citiesJson.toCoordinates(); city.setLng(coordinates.getLng()); city.setLat(coordinates.getLat()); - - repository.save(city); + + cityRepository.save(city); storeTask(city); } } @@ -70,13 +70,14 @@ if (prop != null) { String meshcode = prop.getId(); if (meshcode != null) { - Citymesh task = new Citymesh(); - task.setCitycode(city.getCitycode()); - task.setMeshcode(meshcode); - task.setVersion(prop.getVersion()); - task.setPath(prop.getPath()); - task.setPoint(geometryPoint.getCoordinates().toString()); - taskRepository.save(task); + Citymesh mesh = new Citymesh(); + mesh.setCitycode(city.getCitycode()); + mesh.setMeshcode(meshcode); + mesh.setVersion(prop.getVersion()); + mesh.setPath(prop.getPath()); + mesh.setPoint(geometryPoint.getCoordinates().toString()); + mesh.setCity(city); + meshRepository.save(mesh); } } } diff --git a/src/main/java/osm/surveyor/task/city/TaskController.java b/src/main/java/osm/surveyor/task/city/TaskController.java new file mode 100644 index 0000000..2e9264b --- /dev/null +++ b/src/main/java/osm/surveyor/task/city/TaskController.java @@ -0,0 +1,57 @@ +package osm.surveyor.task.city; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import lombok.RequiredArgsConstructor; +import osm.surveyor.task.city.model.CitymeshPK; +import osm.surveyor.task.city.model.Task; + +@RequiredArgsConstructor +@Controller +public class TaskController { + private final TaskRepository taskRepository; + + /** + * ログインユーザーが関係しているTASKリスト + * @param model + * @return + */ + @GetMapping("/tasks") + public String showList(Model model) { + model.addAttribute("tasks", taskRepository.findAll()); + return "tasks"; + } + + @GetMapping("/task") + public String showTask(@RequestParam(name="citycode") String citycode, + @RequestParam(name="meshcode") String meshcode, Model model) { + CitymeshPK pk = new CitymeshPK(); + pk.setCitycode(citycode); + pk.setMeshcode(meshcode); + model.addAttribute("tasks", taskRepository.findById(pk)); + return "tasks"; + } + + @GetMapping("/task/add") + public String addTask(@RequestParam(name="citycode") String citycode, + @RequestParam(name="meshcode") String meshcode, @ModelAttribute Task task) { + return "task"; + } + + @PostMapping("/task/process") + public String process(@Validated @ModelAttribute Task task, BindingResult result) { + if (result.hasErrors()) { + return "task"; + } + + taskRepository.save(task); + return "redirect:/tasks"; + } +} diff --git a/src/main/java/osm/surveyor/task/city/TaskRepository.java b/src/main/java/osm/surveyor/task/city/TaskRepository.java new file mode 100644 index 0000000..9564a8e --- /dev/null +++ b/src/main/java/osm/surveyor/task/city/TaskRepository.java @@ -0,0 +1,10 @@ +package osm.surveyor.task.city; + +import org.springframework.data.jpa.repository.JpaRepository; + +import osm.surveyor.task.city.model.CitymeshPK; +import osm.surveyor.task.city.model.Task; + +public interface TaskRepository extends JpaRepository { + +} diff --git a/src/main/java/osm/surveyor/task/city/model/City.java b/src/main/java/osm/surveyor/task/city/model/City.java index 88a0489..273d9f1 100644 --- a/src/main/java/osm/surveyor/task/city/model/City.java +++ b/src/main/java/osm/surveyor/task/city/model/City.java @@ -41,6 +41,12 @@ @NumberFormat private String lat = "0.0"; + /** + * リレーション: to Citymesh 1..* + */ + //@OneToMany + //List meshes; + public void setSite(String site) { City.site = site; } diff --git a/src/main/java/osm/surveyor/task/city/model/Citymesh.java b/src/main/java/osm/surveyor/task/city/model/Citymesh.java index 1a742a7..55f58e3 100644 --- a/src/main/java/osm/surveyor/task/city/model/Citymesh.java +++ b/src/main/java/osm/surveyor/task/city/model/Citymesh.java @@ -5,6 +5,7 @@ import javax.persistence.Enumerated; import javax.persistence.Id; import javax.persistence.IdClass; +import javax.persistence.ManyToOne; import org.springframework.format.annotation.NumberFormat; @@ -25,7 +26,10 @@ @Id @NumberFormat private String meshcode; // CitymeshPK.meshcode - + + @ManyToOne + City city; // リレーション: to City 多対1 + private String version; private String path; diff --git a/src/main/java/osm/surveyor/task/city/model/MapperTask.java b/src/main/java/osm/surveyor/task/city/model/MapperTask.java deleted file mode 100644 index 058926e..0000000 --- a/src/main/java/osm/surveyor/task/city/model/MapperTask.java +++ /dev/null @@ -1,67 +0,0 @@ -package osm.surveyor.task.city.model; - -import java.util.Date; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.Id; -import javax.persistence.IdClass; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; -import javax.validation.constraints.NotBlank; - -import org.springframework.format.annotation.NumberFormat; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Entity -@IdClass(MapperTaskPK.class) -public class MapperTask { - - @Id - //@GenericGenerator(name = "UuidGenerator", strategy = "osm.surveyor.task.util.UuidGenerator") - //@GeneratedValue(generator = "UuidGenerator") - @Column(name = "current_id") - private String currentId; - - @NotBlank - @Column(name = "pre_id") - private String preId; - - @Id - @NumberFormat - private String meshcode; // MapperTaskPK.meshcode - - /** - * ステータス - */ - @Enumerated(EnumType.ORDINAL) - private Status status = Status.PREPARATION; - - /** - * インポート実行者 - */ - private String username; - - /** - * 検証者 - */ - private String validator; - - /** - * 操作内容 - */ - @Enumerated(EnumType.ORDINAL) - private Operation operation = Operation.NOP; - - /** - * 更新日時 - */ - @Temporal(TemporalType.TIMESTAMP) - Date updateTime; -} diff --git a/src/main/java/osm/surveyor/task/city/model/MapperTaskPK.java b/src/main/java/osm/surveyor/task/city/model/MapperTaskPK.java deleted file mode 100644 index 6c55bd3..0000000 --- a/src/main/java/osm/surveyor/task/city/model/MapperTaskPK.java +++ /dev/null @@ -1,36 +0,0 @@ -package osm.surveyor.task.city.model; - -import java.io.Serializable; - -import javax.persistence.Embeddable; - -import lombok.Getter; -import lombok.Setter; - -@SuppressWarnings("serial") -@Getter -@Setter -@Embeddable -public class MapperTaskPK implements Serializable { - private String username; - private String meshcode; - - public MapperTaskPK() { - } - - public boolean equals(Object obj) { - if (obj instanceof MapperTaskPK) { - if (((MapperTaskPK)obj).getUsername().equals(this.username)) { - if (((MapperTaskPK)obj).getMeshcode().equals(this.meshcode)) { - return true; - } - } - } - return false; - } - - public int hashCode() { - String s = this.username + this.meshcode; - return s.hashCode(); - } -} diff --git a/src/main/java/osm/surveyor/task/city/model/Task.java b/src/main/java/osm/surveyor/task/city/model/Task.java new file mode 100644 index 0000000..324f4b0 --- /dev/null +++ b/src/main/java/osm/surveyor/task/city/model/Task.java @@ -0,0 +1,73 @@ +package osm.surveyor.task.city.model; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.Id; +import javax.persistence.IdClass; +import javax.persistence.ManyToOne; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.validation.constraints.NotBlank; + +import org.springframework.format.annotation.NumberFormat; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Entity +@IdClass(CitymeshPK.class) +public class Task { + + @Id + //@GenericGenerator(name = "UuidGenerator", strategy = "osm.surveyor.task.util.UuidGenerator") + //@GeneratedValue(generator = "UuidGenerator") + @Column(name = "current_id") + private String currentId; + + @NotBlank + @Column(name = "pre_id") + private String preId; + + @NumberFormat + private String citycode; // CitymeshPK.citycode + + @NumberFormat + private String meshcode; // CitymeshPK.meshcode + + @ManyToOne + Citymesh mesh; // リレーション: to Citymesh 多対1 + + /** + * ステータス + */ + @Enumerated(EnumType.ORDINAL) + private Status status = Status.PREPARATION; + + /** + * インポート実行者 + */ + private String username; // + + /** + * 検証者 + */ + private String validator; + + /** + * 操作内容 + */ + @Enumerated(EnumType.ORDINAL) + private Operation operation = Operation.NOP; + + /** + * 更新日時 + */ + @Temporal(TemporalType.TIMESTAMP) + Date updateTime; +} diff --git a/src/main/java/osm/surveyor/task/city/model/TaskPK.java b/src/main/java/osm/surveyor/task/city/model/TaskPK.java new file mode 100644 index 0000000..1e12339 --- /dev/null +++ b/src/main/java/osm/surveyor/task/city/model/TaskPK.java @@ -0,0 +1,39 @@ +package osm.surveyor.task.city.model; + +import java.io.Serializable; + +import javax.persistence.Embeddable; + +import lombok.Getter; +import lombok.Setter; + +@SuppressWarnings("serial") +@Getter +@Setter +@Embeddable +public class TaskPK implements Serializable { + private String username; + private String citycode; + private String meshcode; + + public TaskPK() { + } + + public boolean equals(Object obj) { + if (obj instanceof TaskPK) { + if (((TaskPK)obj).getUsername().equals(this.username)) { + if (((TaskPK)obj).getCitycode().equals(this.citycode)) { + if (((TaskPK)obj).getMeshcode().equals(this.meshcode)) { + return true; + } + } + } + } + return false; + } + + public int hashCode() { + String s = this.username + this.citycode + this.meshcode; + return s.hashCode(); + } +} diff --git a/src/main/resources/templates/meshes.html b/src/main/resources/templates/meshes.html index 1e74871..1ebe93d 100644 --- a/src/main/resources/templates/meshes.html +++ b/src/main/resources/templates/meshes.html @@ -61,20 +61,10 @@ - + タスク - - - - 編集 - - - - - 削除 - diff --git a/src/main/resources/templates/preflist.html b/src/main/resources/templates/preflist.html index 5dce65b..caeec31 100644 --- a/src/main/resources/templates/preflist.html +++ b/src/main/resources/templates/preflist.html @@ -13,42 +13,41 @@ -
+
-
-
- -
-
-
地域メッシュコード (都道府県選択)
-
-
- - -
-
-
-
- - -
- + + +
diff --git a/src/main/resources/templates/task.html b/src/main/resources/templates/task.html new file mode 100644 index 0000000..0408d43 --- /dev/null +++ b/src/main/resources/templates/task.html @@ -0,0 +1,99 @@ + + + + + + + + +
+
+ + + +
+
+
+ + +
+
+ +
+
+ +
+
+
マッパー登録
+
+
+
+
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+ + + diff --git a/src/main/resources/templates/tasks.html b/src/main/resources/templates/tasks.html new file mode 100644 index 0000000..5772f1d --- /dev/null +++ b/src/main/resources/templates/tasks.html @@ -0,0 +1,83 @@ + + + + + + + + + + +
+
+ + +
+
+
+ +
+
+ +
+
+ +
+
+
Plateau 3D都市データ
+
+
+ + +
+
+
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + +
ステータス自治体コード地域メッシュoperationupdateTime
+ + + 作業予約 + +
+ +
+
+
+
+
+
+
+ + +