Răsfoiți Sursa

fix bug 排序long转int导致排序错误

skyline 1 an în urmă
părinte
comite
459f498f92

+ 2 - 2
admin/src/main/java/com/kym/admin/jobs/ActivityDelayJob.java

@@ -156,13 +156,13 @@ public class ActivityDelayJob implements DelayService<DelayActivity> {
 
     @Override
     public boolean addToDelayQueue(DelayedItem<DelayActivity> delayedItem) {
-        return DELAY_QUEUE.offer(delayedItem);
+        return DELAY_QUEUE.add(delayedItem);
     }
 
     @Override
     public boolean addToDelayQueue(DelayActivity activity) {
         DelayedItem<DelayActivity> activityDelayed = new DelayedItem<>(activity, activity.getExecuteTime());
-        return DELAY_QUEUE.offer(activityDelayed);
+        return DELAY_QUEUE.add(activityDelayed);
     }
 
 

+ 14 - 1
service/src/main/java/com/kym/service/jobs/DelayedItem.java

@@ -29,13 +29,26 @@ public class DelayedItem<T> implements Delayed {
     }
 
 
+    /**
+     * 获取过期时间
+     *
+     * @param unit the time unit
+     * @return
+     */
     @Override
     public long getDelay(@NotNull TimeUnit unit) {
         return unit.convert(delayTime.toInstant(ZoneOffset.ofHours(+8)).toEpochMilli() - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
     }
 
+    /**
+     * 比较排序
+     *
+     * @param o the object to be compared.
+     * @return
+     */
     @Override
     public int compareTo(@NotNull Delayed o) {
-        return (int) (getDelay(TimeUnit.MILLISECONDS) - o.getDelay(TimeUnit.MILLISECONDS));
+        var flag = getDelay(TimeUnit.MILLISECONDS) - o.getDelay(TimeUnit.MILLISECONDS);
+        return flag > 0 ? 1 : flag < 0 ? -1 : 0;
     }
 }