zhangzengfei
2024-10-20 c1d32ecdb36d7365a660ae2cf1405e1ca1898b4b
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