From c1d32ecdb36d7365a660ae2cf1405e1ca1898b4b Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期日, 20 十月 2024 22:21:02 +0800
Subject: [PATCH] 优化楼层查找

---
 nvcs/cache.go |   70 ++++++++++++++++++-----------------
 1 files changed, 36 insertions(+), 34 deletions(-)

diff --git a/nvcs/cache.go b/nvcs/cache.go
index 1915fd3..eb89865 100644
--- a/nvcs/cache.go
+++ b/nvcs/cache.go
@@ -112,66 +112,68 @@
 }
 
 func (c *simpleCache) getPositionByTime(timestamp int64) (runData ElevatorRunData) {
-	node := c.data.Back()
+	node := c.data.Back() // 浠庨摼琛ㄥ熬閮ㄥ紑濮�
 	if node == nil {
 		return
 	}
 
-	for {
-		if node.Prev() == nil {
-			break
-		}
-
-		if node.Prev().Value.(ElevatorRunData).Timestamp >= timestamp {
-			node = node.Prev()
+	for node != nil {
+		if data, ok := node.Value.(ElevatorRunData); ok {
+			if data.Timestamp >= timestamp {
+				runData = data
+				node = node.Prev() // 鍚戝墠绉诲姩鑺傜偣
+			} else {
+				break
+			}
 		} else {
 			break
 		}
-	}
-
-	if node.Value.(ElevatorRunData).Timestamp >= timestamp {
-		runData = node.Value.(ElevatorRunData)
 	}
 
 	return
 }
 
 func (c *simpleCache) getMovePosition(timestamp int64, floor string) (runData ElevatorRunData) {
-	node := c.data.Back()
+	node := c.data.Back() // 浠庨摼琛ㄦ湯灏惧紑濮�
 	if node == nil {
 		return
 	}
 
-	// 鍏堟壘鍒版渶杩戣妭鐐�
-	for {
-		if node.Prev() == nil {
-			break
-		}
-
-		if node.Prev().Value.(ElevatorRunData).Timestamp >= timestamp {
-			node = node.Prev()
+	// 鎵惧埌鏈�杩戠殑绗﹀悎鏃堕棿鎴崇殑鑺傜偣
+	for node != nil {
+		if data, ok := node.Value.(ElevatorRunData); ok {
+			if data.Timestamp >= timestamp {
+				node = node.Prev() // 鍚戝墠绉诲姩鑺傜偣
+			} else {
+				break
+			}
 		} else {
 			break
 		}
 	}
 
-	if node.Value.(ElevatorRunData).Timestamp >= timestamp {
-		for {
-			if node.Next() == nil {
-				break
+	// 濡傛灉鎵惧埌鐨勮妭鐐圭殑鏃堕棿鎴崇鍚堣姹傦紝缁х画妫�鏌ユゼ灞�
+	if node != nil {
+		if current, ok := node.Value.(ElevatorRunData); ok && current.Timestamp >= timestamp {
+			for node != nil {
+				if nextNode := node.Next(); nextNode != nil {
+					if nextData, ok := nextNode.Value.(ElevatorRunData); ok {
+						if nextData.Floor == floor {
+							node = nextNode // 鍚戝墠绉诲姩鑺傜偣
+						} else {
+							break
+						}
+					}
+				} else {
+					break
+				}
 			}
 
-			if node.Next().Value.(ElevatorRunData).Floor == floor {
-				node = node.Next()
-			} else {
-				break
+			// 濡傛灉鎵惧埌鐨勬ゼ灞備笌鐩爣妤煎眰涓嶅悓锛岃繑鍥炶鏁版嵁
+			if current.Floor != floor {
+				runData = current
 			}
 		}
-	}
-
-	if node.Value.(ElevatorRunData).Timestamp >= timestamp &&
-		node.Value.(ElevatorRunData).Floor != floor {
-		runData = node.Value.(ElevatorRunData)
 	}
 
 	return

--
Gitblit v1.8.0