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)
|
}
|