Newer
Older
task-bldg / src / main / java / osm / surveyor / task / city / TaskService.java
@haya4 haya4 on 6 Aug 2022 3 KB fix : remove iquery.js
  1. package osm.surveyor.task.city;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.security.core.userdetails.UserDetails;
  5. import org.springframework.stereotype.Service;
  6.  
  7. import osm.surveyor.task.city.model.Citymesh;
  8. import osm.surveyor.task.city.model.CitymeshPK;
  9. import osm.surveyor.task.city.model.Operation;
  10. import osm.surveyor.task.city.model.Status;
  11. import osm.surveyor.task.city.model.Task;
  12.  
  13. import javax.transaction.Transactional;
  14.  
  15. import java.util.Date;
  16. import java.util.List;
  17. import java.util.UUID;
  18.  
  19. @Service
  20. @Transactional // メソッド開始時にトランザクションを開始、終了時にコミットする
  21. public class TaskService {
  22.  
  23. @Autowired
  24. TaskRepository repository;
  25. @Autowired
  26. CitymeshRepository meshRepository;
  27.  
  28. public void add(Task task, UserDetails user) {
  29. if (task.getOperation() == Operation.RESERVE) {
  30. task.setStatus(Status.RESERVED);
  31. }
  32. else if (task.getOperation() == Operation.CANCEL) {
  33. task.setStatus(Status.ACCEPTING);
  34. }
  35. else if (task.getOperation() == Operation.DONE) {
  36. task.setStatus(Status.IMPORTED);
  37. }
  38. else {
  39. NotAcceptableException e = new NotAcceptableException("未サポートのオペレーションです: "+ task.getOperation());
  40. e.setTask(task);
  41. throw e;
  42. }
  43. String uuid = UUID.randomUUID().toString();
  44.  
  45. CitymeshPK pk = new CitymeshPK();
  46. pk.setCitycode(task.getCitycode());
  47. pk.setMeshcode(task.getMeshcode());
  48. Citymesh mesh = meshRepository.getById(pk);
  49. Task ctask = getTaskByMesh(task.getCitycode(), task.getMeshcode());
  50. if (ctask == null) {
  51. task.setPreId(uuid);
  52. task.setCurrentId(uuid);
  53. }
  54. else {
  55. if (!ctask.getCurrentId().equals(task.getCurrentId())) {
  56. ConflictException e = new ConflictException("他のスレッドによってタスクが変更されたため更新できませんでした。");
  57. e.setTask(task);
  58. throw e;
  59. }
  60. if (task.getOperation() == Operation.RESERVE) {
  61. if (ctask.getStatus() != Status.ACCEPTING) {
  62. NotAcceptableException e = new NotAcceptableException("ステータスがACCEPTIONGではないためタスク登録できませんでした : "+ task.getOperation());
  63. e.setTask(task);
  64. throw e;
  65. }
  66. }
  67. else if (task.getOperation() == Operation.CANCEL) {
  68. if (ctask.getStatus() != Status.RESERVED) {
  69. NotAcceptableException e = new NotAcceptableException("ステータスがRESERVEDではないためタスク登録できませんでした : "+ task.getOperation());
  70. e.setTask(task);
  71. throw e;
  72. }
  73. if (!ctask.getUsername().equals(user.getUsername())) {
  74. NotAcceptableException e = new NotAcceptableException("他のマッパーのタスクはCANCELできません");
  75. e.setTask(task);
  76. throw e;
  77. }
  78. }
  79. else if (task.getOperation() == Operation.DONE) {
  80. if (ctask.getStatus() != Status.RESERVED) {
  81. NotAcceptableException e = new NotAcceptableException("タスク登録されていないためタスク完了できませんでした");
  82. e.setTask(task);
  83. throw e;
  84. }
  85. if (!ctask.getUsername().equals(user.getUsername())) {
  86. NotAcceptableException e = new NotAcceptableException("他のマッパーのタスクは完了できません");
  87. e.setTask(task);
  88. throw e;
  89. }
  90. }
  91. task.setPreId(ctask.getCurrentId());
  92. task.setCurrentId(uuid);
  93. }
  94. task.setUpdateTime(new Date());
  95. mesh.setStatus(task.getStatus());
  96. // データベースに格納
  97. repository.save(task);
  98. meshRepository.save(mesh);
  99. }
  100. public Task getTaskByMesh(String citycode, String meshcode) {
  101. List<Task> tasks = repository.serchByMesh(citycode, meshcode);
  102. for (Task t : tasks) {
  103. return t;
  104. }
  105. return null;
  106. }
  107.  
  108. public List<Task> getTasks() {
  109. return repository.findAll();
  110. }
  111.  
  112. }