123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- package scene
- import (
- "context"
- "github.com/gogf/gf/database/gredis"
- )
- const (
- scenePrefix = "scene:"
- dataExpires = 7200
- )
- type GetSceneParams struct {
- Type string `json:"type"`
- Name string `json:"name"`
- DeviceCode string `json:"device_code"`
- }
- type InfoScene struct {
- Id string `json:"id"`
- Name string `json:"name"`
- Status int `json:"status"`
- Action string `json:"action"`
- Desc string `json:"desc"`
- SceneType string `json:"scene_type"`
- DeviceType string `json:"device_type"`
- Config string `json:"config"`
- Time string `json:"time"`
- }
- type Info struct {
- Key string `json:"key"`
- SceneId string `json:"scene_id"`
- TaskId string `json:"task_id"`
- Config string `json:"config"`
- }
- type Manager struct {
- redisClient *gredis.Redis
- ctx context.Context
- }
- func NewSceneManager(host string, port int) *Manager {
- red := gredis.New(&gredis.Config{
- Host: host,
- Port: port,
- Db: 2,
- MaxActive: 100,
- })
- ctx := context.Background()
- helper := &Manager{
- redisClient: red,
- ctx: ctx,
- }
- return helper
- }
- func (a *Manager) SaveScene(info *Info) error {
- _, err := a.redisClient.DoVar("SET", info.Key, info.Config)
- if err != nil {
- return err
- }
- _, err = a.redisClient.Do("EXPIRE", info.Key, dataExpires)
- if err != nil {
- return err
- }
- return nil
- }
- func (a *Manager) GetScene(key string) (string, error) {
- // get status from redis
- result, err := a.redisClient.DoVar("GET", key)
- if err != nil {
- return "", err
- }
- return result.String(), nil
- }
- func (a *Manager) DeleteScene(key string) error {
- // get status from redis
- _, err := a.redisClient.Do("DEL", key)
- if err != nil {
- return err
- }
- return nil
- }
- // GetAllScenes 查询所有场景信息s
- func (a *Manager) GetAllScenes() ([]*InfoScene, error) {
- // 使用KEYS命令获取所有匹配前缀的键
- keys, err := a.redisClient.DoVar("KEYS", scenePrefix+"*")
- if err != nil {
- return nil, err
- }
- // 检查是否有数据
- if keys.IsEmpty() {
- return nil, nil
- }
- // 转换为字符串切片
- keyList := keys.Strings()
- // 存储所有结果
- scenes := make([]*InfoScene, 0)
- var scene InfoScene
- for _, key := range keyList {
- result, err := a.redisClient.DoVar("GET", key)
- if err != nil {
- return nil, err
- }
- err = result.Struct(&scene)
- if err != nil {
- return nil, err
- }
- scenes = append(scenes, &scene)
- }
- return scenes, nil
- }
|