package controllers import ( "basic.com/dbapi.git" "basic.com/pubsub/esutil.git" "encoding/json" "fmt" "github.com/gin-gonic/gin" "strconv" "webserver/cache" "webserver/extend/code" "webserver/extend/config" "webserver/extend/util" "webserver/models" ) type CameraTaskController struct { } //用于接收多个摄像机的id,以逗号隔开 type MultiCamera struct { CameraIds []string `json:"cameraIds"` } type CameraTaskVo struct { Id string `json:"id"` CameraId string `json:"camera_id"` TaskId string `json:"task_id"` //任务id 来自于任务表 TimeRule string `json:"time_rule"` ReactRule string `json:"react_rule"` ReactDevice string `json:"react_device"` DelFlag bool `json:"del_flag"` UpdateFlag bool `json:"update_flag"` Enable int `json:"enable"` //默认启用 Sort int `json:"sort"` //任务排序 IsFull int `json:"is_full"` //参数是否设置完整 LinkTaskId string `json:"link_task_id"` //联动任务组 } type CameraTaskSaveArg struct { Id string `json:"id"` SetType string `json:"set_type" example:"batchTask:批量任务,linkTask:联动任务"`//任务设置方式(批量设置还是联动任务设置) CameraIds []string `json:"camera_ids"` TaskId string `json:"task_id"` GroupId string `json:"group_id"` GroupText string `json:"group_text"` GroupRule []CameraTaskArgVo `json:"group_rule"` } type CameraTaskArgGroup struct { Id string `json:"id"` CameraTaskId string `json:"camera_task_id"` GroupId string `json:"group_id"` GroupText string `json:"group_text"` AlarmLevel int `json:"alarm_level"` } type CameraTaskArgVo struct { Id string `json:"id"` CameraId string `json:"camera_id"`//摄像机id PolygonId string `json:"polygon_id"`//多边形id SdkId string `json:"sdk_id"`//算法id SdkArgAlias string `json:"sdk_arg_alias"`//算法参数别名 Operator string `json:"operator"`//计算方式=,>,>=等等 OperatorType string `json:"operator_type"`//计算的值类型 SdkArgValue string `json:"sdk_arg_value"` //算法参数值设置 RuleWithPre string `json:"rule_with_pre"` //与下一条的逻辑运算符 GroupId string `json:"group_id"` } type LinkCameraTasksVo struct { } type CameraTaskInfoVo struct { Camera models.Camera `json:"camera"` Tasks []models.Task `json:"tasks"` Polygon CameraPolygonVo `json:"polygon"` } // @Security ApiKeyAuth // @Summary 查询所有任务 // @Description "查询所有任务" // @Accept json // @Produce json // @Tags CameraTask // @Param cameraIds body controllers.MultiCamera false "摄像机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/alltask [post] func (ctc CameraTaskController) FindTasksByCameraIds(c *gin.Context){ var mulCamera MultiCamera c.BindJSON(&mulCamera) var api dbapi.CameraTaskApi flag, data := api.FindTasksByCameraIds(mulCamera.CameraIds) if flag { bytes, _ := json.Marshal(data) var camTInfo []CameraTaskInfoVo json.Unmarshal(bytes, &camTInfo) //处理已被删除的任务 var delTasks []models.Task var taskApi dbapi.TaskApi taskInfos := taskApi.FindAll() m := make(map[string]string) for _,ti :=range taskInfos{ if ti.Task.Taskid != FaceExtract_VirtualTaskId{ m[ti.Task.Taskid] = ti.Task.Taskid } } localConf, _ := cache.GetServerInfo() if localConf.AlarmIp != "" && localConf.ServerId != "" && localConf.AlarmPort>0 { indexName := config.EsInfo.EsIndex.AiOcean.IndexName esTaskM, e := esutil.AggregateTaskList(localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort)), indexName, localConf.ServerId) if e==nil && esTaskM !=nil { for _,tM :=range esTaskM { if _,ok := m[tM["taskId"].(string)];!ok {//表示此任务已被删除 taskId := tM["taskId"].(string) m[taskId] = taskId delTasks = append(delTasks, models.Task{ Taskid: taskId, Taskname: tM["taskName"].(string), DelFlag: true, }) } } } } var result []CameraTaskInfoVo if camTInfo != nil { for _, camIn := range camTInfo { nIfn := CameraTaskInfoVo{ Camera: camIn.Camera, Polygon: camIn.Polygon, Tasks: append(camIn.Tasks, delTasks...), } result = append(result, nIfn) } } util.ResponseFormat(c,code.Success, result) } else { util.ResponseFormat(c,code.ComError,data) } } // @Security ApiKeyAuth // @Summary 摄像机添加一个任务 // @Description 摄像机添加一个任务 // @Accept x-www-form-urlencoded // @Produce json // @Tags CameraTask // @Param cameraId formData string true "摄像机id" // @Param taskId 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/cameraTask/addTask [post] func (ctc CameraTaskController) AddTask(c *gin.Context) { cameraId := c.PostForm("cameraId") taskId := c.PostForm("taskId") if cameraId == "" || taskId == "" { util.ResponseFormat(c,code.RequestParamError,"参数有误") return } var api dbapi.CameraTaskApi if b,data := api.AddTask(cameraId, taskId);b { util.ResponseFormat(c,code.AddSuccess, data) } else { if data.(string) == "此国标摄像机已在其它服务器配置任务!" { util.ResponseFormat(c,code.AddTaskErr, data) } else { util.ResponseFormat(c,code.ComError, data) } } } // @Security ApiKeyAuth // @Summary 查询所有任务 // @Description "查询所有任务" // @Produce json // @Tags CameraTask // @Param cameraId 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/task/{cameraId} [get] func (ctc CameraTaskController) CameraTaskAll(c *gin.Context) { cameraId := c.Param("cameraId") if cameraId == "" { util.ResponseFormat(c,code.RequestParamError,"摄像机id不能为空") return } var api dbapi.CameraTaskApi flag,data := api.CameraTaskAll(cameraId) if flag { util.ResponseFormat(c,code.Success,data) } else { util.ResponseFormat(c,code.ComError,data) } } // @Security ApiKeyAuth // @Summary 摄像机保存任务 // @Description 摄像机保存任务 // @Accept json // @Produce json // @Tags camera // @Param args body controllers.CameraTaskSaveArg 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/saveTask [post] func (cc CameraController) CameraTaskSave(c *gin.Context) { var saveBody CameraTaskSaveArg err := c.BindJSON(&saveBody) if err != nil { util.ResponseFormat(c, code.RequestParamError, "参数有误") return } var api dbapi.CameraTaskApi paramBody := util.Struct2Map(saveBody) fmt.Println("paramBody:",paramBody) flag, data := api.CameraTaskSave(paramBody) fmt.Println("data",data) if flag { util.ResponseFormat(c,code.Success,data) } else { util.ResponseFormat(c, code.ComError, data) } } type PasteRuleArg struct { SourceId string `json:"sourceId" binding:"required"` TargetIds []string `json:"targetIds" binging:"required"` } // @Summary 复制摄像机规则到选定的多个摄像机 // @Description 复制摄像机规则到选定的多个摄像机 // @Accept json // @Produce json // @Tags CameraTask // @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 (ctc CameraTaskController) PasteRules(c *gin.Context) { var reqBody PasteRuleArg err := c.BindJSON(&reqBody) if err != nil { util.ResponseFormat(c, code.RequestParamError, "") return } var api dbapi.CameraTaskApi if api.PasteRules(reqBody.SourceId, reqBody.TargetIds) { util.ResponseFormat(c,code.Success,"") } else { util.ResponseFormat(c,code.ComError,"") } } // @Security ApiKeyAuth // @Summary 删除摄像机的任务 // @Description 删除摄像机的任务 // @Produce json // @Tags camera // @Param cameraId path string true "摄像机id" // @Param taskId 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/delTask/{cameraId}/{taskId} [delete] func (cc CameraController) CameraDelTask(c *gin.Context) { cameraId := c.Param("cameraId") taskId := c.Param("taskId") if cameraId == "" || taskId == "" { util.ResponseFormat(c,code.RequestParamError,"参数有误") return } var api dbapi.CameraTaskApi flag,data := api.DeleteCameraTask(cameraId,taskId) if flag { util.ResponseFormat(c, code.Success, data) } else { util.ResponseFormat(c, code.ComError, data) } } type DataTransVo struct { CameraIds []string `json:"camera_ids"` TaskId string `json:"task_id"` IsDataTrans int `json:"is_data_trans"` } type GroupAlarmLevelVo struct { GroupId string `json:"group_id"` AlarmLevel int `json:"alarm_level"` } // @Security ApiKeyAuth // @Summary 保存任务是否下传数据 // @Description 保存任务是否下传数据 // @Accept json // @Produce json // @Tags CameraTask // @Param TransAndAlarmLevel body controllers.DataTransVo 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/cameraTask/saveIsDataTrans [post] func (ctc CameraTaskController) SaveIsDataTrans(c *gin.Context) { var transVo DataTransVo if err := c.BindJSON(&transVo);err!=nil { util.ResponseFormat(c,code.RequestParamError,"参数有误") return } var api dbapi.CameraTaskApi paramBody := util.Struct2Map(transVo) flag ,data := api.SaveIsDataTrans(paramBody) if flag { util.ResponseFormat(c,code.Success,data) } else { util.ResponseFormat(c,code.ComError,data) } } // @Security ApiKeyAuth // @Summary 保存规则组报警等级 // @Description 保存规则组报警等级 // @Accept json // @Produce json // @Tags CameraTask // @Param GroupLevel body controllers.GroupAlarmLevelVo true "alarmLevel" // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}" // @Failure 500 {string} json "{"code":500, success:false, msg:"", data:""}" // @Router /data/api-v/cameraTask/saveAlarmLevelByGroup [post] func (ctc CameraTaskController) SaveAlarmLevelByGroup(c *gin.Context) { var groupLevelVo GroupAlarmLevelVo if err := c.BindJSON(&groupLevelVo);err !=nil { util.ResponseFormat(c,code.RequestParamError,"参数有误") return } var api dbapi.CameraTaskApi flag,data := api.SaveAlarmLevelByGroup(groupLevelVo.GroupId,groupLevelVo.AlarmLevel) if flag { util.ResponseFormat(c,code.Success,data) } else { util.ResponseFormat(c,code.ComError,data) } } type CameraTaskStatusVo struct { CameraId string `json:"cameraId"` TaskId string `json:"taskId"` Status int `json:"status"` } // @Security ApiKeyAuth // @Summary 更新任务状态 // @Description 更新任务状态 // @Accept json // @Produce json // @Tags CameraTask // @Param CameraTaskStatus body controllers.CameraTaskStatusVo 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/cameraTask/updateCameraTaskStatus [post] func (ctc CameraTaskController) UpdateCameraTaskStatus(c *gin.Context) { var paramVo CameraTaskStatusVo if err := c.BindJSON(¶mVo);err !=nil { util.ResponseFormat(c,code.RequestParamError,"参数有误") return } var api dbapi.CameraTaskApi flag, data := api.UpdateCameraTaskStatus(paramVo.CameraId, paramVo.TaskId, paramVo.Status) if flag { if data.(string) == "此任务为停用状态,请在任务管理中开启!"{ util.ResponseFormat(c,code.TaskStoped,data) } else { util.ResponseFormat(c,code.UpdateSuccess,data) } } else { util.ResponseFormat(c,code.ComError,data) } }