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