From 5ddd4f4ba6aaf1fe52f93c0966315d0424bd2a5f Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期日, 20 十月 2024 20:30:57 +0800
Subject: [PATCH] 调整楼层获取方式

---
 nvcs/cache.go |   84 +++++++++++++++++++++++++++++++++++++++---
 1 files changed, 78 insertions(+), 6 deletions(-)

diff --git a/nvcs/cache.go b/nvcs/cache.go
index 011ebf6..18c2b0b 100644
--- a/nvcs/cache.go
+++ b/nvcs/cache.go
@@ -23,7 +23,7 @@
 }
 
 // 瀛樺偍鏁版嵁鍒扮紦瀛樹腑
-func (c *simpleCache) store(data elevatorRunData) {
+func (c *simpleCache) store(data ElevatorRunData) {
 	var floorChanged = true
 
 	// 鍙朢FID妤煎眰
@@ -35,13 +35,17 @@
 		data.Floor = gRFIDFloor
 	}
 
+	if data.Floor == "" {
+		return
+	}
+
 	lastData := c.data.Back()
 
 	// 濡傛灉妤煎眰鐩稿悓锛屽苟涓旀暟鎹湪1绉掑唴锛屽垯蹇界暐
 	if lastData != nil {
-		if lastData.Value.(elevatorRunData).Floor == data.Floor {
+		if lastData.Value.(ElevatorRunData).Floor == data.Floor {
 			floorChanged = false
-			if lastData.Value.(elevatorRunData).Timestamp == data.Timestamp {
+			if lastData.Value.(ElevatorRunData).Timestamp == data.Timestamp {
 				return
 			}
 		}
@@ -82,9 +86,11 @@
 		floorText := fmt.Sprintf("%s%s %s", data.Floor, runStateStr, config.NVCSConf.OSD)
 
 		// 璋冪敤hik api 灏嗘枃瀛楁坊鍔犲埌osd鐨勫乏涓嬭
-		addFloorToOSD(floorText)
+		err = addFloorToOSD(floorText)
+		if err != nil {
+			logger.Warn("%s", err.Error())
+		}
 	}
-
 }
 
 // 鍒犻櫎杩囨湡鏁版嵁
@@ -94,7 +100,7 @@
 	// 浠庨槦鍒楀ご閮ㄥ紑濮嬫鏌ユ槸鍚︽湁杩囨湡鏁版嵁
 	for c.data.Len() > 0 {
 		elem := c.data.Front() // 鑾峰彇闃熷垪澶撮儴鐨勫厓绱�
-		item := elem.Value.(elevatorRunData)
+		item := elem.Value.(ElevatorRunData)
 		if now.Sub(time.Unix(item.Timestamp, 0)) > c.expiration {
 			// 濡傛灉鏁版嵁宸茬粡杩囨湡锛屽垯浠庨槦鍒椾腑鍒犻櫎
 			c.data.Remove(elem)
@@ -104,3 +110,69 @@
 		}
 	}
 }
+
+func (c *simpleCache) getPositionByTime(timestamp int64) (runData ElevatorRunData) {
+	node := c.data.Back()
+	if node == nil {
+		return
+	}
+
+	for {
+		if node.Prev() == nil {
+			break
+		}
+
+		if node.Prev().Value.(ElevatorRunData).Timestamp >= timestamp {
+			node = node.Prev()
+		} 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()
+	if node == nil {
+		return
+	}
+
+	// 鍏堟壘鍒版渶杩戣妭鐐�
+	for {
+		if node.Prev() == nil {
+			break
+		}
+
+		if node.Prev().Value.(ElevatorRunData).Timestamp >= timestamp {
+			node = node.Prev()
+		} else {
+			break
+		}
+	}
+
+	if node.Value.(ElevatorRunData).Timestamp >= timestamp {
+		for {
+			if node.Next() == nil {
+				break
+			}
+
+			if node.Next().Value.(ElevatorRunData).Floor == floor {
+				node = node.Next()
+			} else {
+				break
+			}
+		}
+	}
+
+	if node.Value.(ElevatorRunData).Timestamp >= timestamp &&
+		node.Next().Value.(ElevatorRunData).Floor != floor {
+		runData = node.Value.(ElevatorRunData)
+	}
+
+	return
+}

--
Gitblit v1.8.0