Browse Source

fix never ending event

kpmy 4 years ago
parent
commit
a4a83fc975

+ 1 - 1
src/main/java/inn/ocsf/bee/freigeld/core/model/TicketStatus.java

@@ -1,5 +1,5 @@
 package inn.ocsf.bee.freigeld.core.model;
 
 public enum TicketStatus {
-    created, completed
+    created, completed, failed
 }

+ 10 - 0
src/main/java/inn/ocsf/bee/freigeld/core/model/data/TicketData.java

@@ -28,6 +28,8 @@ public class TicketData {
 
     private Date hold;
 
+    private Long peek;
+
     public String getTopic() {
         return topic;
     }
@@ -75,4 +77,12 @@ public class TicketData {
     public void setHold(Date hold) {
         this.hold = hold;
     }
+
+    public Long getPeek() {
+        return peek;
+    }
+
+    public void setPeek(Long peek) {
+        this.peek = peek;
+    }
 }

+ 9 - 5
src/main/kotlin/inn/ocsf/bee/freigeld/core/service/TicketService.kt

@@ -2,6 +2,7 @@ package inn.ocsf.bee.freigeld.core.service
 
 import inn.ocsf.bee.freigeld.core.model.Ticket
 import inn.ocsf.bee.freigeld.core.model.TicketStatus
+import inn.ocsf.bee.freigeld.core.model.data.QTicketData.ticketData
 import inn.ocsf.bee.freigeld.core.model.data.TicketData
 import inn.ocsf.bee.freigeld.core.repo.TicketRepository
 import kotlinx.coroutines.GlobalScope
@@ -50,6 +51,10 @@ class TicketService {
                 if (ok == true) remove(t)
             }
         }
+        ticketRepo.findAll(ticketData.peek.gt(255).and(ticketData.status.eq(TicketStatus.created))).forEach {
+            it.status = TicketStatus.failed
+            ticketRepo.save(it)
+        }
     }
 
     @PostConstruct
@@ -90,13 +95,12 @@ class TicketService {
     fun peekFirst(topic: String, modifyFn: ((Ticket) -> Ticket)? = null): Ticket? {
         val dt = Date()
         return findAll(topic, setOf(TicketStatus.created)).filter { it.hold == null || it.hold.before(dt) || it.hold.equals(dt) }.limit(1).findFirst().orElse(null)?.let {
+            it.peek = (it.peek ?: 0L) + 1L
             if (modifyFn != null) {
                 it.ticket = modifyFn(it.ticket)
-                ticketRepo.save(it)
-                it.ticket
-            } else {
-                it.ticket
             }
+            ticketRepo.save(it)
+            it.ticket
         }
     }
 
@@ -104,4 +108,4 @@ class TicketService {
         listenerMap.computeIfAbsent(topic) { CopyOnWriteArrayList() }
         listenerMap.get(topic)?.add(fn)
     }
-}
+}