package controllers import ( "basic.com/pubsub/protomsg.git" "basic.com/valib/bhomeclient.git" "basic.com/valib/logger.git" "encoding/json" "strconv" "strings" "vamicro/sync-service/models" "vamicro/sync-service/service" "vamicro/sync-service/vo" "vamicro/extend/util" ) type CameraController struct { } // @Summary 添加摄像机 // @Description "传入 区域的id(areaid)和摄像机名字(name) 必须, 其他参数可以在摄像机配置点击保存进行添加" // @Accept json // @Produce json // @Tags camera // @Param cameraStruct body vo.CameraEditVo true "struct of camera;the areaid of area's id and name of camera;must need" // @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/add [post] func (cc CameraController) CameraAdd(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var camVo vo.CameraEditVo if err := c.BindJSON(&camVo);err !=nil{ return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } sv := service.CameraService{} b, camE := sv.CameraAdd(camVo) if b{ cc.addDbChangeMsg(h.Bk, protomsg.TableChanged_T_Camera,camVo.Id,protomsg.DbAction_Insert,"") cc.addDbChangeMsg(h.Bk, protomsg.TableChanged_T_CameraPolygon, "", protomsg.DbAction_Insert, "") return &bhomeclient.Reply{ Success: true, Data: camE } } else { return &bhomeclient.Reply{ Success: false, Msg: "新增失败"} } } // @Summary 更新摄像机 // @Description "用于更新摄像机操作" // @Accept json // @Produce json // @Tags camera // @Param cam body vo.CameraEditVo true "id:摄像机id default:cid0 (string), areaid:摄像机关联区域id default:1 (int), name:摄像机名字 default:Testname(string) 必填; 其他参数可配 " // @Success 200 {string} json "{"code":200, success:true, msg:"请求处理成功", data:"修改后的摄像机信息"}" // @Failure 500 {string} json "{"code":500, success:false msg:"null",data:"错误信息内容"}" // @Router /data/api-v/camera/update [put] func (cc CameraController) CameraUpdate(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var camVo vo.CameraEditVo err := c.BindJSON(&camVo) if err != nil { return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } logger.Debug("update sensors:", camVo.Sensors) sv := service.CameraService{} if sv.CameraUpdate(camVo){ cc.addDbChangeMsg(h.Bk, protomsg.TableChanged_T_Camera,camVo.Id,protomsg.DbAction_Update,"") return &bhomeclient.Reply{ Success: true, Data: camVo.Copy2Camera()} } else { return &bhomeclient.Reply{ Success: false, Msg: "更新失败"} } } // @Summary "删除摄像机" // @Description "根据摄像机id删除摄像机" // @Produce json // @Tags camera // @Param cid query string true "摄像机id example: cid0" // @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/del [delete] func (cc CameraController) CameraDel(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var cam models.Camera cid := c.Query("cid") logger.Debug("CameraDel.cid:",cid) rows, err := cam.Delete(cid) if err != nil { return &bhomeclient.Reply{ Success: false, Msg: "服务器内部错误"} } if rows == 0 { return &bhomeclient.Reply{ Success: false, Msg: "记录不存在"} } pMsg := protomsg.DbChangeMessage{ //需要重新计算算力占用情况 Table: protomsg.TableChanged_T_Camera, Action: protomsg.DbAction_Delete, } pb,_ := json.Marshal(pMsg) h.Bk.Publish("camera-service", pb) return &bhomeclient.Reply{ Success: true, Msg: "删除成功"} } // @Summary 显示摄像机 // @Description "显示摄像机" // @Produce json // @Tags camera // @Param cid path 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/show [get] func (cc CameraController) CameraSel(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var cam models.Camera cid := c.Query("cid") rows, err := cam.SelectById(cid) if err != nil { return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } if rows == 0 { return &bhomeclient.Reply{ Success: false, Msg: "没有记录"} } m := util.Struct2Map(cam) var sor models.Sensor sensors, _ := sor.FindByCameraId(cid) if sensors != nil { m["sensors"] = sensors } else { m["sensors"] = []models.Sensor{} } return &bhomeclient.Reply{ Success: true, Data: m} } // @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/showAll [get] func (cc CameraController) GetAllCameras(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { var cam models.Camera cams, err := cam.FindAll() if err != nil { return &bhomeclient.Reply{ Success: false, Msg: err.Error()} } return &bhomeclient.Reply{ Success: true, Data: cams} } // @Summary 根据server获取所有摄像机列表及信息 // @Description 根据server获取所有摄像机列表及信息 // @Produce json // @Tags camera // @Param serverId query string false "查本机传serverId,查所有传空" // @Param cameraName query string false "摄像机名称" // @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/getAllCamerasByServer [get] func (cc CameraController) GetAllCamerasByServer(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { serverId := c.Query("serverId") cameraName := c.Query("cameraName") sv := service.CameraService{} cams,err := sv.GetAllCamerasByServer(serverId,cameraName) if err == nil { return &bhomeclient.Reply{ Success: true, Data: cams} } else { return &bhomeclient.Reply{ Success: false, Msg: err.Error()} } } // @Summary 获取运行类型获取摄像机列表 // @Description 获取运行类型获取摄像机列表 // @Produce json // @Tags camera // @Param runType query int true "0:查轮询,1:查实时" // @Param cameraName query string false "查询条件" // @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/getCamerasByRunType [get] func (cc CameraController) GetCamerasByRunType(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { runTypeStr := c.Query("runType") cameraName := c.Query("cameraName") logger.Debug("runType:",runTypeStr) logger.Debug("cameraName:",cameraName) runType, err := strconv.Atoi(runTypeStr) if err !=nil || (runType !=0 && runType !=1) { return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } sv := service.CameraService{} list,err := sv.GetCamerasByRunType(runType,cameraName) if err !=nil { return &bhomeclient.Reply{ Success: false, Msg: err.Error() } } else { return &bhomeclient.Reply{ Success: true, Data: list} } } // @Summary 切换摄像机运行实时或轮询的开关 // @Description 切换摄像机运行实时或轮询的开关 // @Produce json // @Tags camera // @Param cameraId formData string true "摄像机id" // @Param runEnable formData bool true "开启:true,关闭:false" // @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/updateRunEnable [post] func (cc CameraController) UpdateRunEnable(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply{ cameraId := c.PostForm("cameraId") enableStr := c.PostForm("runEnable") runEnable, _ := strconv.ParseBool(enableStr) if cameraId == "" { return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } sv := service.CameraService{} if sv.UpdateRunEnable(cameraId, runEnable){ cc.addDbChangeMsg(h.Bk, protomsg.TableChanged_T_Camera,cameraId,protomsg.DbAction_Update,"") return &bhomeclient.Reply{ Success: true, Msg: "更新成功"} } else { return &bhomeclient.Reply{ Success: false, Msg: "更新失败"} } } // @Summary 摄像机轮询和实时状态切换 // @Description 摄像机轮询和实时状态切换 // @Produce json // @Tags camera // @Param changeRunBody body vo.CameraChangeRunVo true "参数结构体,0:实时切轮询,1:轮询切实时" // @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/changeRunType [post] func (cc CameraController) ChangeRunType(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply{ var ccrVo vo.CameraChangeRunVo if err := c.BindJSON(&ccrVo);err !=nil{ return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } sv := service.CameraService{} if sv.ChangeRunType(ccrVo){ cIds := strings.Join(ccrVo.CameraIds, ",") cc.addDbChangeMsg(h.Bk, protomsg.TableChanged_T_Camera,cIds,protomsg.DbAction_Update,"") return &bhomeclient.Reply{ Success: true, Msg: "更新成功"} } else { return &bhomeclient.Reply{ Success: false, Msg: "更新失败"} } } // @Summary 摄像机is_running状态切换 // @Description 摄像机is_running状态切换 // @Produce json // @Tags camera // @Param cameraId formData string true "摄像机id" // @Param is_running formData bool true "解码中:true,停止解码:false" // @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/updateIsRunningState [post] func (cc CameraController) UpdateIsRunningState(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply{ cameraId := c.PostForm("cameraId") isRunningStr := c.PostForm("isRunning") isRunning, _ := strconv.ParseBool(isRunningStr) if cameraId == "" { return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } sv := service.CameraService{} if sv.UpdateIsRunningState(cameraId,isRunning){ return &bhomeclient.Reply{ Success: true, Msg: "更新成功"} } else { return &bhomeclient.Reply{ Success: false, Msg: "更新失败"} } } type IsRunningArg struct { CameraIds []string `json:"cameraIds"` } func (cc CameraController) UpdateIsRunningAll(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply{ var reqBody IsRunningArg c.BindJSON(&reqBody) logger.Debug("UpdateIsRunningAll cameraId:", reqBody.CameraIds) sv := service.CameraService{} if sv.UpdateIsRunningAll(reqBody.CameraIds){ return &bhomeclient.Reply{ Success: true, Msg: "更新成功"} } else { return &bhomeclient.Reply{ Success: false, Msg: "更新失败"} } } // @Summary 更新摄像机快照 // @Description 更新摄像机快照 // @Produce json // @Tags camera // @Param cameraId formData string true "摄像机id" // @Param snapshot formData string 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/updateSnapshot [post] func (cc CameraController) UpdateSnapshot(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply{ cameraId := c.PostForm("cameraId") snapshot := c.PostForm("snapshot") logger.Debug("cameraId:",cameraId) logger.Debug("snapshot:",snapshot) if cameraId == "" || snapshot == "" { return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } sv := service.CameraService{} if sv.UpdateSnapshot(cameraId, snapshot){ return &bhomeclient.Reply{ Success: true, Msg: "更新成功"} } else { return &bhomeclient.Reply{ Success: false, Msg: "更新失败"} } } // 拖拽到其他组织 // 需要 当前camid , 以及修改后的areaid // 直接使用camera update api interface. // @Summary 将摄像机挂到指定的目录树下 // @Description 将摄像机挂到指定的目录树下 // @Produce json // @Tags camera // @Param cameraId formData string true "摄像机id" // @Param areaId formData 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/updateCameraArea [post] func (cc CameraController) UpdateCameraArea(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { cameraId := c.PostForm("cameraId") areaId := c.PostForm("areaId") if cameraId == "" || areaId == "" { return &bhomeclient.Reply{ Success: false, Msg: "参数有误"} } var caE models.CameraArea if caE.UpdateArea(cameraId, areaId) { return &bhomeclient.Reply{ Success: true, Msg: "更新成功"} } else { return &bhomeclient.Reply{ Success: false, Msg: "更新失败"} } } // @Summary 删除某一个目录树下的指定摄像机 // @Description 删除某一个目录树下的指定摄像机 // @Produce json // @Tags camera // @Param cameraId path string true "摄像机id" // @Param areaId path 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/cameraAreaDel [get] func (cc CameraController) CameraAreaDel(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply { //cameraId := c.Param("cameraId") //areaId := c.Param("areaId") //logger.Debug(cameraId) //logger.Debug(areaId) return nil } func (cc CameraController) 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) }