package controllers import ( "encoding/json" "sync" "vamicro/scene-service/models" "vamicro/scene-service/service" "vamicro/scene-service/vo" "basic.com/pubsub/protomsg.git" "basic.com/valib/bhomeclient.git" "basic.com/valib/bhomedbapi.git" "basic.com/valib/logger.git" ) type CameraRuleController struct { } type PasteRuleArg struct { SourceId string `json:"sourceId" binding:"required"` TargetIds []string `json:"targetIds" binging:"required"` } // @Summary 保存摄像机独立规则 // @Description 保存摄像机独立规则 // @Accept json // @Produce json // @Tags 摄像机规则 // @Param args body vo.GroupRuleVo true "独立规则参数" // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}" // @Router /data/api-v/camera/rule/save [post] func (crc CameraRuleController) Save(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var reqBody vo.GroupRuleVo err := c.BindJSON(&reqBody) if err != nil { return &bhomeclient.Reply{Success: false, Msg: "参数有误"} } logger.Debug("reqBody:", reqBody) sv := service.CameraRuleService{ Broker: h.Bk, } if b, err := sv.Save(reqBody); b { return &bhomeclient.Reply{Success: true} } else { logger.Debug("err:", err) return &bhomeclient.Reply{Success: false, Msg: err.Error()} } } // @Summary 显示摄像机独立场景规则 // @Description 显示摄像机独立场景规则 // @Accept json // @Produce json // @Tags 摄像机规则 // @Param cameraId query string true "摄像机id" // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}" // @Router /data/api-v/camera/rule/findByCameraId [get] func (crc CameraRuleController) FindByCameraId(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { cameraId := c.Query("cameraId") if cameraId == "" { return &bhomeclient.Reply{Success: false, Msg: "参数有误"} } var sysconf protomsg.LocalConfig var clusterInfo protomsg.ClusterAndNodes var sdkMap map[string]protomsg.Sdk wg := &sync.WaitGroup{} wg.Add(3) go func(sdk *map[string]protomsg.Sdk) { defer wg.Done() var sdkApi bhomedbapi.SdkApi *sdk = sdkApi.FindAllMap() }(&sdkMap) go func(s *protomsg.LocalConfig) { defer wg.Done() var sysApi bhomedbapi.SysSetApi if flag, sconf := sysApi.GetServerInfo(); flag { *s = sconf } }(&sysconf) go func(i *protomsg.ClusterAndNodes) { defer wg.Done() var clusterApi bhomedbapi.ClusterApi if b, info := clusterApi.FindCluster(); b { *i = info } }(&clusterInfo) sv := service.CameraRuleService{ Broker: h.Bk, } wg.Wait() d, err := sv.GetAllByCid(cameraId, models.Type_SetType_Batch, nil, &sysconf, &clusterInfo, sdkMap) if err == nil { return &bhomeclient.Reply{Success: true, Data: d} } else { return &bhomeclient.Reply{Success: false, Msg: "获取失败"} } } // @Summary 复制摄像机规则到选定的多个摄像机 // @Description 复制摄像机规则到选定的多个摄像机 // @Accept json // @Produce json // @Tags 摄像机规则 // @Param args body controllers.PasteRuleArg true "规则复制参数" // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}" // @Router /data/api-v/camera/pasteRules [post] func (crc CameraRuleController) PasteRules(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var reqBody PasteRuleArg err := c.BindJSON(&reqBody) if err != nil { return &bhomeclient.Reply{Success: false, Msg: "参数有误"} } sv := service.CameraRuleService{ Broker: h.Bk, } if sv.PasteRules(reqBody.SourceId, reqBody.TargetIds) { return &bhomeclient.Reply{Success: true, Msg: "粘贴成功"} } else { return &bhomeclient.Reply{Success: false, Msg: "复制粘贴失败"} } } // @Summary 保存联动任务规则参数 // @Description 保存联动任务规则参数 // @Accept json // @Produce json // @Tags 摄像机规则 // @Param saveBody body vo.GroupRuleVo true "联动任务规则保存参数" // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}" // @Router /data/api-v/camera/rule/saveLinkRulesByGroup [post] func (crc CameraRuleController) SaveLinkRulesByGroup(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var saveBody vo.GroupRuleVo if err := c.BindJSON(&saveBody); err != nil { return &bhomeclient.Reply{Success: false, Msg: "参数有误"} } sv := service.CameraRuleService{ Broker: h.Bk, } flag, data := sv.SaveLinkRulesByGroup(&saveBody) if flag { return &bhomeclient.Reply{Success: true, Data: saveBody} } else { return &bhomeclient.Reply{Success: false, Msg: data} } } // @Summary 根据多个摄像机id查询联动任务规则设置 // @Description 根据多个摄像机id查询联动任务规则设置 // @Accept json // @Produce json // @Tags 摄像机规则 // @Param cameraIds body vo.MultiCamera true "摄像机ids" // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}" // @Router /data/api-v/camera/rule/getLinkRulesByCameraIds [post] func (crc CameraRuleController) GetLinkRulesByCameraIds(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var idArrVo vo.MultiCamera if err := c.BindJSON(&idArrVo); err != nil { return &bhomeclient.Reply{Success: false, Msg: "参数有误"} } if idArrVo.CameraIds == nil || len(idArrVo.CameraIds) == 0 { return &bhomeclient.Reply{Success: false, Msg: "摄像机id不能少于1"} } sv := service.CameraRuleService{ Broker: h.Bk, } flag, ruleList := sv.GetLinkRulesByCameraIds(idArrVo.CameraIds) if flag { return &bhomeclient.Reply{Success: true, Data: ruleList} } else { return &bhomeclient.Reply{Success: false, Msg: "查询失败"} } } // @Summary 修改规则组报警等级 // @Description 修改规则组报警等级 // @Produce json // @Tags 摄像机规则 // @Param reqBody body vo.GroupAlarmLevelVo true "参数" // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}" // @Router /data/api-v/camera/rule/updateAlarmLevel [post] func (crc CameraRuleController) UpdateAlarmLevel(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var reqBody vo.GroupAlarmLevelVo err := c.BindJSON(&reqBody) if err != nil { return &bhomeclient.Reply{Success: false, Msg: "参数有误"} } sv := service.CameraRuleService{ Broker: h.Bk, } if sv.UpdateAlarmLevel(reqBody.GroupId, reqBody.AlarmLevel) { return &bhomeclient.Reply{Success: true, Msg: "修改成功"} } else { return &bhomeclient.Reply{Success: false, Msg: "修改失败"} } } // @Summary 根据分组id删除摄像机算法规则 // @Description 根据分组id删除摄像机算法规则 // @Produce json // @Tags 摄像机规则 // @Param groupId query string true "任务算法参数分组id" // @Success 200 {string} json "{"code":200, success:true, msg:"请求处理成功", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:"错误信息内容"}" // @Router /data/api-v/camera/rule/deleteGroup [delete] func (crc CameraRuleController) DeleteByGroup(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { groupId := c.Query("groupId") if groupId == "" { return &bhomeclient.Reply{Success: false, Msg: "参数有误"} } logger.Debug("deleteByGroup groupId:", groupId) sv := service.CameraRuleService{ Broker: h.Bk, } if sv.DeleteByGroup(groupId) { return &bhomeclient.Reply{Success: true, Msg: "删除成功"} } else { return &bhomeclient.Reply{Success: false, Msg: "删除失败"} } } // @Summary 查找所有摄像机任务规则设置 // @Description 查找所有摄像机任务规则设置 // @Produce json // @Tags 摄像机规则 // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}" // @Router /data/api-v/camera/rule/findAll [get] func (crc CameraRuleController) FindAll(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { sv := service.CameraRuleService{ Broker: h.Bk, } resultData := sv.FindAll() return &bhomeclient.Reply{Success: true, Data: resultData} } // @Summary 查找所有的联动摄像机 // @Description 查找所有的联动摄像机 // @Produce json // @Tags camera // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}" // @Router /data/api-v/camera/findAllCameraLink [get] func (crc CameraRuleController) FindAllCameraLink(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { sv := service.CameraRuleService{ Broker: h.Bk, } list := sv.FindAllCameraLink() return &bhomeclient.Reply{Success: true, Data: list} } // @Summary 根据摄像机ids查找所有联动 // @Description 根据摄像机ids查找所有联动 // @Produce json // @Tags 摄像机规则 // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}" // @Router /data/api-v/camera/findLinksByCameraIds [post] func (crc CameraRuleController) FindLinksByCameraIds(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { type FindLinksByCamIdsReq struct { CameraIds []string `json:"cameraIds"` } var reqBody FindLinksByCamIdsReq c.BindJSON(&reqBody) if len(reqBody.CameraIds) == 0 { return &bhomeclient.Reply{Success: false, Msg: "参数有误"} } sv := service.CameraRuleService{ Broker: h.Bk, } d := sv.FindLinksByCameraIds(reqBody.CameraIds) return &bhomeclient.Reply{Success: true, Data: d} } // @Summary 查找所有摄像机任务规则设置 // @Description 查找所有摄像机任务规则设置 // @Produce json // @Tags 摄像机规则 // @cameraId query string true "摄像机或者数据栈id" // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}" // @Router /data/api-v/camera/rule/existRunningTask [get] func (crc CameraRuleController) ExistRunningTask(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { camId := c.Query("cameraId") if camId == "" { return &bhomeclient.Reply{Msg: "参数有误"} } sv := service.CameraRuleService{ Broker: h.Bk, } b := sv.ExistRunningTask(camId) logger.Debug("ExistRunningTask camId:", camId, " b:", b) return &bhomeclient.Reply{Success: true, Data: b} } func (crc CameraRuleController) FindAllTaskById(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { camId := c.Query("cameraId") if camId == "" { return &bhomeclient.Reply{Msg: "参数有误"} } var sdkApi bhomedbapi.SdkApi sdkMap := sdkApi.FindAllMap() sv := service.CameraRuleService{ Broker: h.Bk, } rules, err := sv.GetAllByCid(camId, "", nil, nil, nil, sdkMap) if err == nil { return &bhomeclient.Reply{Success: true, Data: rules} } return &bhomeclient.Reply{Msg: err.Error()} } func (crc CameraRuleController) addDbChangeMsg(bk bhomeclient.Broker, tChanged protomsg.TableChanged, id string, action protomsg.DbAction, info string) { dbMsg := protomsg.DbChangeMessage{ Table: tChanged, Id: id, Action: action, Info: info, } pb, _ := json.Marshal(dbMsg) bk.Publish(service.ProcName, pb) }