| | |
| | | } |
| | | |
| | | func (n NVCSController) RunStatus(c *gin.Context) { |
| | | var runStatus = make(map[string]string, 0) |
| | | var floor, runState = nvcs.CurrentRunState() |
| | | var runState = nvcs.CurrentRunState() |
| | | |
| | | runStatus["floor"] = floor |
| | | |
| | | switch runState { |
| | | case 0: |
| | | runStatus["status"] = "停" |
| | | case 1: |
| | | runStatus["status"] = "上" |
| | | case 2: |
| | | runStatus["status"] = "下" |
| | | } |
| | | |
| | | c.JSON(http.StatusOK, gin.H{"success": true, "data": runStatus, "msg": "ok"}) |
| | | c.JSON(http.StatusOK, gin.H{"success": true, "data": runState, "msg": "ok"}) |
| | | } |
| | |
| | | |
| | | func (c *simpleCache) getPositionByTime(timestamp int64) (runData ElevatorRunData) { |
| | | node := c.data.Back() // 从链表尾部开始 |
| | | if node == nil { |
| | | return |
| | | } |
| | | |
| | | for node != nil { |
| | | if data, ok := node.Value.(ElevatorRunData); ok { |
| | | if data.Timestamp >= timestamp { |
| | |
| | | } |
| | | |
| | | func (c *simpleCache) getMovePosition(timestamp int64, floor string) (runData ElevatorRunData) { |
| | | logger.Debug("getMovePosition") |
| | | node := c.data.Back() // 从链表末尾开始 |
| | | if node == nil { |
| | | return |
| | | } |
| | | |
| | | // 找到最近的符合时间戳的节点 |
| | | for node != nil { |
| | |
| | | if current, ok := node.Value.(ElevatorRunData); ok && current.Timestamp >= timestamp { |
| | | for node != nil { |
| | | if nextNode := node.Next(); nextNode != nil { |
| | | logger.Debug("next node %v", nextNode.Value.(ElevatorRunData)) |
| | | if nextData, ok := nextNode.Value.(ElevatorRunData); ok { |
| | | if nextData.Floor == floor { |
| | | node = nextNode // 向前移动节点 |
| | |
| | | } |
| | | } |
| | | |
| | | func CurrentRunState() (string, int) { |
| | | runState := cache.data.Back().Value |
| | | if runState == nil { |
| | | return "", 0 |
| | | func CurrentRunState() (runState ElevatorRunData) { |
| | | node := cache.data.Back() |
| | | if node == nil { |
| | | return |
| | | } |
| | | |
| | | return runState.(ElevatorRunData).Floor, runState.(ElevatorRunData).RunState |
| | | return node.Value.(ElevatorRunData) |
| | | } |
| | | |
| | | func FindPositionByTime(timestamp int64) ElevatorRunData { |
| | |
| | | import ( |
| | | "encoding/base64" |
| | | "encoding/json" |
| | | "strconv" |
| | | "strings" |
| | | "time" |
| | | |
| | | "gat1400Exchange/client" |
| | |
| | | floor = runState.Floor |
| | | |
| | | for i := 0; i < config.NVCSConf.WaitRunTime; i++ { |
| | | if runState = nvcs.FindMovePosition(faceAppearTime.Unix()+3, floor); runState.Floor != "" { |
| | | switch runState.RunState { |
| | | case nvcs.RunUp: |
| | | runDir = "in" |
| | | case nvcs.RunDown: |
| | | runDir = "out" |
| | | case nvcs.RunStop: |
| | | runDir = "" |
| | | } |
| | | |
| | | if runState = nvcs.CurrentRunState(); runState.Floor != "" && runState.Floor != floor { |
| | | runDir = compareFloor(floor, runState.Floor) |
| | | break |
| | | } |
| | | |
| | |
| | | floor = runState.Floor |
| | | |
| | | for i := 0; i < config.NVCSConf.WaitRunTime; i++ { |
| | | if runState = nvcs.FindMovePosition(faceAppearTime.Unix()+3, floor); runState.Floor != "" { |
| | | switch runState.RunState { |
| | | case nvcs.RunUp: |
| | | runDir = "in" |
| | | case nvcs.RunDown: |
| | | runDir = "out" |
| | | case nvcs.RunStop: |
| | | runDir = "" |
| | | } |
| | | |
| | | if runState = nvcs.CurrentRunState(); runState.Floor != "" && runState.Floor != floor { |
| | | runDir = compareFloor(floor, runState.Floor) |
| | | break |
| | | } |
| | | |
| | |
| | | logger.Warn(err.Error()) |
| | | } |
| | | } |
| | | |
| | | func compareFloor(str1, str2 string) string { |
| | | // 去掉字符串最后一个字符 'F' |
| | | numStr1 := strings.TrimSuffix(str1, "F") |
| | | numStr2 := strings.TrimSuffix(str2, "F") |
| | | |
| | | // 转换为 int 类型 |
| | | num1, err1 := strconv.Atoi(numStr1) |
| | | num2, err2 := strconv.Atoi(numStr2) |
| | | |
| | | // 检查转换是否成功 |
| | | if err1 != nil || err2 != nil { |
| | | return "" |
| | | } |
| | | |
| | | // 比较两个整数的大小 |
| | | if num1 > num2 { |
| | | return "out" |
| | | } else { |
| | | return "in" |
| | | } |
| | | } |