package service
|
|
import (
|
"basic.com/pubsub/protomsg.git"
|
"basic.com/valib/bhomeclient.git"
|
"basic.com/valib/bhomedbapi.git"
|
"basic.com/valib/logger.git"
|
"encoding/json"
|
"time"
|
"vamicro/cameraCompose-service/models"
|
"context"
|
)
|
|
type CameraComposeDetail struct {
|
Id string `json:"id"`
|
CameraId string `json:"cameraId"`
|
Status int `json:"status"`
|
Rtsp string `json:"rtsp"`
|
CameraType int `json:"cameraType"`
|
IsAI bool `json:"isAI"`
|
IsRunning bool `json:"isRunning"`
|
Name string `json:"name"`
|
Type string `json:"type"`
|
}
|
|
type CameraComposeMsg struct {
|
CameraId string `json:"cameraId"`
|
Status int `json:"status"`
|
Ids []int64 `json:"ids"`
|
}
|
|
type CameraComposeService struct {
|
}
|
|
func Init(c context.Context, ms *bhomeclient.MicroNode) {
|
tick := time.Tick(15 * time.Second)
|
for {
|
select {
|
case <-c.Done():
|
logger.Info("proc close, self update exit")
|
return
|
case <-tick:
|
var compsoeModel models.CameraCompose
|
api := bhomedbapi.CameraApi{}
|
cameras := api.FindAll("", "", "", "")
|
logger.Debug(cameras)
|
var cameraIds = make([]string, 0)
|
for _, camera := range cameras {
|
compsoeModel.Status = 0
|
compsoeModel.CameraId = camera.Id
|
compsoeModel.Save(false)
|
cameraIds = append(cameraIds, camera.Id)
|
}
|
compsoeModel.DeleteNoExist(cameraIds)
|
}
|
}
|
}
|
|
func (sv CameraComposeService) GetAll() ([]CameraComposeDetail, error) {
|
var compsoeModel models.CameraCompose
|
composeList, err := compsoeModel.FindAll()
|
if nil != err {
|
return nil, err
|
}
|
api := bhomedbapi.CameraApi{}
|
var details []CameraComposeDetail
|
|
var apiRule bhomedbapi.CameraRuleApi
|
b, allCamRules := apiRule.FindAll()
|
|
ruleM := make(map[string]protomsg.CameraAndRules)
|
if b && allCamRules != nil {
|
for _, r := range allCamRules {
|
if r.CameraInfo != nil {
|
ruleM[r.CameraInfo.Id] = r
|
}
|
}
|
}
|
for _, item := range composeList {
|
cam, err := api.GetCameraById(item.CameraId)
|
if nil == err {
|
isAi := false
|
if crInfo, ok := ruleM[item.CameraId]; ok && crInfo.Rules != nil && len(crInfo.Rules) > 0 && (cam.RunType == models.TYPE_RUNTYPE_POLL || cam.RunType == models.TYPE_RUNTYPE_REALTIME) {
|
isAi = true
|
}
|
details = append(details, CameraComposeDetail{CameraId: item.CameraId, Status: item.Status, Rtsp: cam.Rtsp, CameraType: int(cam.Type), IsRunning: cam.IsRunning, IsAI: isAi, Name: cam.Name, Type: "4", Id: item.CameraId})
|
}
|
}
|
return details, nil
|
}
|
|
//同步更新设置
|
func PersistentWrapper(topic string, payloads []byte) {
|
var cameraComposeList []CameraComposeMsg
|
if err := json.Unmarshal(payloads, &cameraComposeList); nil != err {
|
logger.Error("handleSubMsg failed to persistent:", topic, string(payloads))
|
}
|
var cameraCompose models.CameraCompose
|
var cameraPerson models.CameraComposePerson
|
//cameraCompose.Clean()
|
|
for _, item := range cameraComposeList {
|
cameraCompose.CameraId = item.CameraId
|
cameraCompose.Status = item.Status
|
cameraCompose.Save(true)
|
cameraPerson.CameraId = item.CameraId
|
cameraPerson.Clean()
|
for _, personId := range item.Ids {
|
cameraPerson.Status = item.Status
|
cameraPerson.PersonId = int(personId)
|
cameraPerson.Save()
|
}
|
}
|
}
|