qixiaoning
2025-08-08 ef51da5404827e826e979ad614950a9e0192f4c6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package controllers
 
import (
    "basic.com/valib/bhomeclient.git"
    "basic.com/valib/go-aiot.git/aiotProto/aiot"
    "basic.com/valib/logger.git"
    "time"
    "vamicro/config"
    "vamicro/saas-service/service"
    "vamicro/saas-service/service/nodeService"
)
 
type LockController struct {
}
 
type param struct {
    Key    string `json:"key"`
    NodeId string `json:"nodeId"`
}
 
func (l *LockController) SetLock(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
    req := &param{}
    err := c.BindJSON(req)
    if err != nil {
        logger.Error("参数解码错误", err)
        return &bhomeclient.Reply{Success: false, Msg: "参数错误", Data: err}
    }
    if req.Key == "" {
        return &bhomeclient.Reply{Success: false, Msg: "参数key不能为空"}
    }
    if req.NodeId == "" {
        return &bhomeclient.Reply{Success: false, Msg: "上锁节点ID不能为空"}
    }
    res := service.Cache.SetLock(req.NodeId, req.Key, 3*time.Minute)
    if !res {
        return &bhomeclient.Reply{Success: false, Msg: "上锁失败"}
    }
    return &bhomeclient.Reply{Success: true, Msg: "上锁成功"}
}
 
func (l *LockController) GetLock(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
    req := &param{}
    err := c.BindJSON(req)
    if err != nil {
        logger.Error("参数解码错误", err)
        return &bhomeclient.Reply{Success: false, Msg: "参数错误", Data: err}
    }
    if req.Key == "" {
        return &bhomeclient.Reply{Success: false, Msg: "参数key不能为空"}
    }
    if req.NodeId == "" {
        return &bhomeclient.Reply{Success: false, Msg: "上锁节点ID不能为空"}
    }
    res, nodeId := service.Cache.GetLock(req.NodeId, req.Key)
    if !res {
        return &bhomeclient.Reply{Success: false, Msg: "锁不存在"}
    }
    return &bhomeclient.Reply{Success: true, Msg: "获取成功", Data: nodeId}
}
 
func (l *LockController) GetAllLock(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
    res := service.Cache.GetAllLock()
    return &bhomeclient.Reply{Success: true, Msg: "获取成功", Data: res}
}
 
func (l *LockController) DelLock(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
    req := &param{}
    err := c.BindJSON(req)
    if err != nil {
        logger.Error("参数解码错误", err)
        return &bhomeclient.Reply{Success: false, Msg: "参数错误", Data: err}
    }
    if req.Key == "" {
        return &bhomeclient.Reply{Success: false, Msg: "参数key不能为空"}
    }
    if req.NodeId == "" {
        return &bhomeclient.Reply{Success: false, Msg: "上锁节点ID不能为空"}
    }
    res, nodeId := service.Cache.GetLock(req.NodeId, req.Key)
    if !res {
        return &bhomeclient.Reply{Success: true, Msg: "锁不存在"}
    }
    res = service.Cache.DelLock(req.NodeId, req.Key)
    if !res {
        return &bhomeclient.Reply{Success: false, Msg: "解锁失败"}
    }
    return &bhomeclient.Reply{Success: true, Msg: "解锁成功", Data: nodeId}
}
 
func (l *LockController) SyncCamera(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
    if !service.CliSrv.IsMaster {
        masterId := ""
        for _, n := range nodeService.Node.NodeLists {
            if n.DriftState == "master" {
                masterId = n.NodeId
                break
            }
        }
        if masterId == "" {
            logger.Error("主节点获取失败,无法完成上锁动作")
            return &bhomeclient.Reply{Success: true, Msg: "主节点获取失败,无法完成上锁动作"}
        }
        //res := &bhomeclient.Reply{}
        go service.DoBusReq("/data/api-v/saas/syncCamera", masterId, aiot.RequestMethod_Post, aiot.RequestContentType_ApplicationJson, map[string]interface{}{})
        //_ = json.Unmarshal(byt, res)
 
        return &bhomeclient.Reply{Success: true, Msg: "成功"}
    }
    go service.SyncAllCameraData(service.CliSrv.Cli, config.Server.AnalyServerId)
    return &bhomeclient.Reply{Success: true, Msg: "成功"}
}