liuxiulin 4 주 전
부모
커밋
7a7df8ea90
2개의 변경된 파일27개의 추가작업 그리고 2개의 파일을 삭제
  1. 12 0
      services/devicemanager/manager.go
  2. 15 2
      services/scene-service/internal/service/scene.go

+ 12 - 0
services/devicemanager/manager.go

@@ -1,6 +1,7 @@
 package main
 
 import (
+	"github.com/gogf/gf/encoding/gjson"
 	"sparrow/pkg/deviceAlarm"
 	"sparrow/pkg/deviceStatus"
 	"sparrow/pkg/online"
@@ -8,6 +9,7 @@ import (
 	"sparrow/pkg/rpcs"
 	"sparrow/pkg/scene"
 	"sparrow/pkg/token"
+	"time"
 )
 
 type DeviceManager struct {
@@ -247,6 +249,16 @@ func (dm *DeviceManager) SaveScene(args rpcs.ArgsScene, reply *rpcs.ReplyScene)
 	})
 }
 
+func (dm *DeviceManager) UpdateSceneStatus(args rpcs.ArgsScene, reply *rpcs.ReplyScene) error {
+	info, err := dm.sceneManager.GetScene(args.Key)
+	if err != nil {
+		return err
+	}
+	j := gjson.New(info)
+	_ = j.Set("status", args.Status)
+	_ = j.Set("time", time.Now())
+	return nil
+}
 func (dm *DeviceManager) GetScene(args rpcs.ArgsScene, reply *rpcs.ReplyScene) error {
 	info, err := dm.sceneManager.GetScene(args.Key)
 	if err != nil {

+ 15 - 2
services/scene-service/internal/service/scene.go

@@ -112,7 +112,7 @@ func (m *SceneService) SubmitAction(args rpcs.ArgsSubmitSceneAction, reply *rpcs
 		}
 		scene.Status = 1
 		m.scenes.Set(scene.Id, scene)
-		return m.saveSceneRedis(scene)
+		return m.updateSceneStatus(scene)
 	case "stop":
 		err = srv.Stop(scene.Id)
 		if err != nil {
@@ -121,7 +121,7 @@ func (m *SceneService) SubmitAction(args rpcs.ArgsSubmitSceneAction, reply *rpcs
 		}
 		scene.Status = 0
 		m.scenes.Set(scene.Id, scene)
-		return m.saveSceneRedis(scene)
+		return m.updateSceneStatus(scene)
 	case "do":
 		j := gjson.New(scene.Config)
 		err = m.doAction(scene.Id, j.GetString("actions"))
@@ -163,6 +163,19 @@ func (m *SceneService) saveSceneRedis(scene SceneInfo) error {
 	return err
 }
 
+func (m *SceneService) updateSceneStatus(scene SceneInfo) error {
+	sceneArgs := rpcs.ArgsScene{
+		Key:    fmt.Sprintf("scene:%s:%s", scene.SceneType, scene.Id),
+		Status: scene.Status,
+	}
+	sceneReply := rpcs.ReplyEmptyResult{}
+	err := server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.UpdateSceneStatus", sceneArgs, &sceneReply)
+	if err != nil {
+		server.Log.Errorf("save scene error: Id: %s, error: %v", scene.Id, err)
+	}
+	return err
+}
+
 func (m *SceneService) delSceneRedis(scene SceneInfo) error {
 	sceneArgs := rpcs.ArgsScene{
 		Key:    fmt.Sprintf("scene:%s:%s", scene.SceneType, scene.Id),