zhangzengfei
2024-10-20 1f096af76bf2398348c12fe3d3144cdd7c762985
fix find move dir
4个文件已修改
83 ■■■■■ 已修改文件
controller/nvcsCtl.go 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nvcs/cache.go 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
nvcs/nvcs.go 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
repository/captureRepo.go 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controller/nvcsCtl.go
@@ -17,19 +17,7 @@
}
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"})
}
nvcs/cache.go
@@ -113,10 +113,6 @@
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 {
@@ -134,10 +130,8 @@
}
func (c *simpleCache) getMovePosition(timestamp int64, floor string) (runData ElevatorRunData) {
    logger.Debug("getMovePosition")
    node := c.data.Back() // 从链表末尾开始
    if node == nil {
        return
    }
    // 找到最近的符合时间戳的节点
    for node != nil {
@@ -157,6 +151,7 @@
        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 // 向前移动节点
nvcs/nvcs.go
@@ -44,13 +44,13 @@
    }
}
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 {
repository/captureRepo.go
@@ -3,6 +3,8 @@
import (
    "encoding/base64"
    "encoding/json"
    "strconv"
    "strings"
    "time"
    "gat1400Exchange/client"
@@ -218,16 +220,8 @@
        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
            }
@@ -279,16 +273,8 @@
        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
            }
@@ -355,3 +341,25 @@
        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"
    }
}