Explorar o código

修复时间戳不连续问题

wuzilong hai 4 meses
pai
achega
dd76967592

+ 19 - 2
src/main/java/com/njuzr/eaibackend/service/impl/BehaviorRecordServiceImpl.java

@@ -217,12 +217,29 @@ public class BehaviorRecordServiceImpl implements BehaviorRecordService {
             return 0L;
         }
         
-        Long firstStartStamp = events.get(0).getStartStamp();
+        // 查找第一个非null的startStamp
+        Long firstStartStamp = null;
+        for (BehaviorRecord.BehaviorEvent event : events) {
+            if (event.getStartStamp() != null) {
+                firstStartStamp = event.getStartStamp();
+                break;
+            }
+        }
+        
         if (firstStartStamp == null) {
             return 0L;
         }
         
-        if (firstStartStamp < 5000 && lastEndStamp > 5000) {
+        // 检测页面刷新:如果起始时间戳小于5秒,认为是页面刷新后提交的
+        // 需要应用偏移以保持时间连续性
+        if (firstStartStamp < 5000 && lastEndStamp > 0) {
+            return lastEndStamp;
+        }
+        
+        // 检测时间戳回退:如果新版本的起始时间小于上一版本的结束时间
+        // 说明可能是同页面内的连续提交,但时间戳相对于页面加载时间
+        // 也需要应用偏移
+        if (firstStartStamp < lastEndStamp) {
             return lastEndStamp;
         }