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