diff --git a/pom.xml b/pom.xml
index 17dd167..91ac8a9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.boot
spring-boot-starter-parent
- 2.6.14
+ 2.6.15
osm.surveyor.plateau
@@ -32,7 +32,7 @@
spring-security-test
test
-
+
org.springframework.boot
spring-boot-starter-thymeleaf
diff --git a/src/main/java/osm/surveyor/task/city/DataLoader.java b/src/main/java/osm/surveyor/task/city/DataLoader.java
index 0052bcd..b2b47d8 100644
--- a/src/main/java/osm/surveyor/task/city/DataLoader.java
+++ b/src/main/java/osm/surveyor/task/city/DataLoader.java
@@ -17,7 +17,7 @@
import osm.surveyor.task.city.model.CityJson;
import osm.surveyor.task.city.model.Citymesh;
import osm.surveyor.task.city.model.Status;
-import osm.surveyor.task.city.model.Task;
+import osm.surveyor.task.city.model.TaskEntity;
import osm.surveyor.task.util.Geojson;
import osm.surveyor.task.util.JsonFeature;
import osm.surveyor.task.util.JsonGeometryPoint;
@@ -85,7 +85,7 @@
mesh.setPoint(geometryPoint.getCoordinates().toString());
mesh.setCity(city);
- Task task = taskService.getTaskByMesh(city.getCitycode(), meshcode);
+ TaskEntity task = (TaskEntity) taskService.getTaskByMesh(city.getCitycode(), meshcode);
if (task == null) {
Status status = city.getStatus();
if (status != null) {
diff --git a/src/main/java/osm/surveyor/task/city/TaskController.java b/src/main/java/osm/surveyor/task/city/TaskController.java
index 89e04a2..69281e3 100644
--- a/src/main/java/osm/surveyor/task/city/TaskController.java
+++ b/src/main/java/osm/surveyor/task/city/TaskController.java
@@ -27,7 +27,7 @@
import osm.surveyor.task.city.model.CitymeshPK;
import osm.surveyor.task.city.model.Operation;
import osm.surveyor.task.city.model.Status;
-import osm.surveyor.task.city.model.Task;
+import osm.surveyor.task.city.model.TaskEntity;
@RequiredArgsConstructor
@Controller
@@ -67,7 +67,7 @@
Citymesh mesh = meshRepository.getById(pk);
model.addAttribute("mesh", mesh);
- List tasks = taskRepository.serchByMesh(citycode, meshcode);
+ List tasks = taskRepository.serchByMesh(citycode, meshcode);
model.addAttribute("tasks", tasks);
return "tasks";
}
@@ -128,7 +128,7 @@
pk.setMeshcode(meshcode);
Citymesh mesh = meshRepository.getById(pk);
- Task pre = service.getTaskByMesh(citycode, meshcode);
+ TaskEntity pre = service.getTaskByMesh(citycode, meshcode);
if (pre != null) {
pre.setOperation(operation);
pre.setStatus(nextStatus);
@@ -138,7 +138,7 @@
else {
// 既存Taskが無い場合は生成する
String uuid = UUID.randomUUID().toString();
- Task task = new Task();
+ TaskEntity task = new TaskEntity();
task.setCurrentId(uuid);
task.setPreId(uuid);
task.setCitycode(citycode);
@@ -154,7 +154,7 @@
@PostMapping("/task/process")
public String process(@AuthenticationPrincipal UserDetails user,
- @Validated @ModelAttribute Task task,
+ @Validated @ModelAttribute TaskEntity task,
BindingResult result)
{
if (result.hasErrors()) {
@@ -175,12 +175,12 @@
@PostMapping("/admin/download")
public String download(HttpServletResponse response) {
try (OutputStream os = response.getOutputStream();) {
- List list = taskRepository.findAll();
+ List list = taskRepository.findAll();
StringBuffer sb = new StringBuffer();
boolean c1 = false;
sb.append("[");
sb.append(System.lineSeparator());
- for (Task task : list) {
+ for (TaskEntity task : list) {
if (c1) {
sb.append(",");
}
@@ -260,7 +260,7 @@
return exceptionHandler(e.getTask(), model);
}
- private String exceptionHandler(Task task, Model model) {
+ private String exceptionHandler(TaskEntity task, Model model) {
if (task == null) {
return "error";
}
@@ -284,7 +284,7 @@
return nextPage(task);
}
- private String nextPage(Task task) {
+ private String nextPage(TaskEntity task) {
if (task.getOperation() == Operation.OK) {
return "task_done";
}
diff --git a/src/main/java/osm/surveyor/task/city/TaskException.java b/src/main/java/osm/surveyor/task/city/TaskException.java
index 51feb08..1796ee1 100644
--- a/src/main/java/osm/surveyor/task/city/TaskException.java
+++ b/src/main/java/osm/surveyor/task/city/TaskException.java
@@ -2,14 +2,14 @@
import lombok.Getter;
import lombok.Setter;
-import osm.surveyor.task.city.model.Task;
+import osm.surveyor.task.city.model.TaskEntity;
@Setter
@Getter
public class TaskException extends RuntimeException {
private static final long serialVersionUID = 1L;
- private Task task;
+ private TaskEntity task;
public TaskException(String errorMessage) {
super(errorMessage);
diff --git a/src/main/java/osm/surveyor/task/city/TaskRepository.java b/src/main/java/osm/surveyor/task/city/TaskRepository.java
index 80ddcf5..0af0f5a 100644
--- a/src/main/java/osm/surveyor/task/city/TaskRepository.java
+++ b/src/main/java/osm/surveyor/task/city/TaskRepository.java
@@ -5,12 +5,11 @@
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
+import osm.surveyor.task.city.model.TaskEntity;
-import osm.surveyor.task.city.model.Task;
-
-public interface TaskRepository extends JpaRepository {
+public interface TaskRepository extends JpaRepository {
- @Query("SELECT t FROM Task t WHERE t.citycode = :citycode AND t.meshcode = :meshcode order by update_time DESC")
- List serchByMesh(@Param("citycode")String citycode, @Param("meshcode")String meshcode);
+ @Query("SELECT t FROM TaskEntity t WHERE t.citycode = :citycode AND t.meshcode = :meshcode order by update_time DESC")
+ List serchByMesh(@Param("citycode")String citycode, @Param("meshcode")String meshcode);
}
diff --git a/src/main/java/osm/surveyor/task/city/TaskService.java b/src/main/java/osm/surveyor/task/city/TaskService.java
index 0056760..295ed94 100644
--- a/src/main/java/osm/surveyor/task/city/TaskService.java
+++ b/src/main/java/osm/surveyor/task/city/TaskService.java
@@ -8,7 +8,7 @@
import osm.surveyor.task.city.model.CitymeshPK;
import osm.surveyor.task.city.model.Operation;
import osm.surveyor.task.city.model.Status;
-import osm.surveyor.task.city.model.Task;
+import osm.surveyor.task.city.model.TaskEntity;
import javax.transaction.Transactional;
@@ -26,7 +26,7 @@
@Autowired
CitymeshRepository meshRepository;
- public void add(Task task, UserDetails user) {
+ public void add(TaskEntity task, UserDetails user) {
if (task.getOperation() == Operation.RESERVE) {
task.setStatus(Status.EDITING);
}
@@ -52,7 +52,7 @@
pk.setMeshcode(task.getMeshcode());
Citymesh mesh = meshRepository.getById(pk);
- Task ctask = getTaskByMesh(task.getCitycode(), task.getMeshcode());
+ TaskEntity ctask = getTaskByMesh(task.getCitycode(), task.getMeshcode());
if (ctask == null) {
task.setPreId(uuid);
task.setCurrentId(uuid);
@@ -63,34 +63,16 @@
e.setTask(task);
throw e;
}
- if (task.getOperation() == Operation.RESERVE) {
- if ((ctask.getStatus() != Status.ACCEPTING) && (ctask.getStatus() != Status.NG)) {
- NotAcceptableException e = new NotAcceptableException("予約受付中ではないためタスク予約できませんでした : "+ task.getOperation());
- e.setTask(task);
- throw e;
- }
- }
- else if (task.getOperation() == Operation.CANCEL) {
+ if (task.getOperation() == Operation.CANCEL) {
if (ctask.getStatus() != Status.EDITING) {
NotAcceptableException e = new NotAcceptableException("タスクが'編集中'ではないため'編集取消'できませんでした : "+ task.getOperation());
e.setTask(task);
throw e;
}
- if (!ctask.getUsername().equals(user.getUsername())) {
- NotAcceptableException e = new NotAcceptableException("他のマッパーの'タスク'は'編集取消'できません");
- e.setTask(task);
- throw e;
- }
}
else if (task.getOperation() == Operation.OK) {
// タスク予約していなくてもインポートできる
// 他のマッパーが予約していてもインポート可能
- if (ctask.getStatus() == Status.PREPARATION) {
- NotAcceptableException e = new NotAcceptableException("準備中のため登録できませんでした");
- e.setTask(task);
- throw e;
- }
-
String changeset = task.getChangeSet();
if (changeset == null) {
TaskException e = new TaskException("変更セットNoが入力されていません");
@@ -134,15 +116,15 @@
meshRepository.save(mesh);
}
- public Task getTaskByMesh(String citycode, String meshcode) {
- List tasks = repository.serchByMesh(citycode, meshcode);
- for (Task t : tasks) {
+ public TaskEntity getTaskByMesh(String citycode, String meshcode) {
+ List tasks = repository.serchByMesh(citycode, meshcode);
+ for (TaskEntity t : tasks) {
return t;
}
return null;
}
- public List getTasks() {
+ public List getTasks() {
return repository.findAll();
}
}
diff --git a/src/main/java/osm/surveyor/task/city/model/Operation.java b/src/main/java/osm/surveyor/task/city/model/Operation.java
index 9b4cb59..e36d737 100644
--- a/src/main/java/osm/surveyor/task/city/model/Operation.java
+++ b/src/main/java/osm/surveyor/task/city/model/Operation.java
@@ -11,5 +11,6 @@
CANCEL, // 編集取消
NG, // 編集[NG]
OK, // 編集完了
- VIEW // 参照
+ VIEW, // 参照
+ RESERVE_CANCEL // 予約取消
}
diff --git a/src/main/java/osm/surveyor/task/city/model/Status.java b/src/main/java/osm/surveyor/task/city/model/Status.java
index 46a57f0..8dae868 100644
--- a/src/main/java/osm/surveyor/task/city/model/Status.java
+++ b/src/main/java/osm/surveyor/task/city/model/Status.java
@@ -1,9 +1,10 @@
package osm.surveyor.task.city.model;
public enum Status {
- PREPARATION, // preparation 準備中 "X"
- ACCEPTING, // Accepting 受付中 "1"
- EDITING, // 編集待ち "2"
- NG, // 検証(NG) "0"
- OK // 完了 "4"
+ PREPARATION, // 1: preparation 準備中 "X"
+ ACCEPTING, // 2: Accepting 受付中 "1"
+ EDITING, // 4: 編集待ち "2"
+ RESERVED, // 3: Reserved 予約済み "3"
+ NG, // 5: 検証(NG) "0"
+ OK // 6: 完了 "4"
}
diff --git a/src/main/java/osm/surveyor/task/city/model/Task.java b/src/main/java/osm/surveyor/task/city/model/Task.java
deleted file mode 100644
index e6ea582..0000000
--- a/src/main/java/osm/surveyor/task/city/model/Task.java
+++ /dev/null
@@ -1,103 +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.ManyToOne;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.validation.constraints.NotBlank;
-
-import org.springframework.format.annotation.NumberFormat;
-
-import com.fasterxml.jackson.databind.JsonNode;
-
-import lombok.Getter;
-import lombok.Setter;
-import osm.surveyor.task.util.JsonTemple;
-
-@Getter
-@Setter
-@Entity
-public class Task extends JsonTemple {
-
- @Id
- @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.STRING)
- private Status status = Status.PREPARATION;
-
- /**
- * 編集者
- */
- private String username;
-
- /**
- * 変更セットNo
- */
- @NumberFormat
- @Column(name = "changeset")
- private String changeSet;
-
- /**
- * コメント
- */
- private String comment;
-
- /**
- * 操作内容
- */
- @Enumerated(EnumType.ORDINAL)
- private Operation operation = Operation.NOP;
-
- /**
- * 更新日時
- */
- @Temporal(TemporalType.TIMESTAMP)
- Date updateTime;
-
- @Override
- public String toString() {
- StringBuffer sb = new StringBuffer();
- boolean c1 = false;
- sb.append("{");
- c1 = outStr(c1, sb, "currentId", this.getCurrentId());
- c1 = outStr(c1, sb, "preId", this.getPreId());
- c1 = outStr(c1, sb, "citycode", this.getCitycode());
- c1 = outStr(c1, sb, "meshcode", this.getMeshcode());
- c1 = outStr(c1, sb, "status", this.getStatus().toString());
- c1 = outStr(c1, sb, "username", this.getUsername());
- c1 = outStr(c1, sb, "changeSet", this.getChangeSet());
- c1 = outStr(c1, sb, "comment", this.getComment());
- c1 = outStr(c1, sb, "operation", this.getOperation().toString());
- c1 = outStr(c1, sb, "updateTime", (this.getUpdateTime() == null ? "" : this.getUpdateTime().toString()));
- sb.append("}");
- return sb.toString();
- }
-
- @Override
- public void parse(JsonNode node) {
- // TODO
- }
-}
diff --git a/src/main/java/osm/surveyor/task/city/model/TaskEntity.java b/src/main/java/osm/surveyor/task/city/model/TaskEntity.java
new file mode 100644
index 0000000..5a6d031
--- /dev/null
+++ b/src/main/java/osm/surveyor/task/city/model/TaskEntity.java
@@ -0,0 +1,103 @@
+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.ManyToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.validation.constraints.NotBlank;
+
+import org.springframework.format.annotation.NumberFormat;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import osm.surveyor.task.util.JsonTemple;
+
+@Data
+@EqualsAndHashCode(callSuper=false)
+@Entity
+public class TaskEntity extends JsonTemple {
+
+ @Id
+ @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.STRING)
+ private Status status = Status.PREPARATION;
+
+ /**
+ * 編集者
+ */
+ private String username;
+
+ /**
+ * 変更セットNo
+ */
+ @NumberFormat
+ @Column(name = "changeset")
+ private String changeSet;
+
+ /**
+ * コメント
+ */
+ private String comment;
+
+ /**
+ * 操作内容
+ */
+ @Enumerated(EnumType.ORDINAL)
+ private Operation operation = Operation.NOP;
+
+ /**
+ * 更新日時
+ */
+ @Temporal(TemporalType.TIMESTAMP)
+ Date updateTime;
+
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ boolean c1 = false;
+ sb.append("{");
+ c1 = outStr(c1, sb, "currentId", this.getCurrentId());
+ c1 = outStr(c1, sb, "preId", this.getPreId());
+ c1 = outStr(c1, sb, "citycode", this.getCitycode());
+ c1 = outStr(c1, sb, "meshcode", this.getMeshcode());
+ c1 = outStr(c1, sb, "status", this.getStatus().toString());
+ c1 = outStr(c1, sb, "username", this.getUsername());
+ c1 = outStr(c1, sb, "changeSet", this.getChangeSet());
+ c1 = outStr(c1, sb, "comment", this.getComment());
+ c1 = outStr(c1, sb, "operation", this.getOperation().toString());
+ c1 = outStr(c1, sb, "updateTime", (this.getUpdateTime() == null ? "" : this.getUpdateTime().toString()));
+ sb.append("}");
+ return sb.toString();
+ }
+
+ @Override
+ public void parse(JsonNode node) {
+ // TODO
+ }
+}
diff --git a/src/main/java/osm/surveyor/task/city/model/TaskStatusEntity.java b/src/main/java/osm/surveyor/task/city/model/TaskStatusEntity.java
new file mode 100644
index 0000000..06880bd
--- /dev/null
+++ b/src/main/java/osm/surveyor/task/city/model/TaskStatusEntity.java
@@ -0,0 +1,40 @@
+package osm.surveyor.task.city.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@Table(name = "task_status")
+public class TaskStatusEntity {
+
+ @Id
+ @GeneratedValue(strategy=GenerationType.IDENTITY)
+ private Integer status_code;
+
+ @Column(name = "status", nullable = false)
+ private String status;
+
+ @Column(name = "is_reserve", nullable = false)
+ private Boolean isReserve;
+
+ @Column(name = "is_reserve_cancel", nullable = false)
+ private Boolean isReserveCancel;
+
+ @Column(name = "is_edit_ok", nullable = false)
+ private Boolean isEditOk;
+
+ @Column(name = "is_edit_ng", nullable = false)
+ private Boolean isEditNg;
+
+}
diff --git a/src/main/java/osm/surveyor/task/city/model/Tasks.java b/src/main/java/osm/surveyor/task/city/model/Tasks.java
index 2851d71..c001f85 100644
--- a/src/main/java/osm/surveyor/task/city/model/Tasks.java
+++ b/src/main/java/osm/surveyor/task/city/model/Tasks.java
@@ -14,7 +14,7 @@
private Result result; // 処理結果
- private List tasks; // データ
+ private List tasks; // データ
@Getter
@Builder
diff --git a/src/main/resources/database.sql b/src/main/resources/database.sql
new file mode 100644
index 0000000..e4ac904
--- /dev/null
+++ b/src/main/resources/database.sql
@@ -0,0 +1,6 @@
+-- insert into task_status (status_code, status, is_reserve, is_reserve_cancel, is_edit_ok, is_edit_ng) values (1, 'PREPARATION', false,false,false,false);
+-- insert into task_status (status_code, status, is_reserve, is_reserve_cancel, is_edit_ok, is_edit_ng) values (2, 'ACCEPTING', true,false,true,true);
+-- insert into task_status (status_code, status, is_reserve, is_reserve_cancel, is_edit_ok, is_edit_ng) values (3, 'RESERVED', false,true,true,true);
+-- insert into task_status (status_code, status, is_reserve, is_reserve_cancel, is_edit_ok, is_edit_ng) values (4, 'EDITING', false,false,true,true);
+-- insert into task_status (status_code, status, is_reserve, is_reserve_cancel, is_edit_ok, is_edit_ng) values (5, 'NG', false,false,true,true);
+-- insert into task_status (status_code, status, is_reserve, is_reserve_cancel, is_edit_ok, is_edit_ng) values (6, 'OK', false,false,true,true);
diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties
index 3459ea0..229c5e7 100644
--- a/src/main/resources/i18n/messages.properties
+++ b/src/main/resources/i18n/messages.properties
@@ -12,6 +12,9 @@
# status
PREPARATION = Preparation
+ACCEPTING = ACCEPTING
+RESERVED = RESERVED
+
# Task items
meshcode = meshcode
@@ -35,5 +38,5 @@
reserve = task reserve
cancel = cancel
done = done
-NG = Validation(NG)
-OK = Validation(OK)
+NG = EDIT(NG)
+OK = EDIT(OK)
diff --git a/src/main/resources/i18n/messages_ja.properties b/src/main/resources/i18n/messages_ja.properties
index 722d8a0..df6c9c2 100644
--- a/src/main/resources/i18n/messages_ja.properties
+++ b/src/main/resources/i18n/messages_ja.properties
@@ -12,6 +12,9 @@
# status
PREPARATION = 準備中
+ACCEPTING = 受付中
+RESERVED = 予約済み
+
# Task items
meshcode = 地域基準メッシュ
@@ -31,7 +34,8 @@
# operation
download = ダウンロード
return = 戻る
-reserve = 編集者登録
-cancel = 編集取消
+reserve = 編集予約
+cancel = 予約取消
+done = done
NG = 編集(NG)
-OK = 編集完了
+OK = 編集(OK)
diff --git a/src/main/resources/static/css/app.css b/src/main/resources/static/css/app.css
index 450b4c6..c2ae19d 100644
--- a/src/main/resources/static/css/app.css
+++ b/src/main/resources/static/css/app.css
@@ -64,6 +64,11 @@
background-color: #224abe;
}
+.btn-gray {
+ color: white;
+ background-color: #a9a9a9;
+}
+
.btn-navy:hover {
color: white;
background-color: #0d47a1;
diff --git a/src/main/resources/templates/tasks.html b/src/main/resources/templates/tasks.html
index 0025551..70e54c3 100644
--- a/src/main/resources/templates/tasks.html
+++ b/src/main/resources/templates/tasks.html
@@ -66,7 +66,7 @@
-
+