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