| | |
| | | "fmt" |
| | | "math" |
| | | "sort" |
| | | "strconv" |
| | | "strings" |
| | | "time" |
| | | |
| | |
| | | |
| | | // 统计查询 |
| | | type StaticRecord struct { |
| | | Id int64 `json:"id"` |
| | | Id string `json:"id"` |
| | | TaskId []int64 `json:"task_id"` |
| | | RuleId []int64 `json:"rule_id"` |
| | | EventLevelId []int64 `json:"event_level_id"` |
| | |
| | | case "id": |
| | | IdColumn := field.(*entity.ColumnInt64).Data() |
| | | if len(IdColumn) > 0 { |
| | | record.Id = IdColumn[i] |
| | | record.Id = strconv.FormatInt(IdColumn[i], 10) |
| | | } |
| | | case "task_id": |
| | | TaskIdColumn := field.(*entity.ColumnInt64Array).Data() |
| | |
| | | return v.Camera |
| | | } |
| | | |
| | | //摄像机运行状态结构体 |
| | | // 摄像机运行状态结构体 |
| | | type CameraRunVo struct { |
| | | Id string `json:"id"` //摄像机id |
| | | Name string `json:"name"` //摄像机名称 |
| | |
| | | |
| | | type CameraRunInfo struct { |
| | | models.Camera |
| | | RunServerName string `json:"runServerName"` |
| | | Tasks []CameraRunTask `json:"tasks"` |
| | | Status int `json:"status"` |
| | | LinkCams [][]LinkCam `json:"linkCams"` //与此摄像机联动的所有联动摄像机信息,分组 |
| | | RunServerName string `json:"runServerName"` |
| | | // Tasks []CameraRunTask `json:"tasks"` |
| | | AllTasks []models.Task `json:"allTasks"` |
| | | Status int `json:"status"` |
| | | LinkCams [][]LinkCam `json:"linkCams"` //与此摄像机联动的所有联动摄像机信息,分组 |
| | | } |
| | | |
| | | type LinkCam struct { |
| | |
| | | |
| | | sv := service.CameraService{} |
| | | if sv.ChangeRunType(ccrVo) { |
| | | cIds := strings.Join(ccrVo.CameraIds, ",") |
| | | cc.addDbChangeMsg(h.Bk, protomsg.TableChanged_T_Camera, cIds, protomsg.DbAction_Update, "") |
| | | _, _ = service2.DoBusReq("/data/api-v/saas/syncCamera", config.Server.AnalyServerId, aiot.RequestMethod_Post, aiot.RequestContentType_ApplicationJson, map[string]interface{}{}) |
| | | //cIds := strings.Join(ccrVo.CameraIds, ",") |
| | | //cc.addDbChangeMsg(h.Bk, protomsg.TableChanged_T_Camera, cIds, protomsg.DbAction_Update, "") |
| | | // _, _ = service2.DoBusReq("/data/api-v/saas/syncCamera", config.Server.AnalyServerId, aiot.RequestMethod_Post, aiot.RequestContentType_ApplicationJson, map[string]interface{}{}) |
| | | return &bhomeclient.Reply{Success: true, Msg: "更新成功"} |
| | | } else { |
| | | return &bhomeclient.Reply{Success: false, Msg: "更新失败"} |
| | |
| | | package controllers |
| | | |
| | | import ( |
| | | "basic.com/pubsub/protomsg.git" |
| | | "basic.com/valib/bhomeclient.git" |
| | | "basic.com/valib/bhomedbapi.git" |
| | | "basic.com/valib/logger.git" |
| | | "strconv" |
| | | "strings" |
| | | commonModel "vamicro/camera-common/models" |
| | |
| | | "vamicro/chanmanage-service/models" |
| | | "vamicro/chanmanage-service/service" |
| | | "vamicro/config" |
| | | |
| | | "basic.com/pubsub/protomsg.git" |
| | | "basic.com/valib/bhomeclient.git" |
| | | "basic.com/valib/bhomedbapi.git" |
| | | "basic.com/valib/logger.git" |
| | | ) |
| | | |
| | | type PollSetController struct { |
| | |
| | | } |
| | | } |
| | | _, allLinks := crApi.FindAllCameraLink() |
| | | |
| | | //获取督查任务 |
| | | |
| | | for _, cE := range list { |
| | | var cri vo.CameraRunInfo |
| | | cri.CopyFromProtoCamera(cE) |
| | |
| | | } |
| | | } |
| | | |
| | | if cgs, ok := ruleM[cE.Id]; ok { |
| | | for _, g := range cgs.Rules { |
| | | var crTask vo.CameraRunTask |
| | | // if cgs, ok := ruleM[cE.Id]; ok { |
| | | // for _, g := range cgs.Rules { |
| | | // var crTask vo.CameraRunTask |
| | | |
| | | crTask.HasRule = g.Enable |
| | | crTask.TaskName = g.SceneName |
| | | cri.Tasks = append(cri.Tasks, crTask) |
| | | } |
| | | } else { |
| | | cri.Tasks = []vo.CameraRunTask{} |
| | | } |
| | | // crTask.HasRule = g.Enable |
| | | // crTask.TaskName = g.SceneName |
| | | // cri.Tasks = append(cri.Tasks, crTask) |
| | | // } |
| | | // } else { |
| | | // cri.Tasks = []vo.CameraRunTask{} |
| | | // } |
| | | var ids []string |
| | | ids = append(ids, cE.Id) |
| | | cri.AllTasks, _ = models.GetListTask(ids) |
| | | |
| | | //处理摄像机的状态 |
| | | if cE.RunType == commonModel.TYPE_RUNTYPE_POLL || cE.RunType == commonModel.TYPE_RUNTYPE_REALTIME { |
| | | if crInfo, ok := ruleM[cE.Id]; ok && crInfo.Rules != nil && len(crInfo.Rules) > 0 { |
New file |
| | |
| | | package models |
| | | |
| | | import ( |
| | | "fmt" |
| | | "strings" |
| | | "vamicro/camera-common/models" |
| | | ) |
| | | |
| | | // 查询列表数据 |
| | | func GetListTask(ids []string) (items []models.Task, err error) { |
| | | |
| | | //idList := strings.Join(ids, ",") |
| | | idList := "'" + strings.Join(ids, "','") + "'" |
| | | // 主查询SQL |
| | | //sqlStr := `select c.task_id, c.task_name from mal_task_video_link a left join mal_smart_task c on a.task_id = c.task_id where a.video_id in(?) ORDER BY a.task_id desc` |
| | | sqlStr := fmt.Sprintf(` |
| | | SELECT c.task_id, c.task_name |
| | | FROM mal_task_video_link a |
| | | LEFT JOIN mal_smart_task c ON a.task_id = c.task_id |
| | | WHERE a.video_id IN (%s) |
| | | ORDER BY a.task_id DESC |
| | | `, idList) |
| | | if err := db2.Raw(sqlStr).Scan(&items).Error; err != nil { |
| | | fmt.Println(err.Error()) |
| | | return nil, err |
| | | } |
| | | return |
| | | } |
| | | |
| | | // 获取任务统计 |
| | | func GetTasks() (items []models.Task, err error) { |
| | | |
| | | } |
| | |
| | | package models |
| | | |
| | | import ( |
| | | "vamicro/config" |
| | | |
| | | "basic.com/valib/logger.git" |
| | | "github.com/jinzhu/gorm" |
| | | _ "github.com/jinzhu/gorm/dialects/sqlite" |
| | | "basic.com/valib/logger.git" |
| | | "vamicro/config" |
| | | ) |
| | | |
| | | var db *gorm.DB |
| | | var db2 *gorm.DB |
| | | var err error |
| | | |
| | | // Init creates a connection to mysql database and |
| | |
| | | db.LogMode(true) |
| | | //db.SetLogger(&DbLogger{}) |
| | | db.AutoMigrate(&PollConfig{}) |
| | | |
| | | db2, err = gorm.Open(config.DBconf.Name, "../config/camera-service.db") |
| | | if err != nil { |
| | | logger.Debug("db open error ", err) |
| | | } |
| | | db2.LogMode(true) |
| | | db2.AutoMigrate(&PollConfig{}) |
| | | |
| | | } |
| | | |
| | | //GetDB ... |
| | | // GetDB ... |
| | | func GetDB() *gorm.DB { |
| | | return db |
| | | } |
| | | |
| | | func CloseDB() { |
| | | db.Close() |
| | | } |
| | | } |
| | |
| | | return false |
| | | } |
| | | |
| | | //触发条件 |
| | | //1.实时摄像机切换为轮询或者监控,或者实时由监控切换为实时 |
| | | //2.实时摄像机规则Enable状态改变 |
| | | // 触发条件 |
| | | // 1.实时摄像机切换为轮询或者监控,或者实时由监控切换为实时 |
| | | // 2.实时摄像机规则Enable状态改变 |
| | | func (sv *PollSetService) ResetChannelCount() { |
| | | //1.计算做实时任务的路数 |
| | | //2.本地文件占的路数 |
| | |
| | | sv.UpdateChannelCount(pollCount, videoCount) |
| | | } |
| | | |
| | | //拖动改变轮询和数据栈的数量 |
| | | // 拖动改变轮询和数据栈的数量 |
| | | func (sv *PollSetService) UpdateChannelCount(pollChannelCount int, videoChannelCount int) bool { |
| | | var fasApi bhomedbapi.FileStackApi |
| | | var err error |
| | |
| | | v.RealRunningCount++ |
| | | } |
| | | } else if c.RunType == bhomeclient.TYPE_RUNTYPE_POLL { |
| | | pTotal++ |
| | | if crInfo, ok := ruleM[c.Id]; ok && crInfo.Rules != nil && len(crInfo.Rules) > 0 { |
| | | v.PollValidCount++ |
| | | } else { |
| | | v.PollInvalidCount++ |
| | | } |
| | | if c.IsRunning { |
| | | v.PollRunningCount++ |
| | | } |
| | | // pTotal++ |
| | | // if crInfo, ok := ruleM[c.Id]; ok && crInfo.Rules != nil && len(crInfo.Rules) > 0 { |
| | | // v.PollValidCount++ |
| | | // } else { |
| | | // v.PollInvalidCount++ |
| | | // } |
| | | // if c.IsRunning { |
| | | // v.PollRunningCount++ |
| | | // } |
| | | } |
| | | } |
| | | v.RealTotal = rTotal |
| | |
| | | return dbdel.RowsAffected, nil |
| | | |
| | | } |
| | | |
| | | // 查询列表数据 |
| | | func GetListTask(ids []string) (items []Task, err error) { |
| | | //idList := strings.Join(ids, ",") |
| | | idList := "'" + strings.Join(ids, "','") + "'" |
| | | // 主查询SQL |
| | | //sqlStr := `select c.task_id, c.task_name from mal_task_video_link a left join mal_smart_task c on a.task_id = c.task_id where a.video_id in(?) ORDER BY a.task_id desc` |
| | | sqlStr := fmt.Sprintf(` |
| | | SELECT c.task_id, c.task_name |
| | | FROM mal_task_video_link a |
| | | LEFT JOIN mal_smart_task c ON a.task_id = c.task_id |
| | | WHERE a.video_id IN (%s) |
| | | ORDER BY a.task_id DESC |
| | | `, idList) |
| | | if err := db.Raw(sqlStr).Scan(&items).Error; err != nil { |
| | | fmt.Println(err.Error()) |
| | | return nil, err |
| | | } |
| | | return |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | // fb, cgs := crApi.FindAllTaskById(cE.Id) |
| | | // if fb && cgs.Rules != nil { |
| | | // for _, g :=range cgs.Rules { |
| | | // var crTask vo.CameraRunTask |
| | | fb, cgs := crApi.FindAllTaskById(cE.Id) |
| | | if fb && cgs.Rules != nil { |
| | | for _, g := range cgs.Rules { |
| | | var crTask vo.CameraRunTask |
| | | |
| | | // crTask.HasRule = g.Enable |
| | | // crTask.TaskName = g.SceneName |
| | | // cri.Tasks = append(cri.Tasks, crTask) |
| | | // } |
| | | // } else { |
| | | // cri.Tasks = []vo.CameraRunTask{} |
| | | // } |
| | | //根据摄像机查询任务 |
| | | var Ids []string |
| | | Ids = append(Ids, cE.Id) |
| | | cri.AllTasks, _ = models.GetListTask(Ids) |
| | | crTask.HasRule = g.Enable |
| | | crTask.TaskName = g.SceneName |
| | | cri.Tasks = append(cri.Tasks, crTask) |
| | | } |
| | | } else { |
| | | cri.Tasks = []vo.CameraRunTask{} |
| | | } |
| | | |
| | | //处理摄像机的状态 |
| | | if cE.RunType == models.TYPE_RUNTYPE_POLL || cE.RunType == models.TYPE_RUNTYPE_REALTIME { |
| | |
| | | models.Camera |
| | | RunServerName string `json:"runServerName"` |
| | | Tasks []CameraRunTask `json:"tasks"` |
| | | AllTasks []models.Task `json:"allTasks"` |
| | | Status int `json:"status"` |
| | | //AllTasks []models.Task `json:"allTasks"` |
| | | Status int `json:"status"` |
| | | } |
| | | |
| | | type CameraRunTask struct { |