liuxiaolong
2020-06-24 dff98ff959934d17b8222b06e827231374be55eb
ruleTemplate instead of task
3个文件已添加
6个文件已修改
2369 ■■■■■ 已修改文件
controllers/cameraRule.go 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/cameraTask.go 766 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/cameraTaskArgs.go 412 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/ruleTemplate.go 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/task.go 729 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.mod 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.sum 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
router/router.go 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vo/cameraRule.go 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/cameraRule.go
New file
@@ -0,0 +1,190 @@
package controllers
import (
    "basic.com/dbapi.git"
    "github.com/gin-gonic/gin"
    "webserver/extend/code"
    "webserver/extend/util"
    "webserver/vo"
)
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 摄像机规则
// @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/{cameraId} [get]
func (crc CameraRuleController) FindByCameraId(c *gin.Context) {
    cameraId := c.Param("cameraId")
    if cameraId == "" {
        util.ResponseFormat(c,code.RequestParamError,"")
        return
    }
    var api dbapi.CameraRuleApi
    b,d := api.FindByCameraId(cameraId)
    if b {
        util.ResponseFormat(c,code.Success,d)
    } else {
        util.ResponseFormat(c,code.ComError,"")
    }
}
// @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(c *gin.Context) {
    var reqBody vo.GroupRuleVo
    err := c.BindJSON(&reqBody)
    if err !=nil {
        util.ResponseFormat(c,code.RequestParamError,"")
        return
    }
    param := util.Struct2Map(reqBody)
    var api dbapi.CameraRuleApi
    if api.Save(param) {
        util.ResponseFormat(c,code.Success,"")
    } else {
        util.ResponseFormat(c,code.ComError,"")
    }
}
// @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(c *gin.Context) {
    var reqBody PasteRuleArg
    err := c.BindJSON(&reqBody)
    if err !=nil {
        util.ResponseFormat(c,code.RequestParamError,"")
        return
    }
    param := util.Struct2Map(reqBody)
    var api dbapi.CameraRuleApi
    if api.PasteRules(param) {
        util.ResponseFormat(c,code.Success,"")
    } else {
        util.ResponseFormat(c,code.ComError,"")
    }
}
// @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(c *gin.Context) {
    var saveBody vo.GroupRuleVo
    if err := c.BindJSON(&saveBody);err !=nil {
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    param := util.Struct2Map(saveBody)
    var api dbapi.CameraRuleApi
    if api.SaveLinkRulesByGroup(param) {
        util.ResponseFormat(c,code.Success,saveBody)
    } else {
        util.ResponseFormat(c,code.ComError, "")
    }
}
// @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(c *gin.Context) {
    var idArrVo vo.MultiCamera
    if err := c.BindJSON(&idArrVo);err !=nil {
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    if idArrVo.CameraIds == nil || len(idArrVo.CameraIds) == 0 {
        util.ResponseFormat(c,code.RequestParamError,"摄像机id不能少于1")
        return
    }
    param := util.Struct2Map(idArrVo)
    var api dbapi.CameraRuleApi
    flag, ruleList := api.GetLinkRulesByCameraIds(param)
    if flag {
        util.ResponseFormat(c,code.Success, ruleList)
    } else {
        util.ResponseFormat(c,code.ComError,"查询失败")
    }
}
// @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(c *gin.Context) {
    var reqBody vo.GroupAlarmLevelVo
    err := c.BindJSON(&reqBody)
    if err != nil {
        util.ResponseFormat(c,code.RequestParamError, "")
        return
    }
    param := util.Struct2Map(reqBody)
    var api dbapi.CameraRuleApi
    if api.UpdateAlarmLevel(param) {
        util.ResponseFormat(c, code.Success, "修改成功")//摄像机任务参数删除完了
    } else {
        util.ResponseFormat(c, code.ComError, "修改失败")
    }
}
// @Summary 根据分组id删除摄像机算法规则
// @Description 根据分组id删除摄像机算法规则
// @Produce json
// @Tags CameraTaskArgs
// @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/deleteByGroup [get]
func (crc CameraRuleController) DeleteByGroup(c *gin.Context) {
    groupId := c.Query("groupId")
    if groupId == "" {
        util.ResponseFormat(c, code.RequestParamError, "id必填")
        return
    }
    var api dbapi.CameraRuleApi
    if api.DeleteByGroup(groupId) {
        util.ResponseFormat(c, code.Success, "删除成功")//摄像机任务参数删除完了
    }
    util.ResponseFormat(c, code.ComError, "删除失败")
}
controllers/cameraTask.go
@@ -1,384 +1,384 @@
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(&paramVo);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)
    }
}
//
//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(&paramVo);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)
//    }
//}
controllers/cameraTaskArgs.go
@@ -1,208 +1,208 @@
package controllers
import (
    "basic.com/dbapi.git"
    "basic.com/valib/logger.git"
    "github.com/gin-gonic/gin"
    "strconv"
    "strings"
    "webserver/extend/code"
    "webserver/extend/util"
)
type CameraTaskArgsController struct {
}
// @Security ApiKeyAuth
// @Summary 根据摄像机id和任务id查询算法配置详情
// @Description 根据摄像机id和任务id查询算法配置详情
// @Produce json
// @Tags CameraTaskArgs
// @Param cameraId query string true "摄像机id"
// @Param taskId query string true "任务id"
// @Param set_type query 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/getRulesByCameraAndTask [get]
func (controller CameraTaskArgsController) FindByCameraAndTask(c *gin.Context) {
    cameraId := c.Query("cameraId")
    taskId := c.Query("taskId")
    setType := c.Query("set_type")
    if cameraId == "" || taskId == "" || setType == "" {
        util.ResponseFormat(c,code.RequestParamError,"摄像机id和任务id不能为空")
        return
    }
    var api dbapi.CameraTaskArgsApi
    flag,data := api.FindByCameraAndTask(cameraId,taskId,setType)
    if flag {
        util.ResponseFormat(c, code.Success, data)
    } else {
        util.ResponseFormat(c, code.ComError, data)
    }
}
// @Security ApiKeyAuth
// @Summary 根据多个摄像机id查询联动任务规则设置
// @Description 根据多个摄像机id查询联动任务规则设置
// @Accept json
// @Produce json
// @Tags CameraTaskArgs
// @Param cameraIds body controllers.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/cameraTaskArgs/getLinkRulesByCameraIds [post]
func (controller CameraTaskArgsController) GetLinkRulesByCameraIds(c *gin.Context) {
    var cameraIdsVo MultiCamera
    if err := c.BindJSON(&cameraIdsVo);err !=nil {
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    var api dbapi.CameraTaskArgsApi
    paramBody := util.Struct2Map(cameraIdsVo)
    flag,data := api.GetLinkRulesByCameraIds(paramBody)
    if flag {
        util.ResponseFormat(c,code.Success,data)
    } else {
        util.ResponseFormat(c,code.ComError,data)
    }
}
// @Security ApiKeyAuth
// @Summary 根据分组id切换布防或撤防
// @Description 根据分组id切换布防或撤防
// @Accept x-www-form-urlencoded
// @Produce json
// @Tags CameraTaskArgs
// @Param groupId formData string true "任务算法参数分组id"
// @Param defenceState formData bool true "布防状态,false:撤防,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/cameraTaskArgs/updateDefenceStateByGroup [post]
func (controller CameraTaskArgsController) UpdateDefenceStateByGroup(c *gin.Context){
    groupId := c.PostForm("groupId")
    str := c.PostForm("defenceState")
    logger.Debug("defenceState:",str)
    defenceState, err := strconv.ParseBool(str)
    if groupId =="" || err !=nil{
        util.ResponseFormat(c, code.RequestParamError, "参数有误")
        return
    }
    var api dbapi.CameraTaskArgsApi
    if b,data := api.UpdateDefenceStateByGroup(groupId,defenceState);b{
        util.ResponseFormat(c,code.UpdateSuccess,data)
    } else {
        util.ResponseFormat(c,code.ComError,data)
    }
}
// @Security ApiKeyAuth
// @SUmmary 根据分组id删除摄像机算法规则
// @Description 根据分组id删除摄像机算法规则
// @Produce json
// @Tags CameraTaskArgs
// @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/cameraTaskArgs/deleteByGroup [get]
func (controller CameraTaskArgsController)DeleteByGroup(c *gin.Context) {
    groupId := c.Query("groupId")
    if groupId == "" {
        util.ResponseFormat(c, code.RequestParamError, "id必填")
        return
    }
    var api dbapi.CameraTaskArgsApi
    flag,data := api.DeleteByGroup(groupId)
    if flag {
        util.ResponseFormat(c,code.Success,data)
    } else {
        util.ResponseFormat(c,code.ComError,"删除失败")
    }
}
type SaveLinkRulesGroupVo struct {
    LinkTaskId string `json:"link_task_id"`//联动任务id
    GroupId string `json:"group_id"`//分组id
    GroupText string `json:"group_text"`//组规则文字
    Rules []LinkRuleArgVo `json:"rules"`//组内的规则
}
type LinkRuleArgVo struct {
    TaskId string `json:"task_id"`
    CameraTaskArgs
}
type CameraTaskArgs struct {
    Id string `json:"id"`
    CameraTaskId string `json:"camera_task_id"`//camera_tasks表的主键,摄像机和任务关联id或者联动任务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"` //算法参数值设置
    Sort int `json:"sort"`//排序
    RuleWithPre string `json:"rule_with_pre"`//与上一条记录的逻辑运算规则(&&,||)
    GroupId string `json:"group_id"`//分组id
}
// @Security ApiKeyAuth
// @Summary 保存联动任务规则参数
// @Description 保存联动任务规则参数
// @Accept json
// @Produce json
// @Param saveBody body controllers.SaveLinkRulesGroupVo 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/cameraTaskArgs/saveLinkRulesByGroup [post]
func (controller CameraTaskArgsController) SaveLinkRulesByGroup(c *gin.Context) {
    var saveBody SaveLinkRulesGroupVo
    if err := c.BindJSON(&saveBody);err !=nil {
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    var api dbapi.CameraTaskArgsApi
    paramBody := util.Struct2Map(saveBody)
    flag,data := api.SaveLinkRulesByGroup(paramBody)
    if flag {
        util.ResponseFormat(c,code.Success,data)
    } else {
        util.ResponseFormat(c,code.ComError,data)
    }
}
type RuleApply2AllVo struct {
    CameraId   string                `json:"camera_id" binding:"required"`//规则拥有者id
}
// @Summary 将本条规则应用到所有本地视频
// @Description 将本条规则应用到所有本地视频
// @Produce json
// @Tags CameraTaskArgs
// @Param args body controllers.RuleApply2AllVo 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/cameraTaskArgs/ruleApply2All [post]
func (controller CameraTaskArgsController) RuleApply2All(c *gin.Context) {
    var saveBody RuleApply2AllVo
    err := c.BindJSON(&saveBody)
    if err !=nil {
        util.ResponseFormat(c, code.RequestParamError, "参数有误")
        return
    }
    if !strings.HasPrefix(saveBody.CameraId, File_Video_Id_Pre) && !strings.HasPrefix(saveBody.CameraId, File_Img_Id_Pre) && !!strings.HasPrefix(saveBody.CameraId, File_Audio_Id_Pre) {
        util.ResponseFormat(c, code.RequestParamError, "参数有误")
        return
    }
    var api dbapi.CameraTaskApi
    paramBody := util.Struct2Map(saveBody)
    flag, data := api.RuleApply2All(paramBody)
    if flag {
        util.ResponseFormat(c,code.Success,data)
    } else {
        util.ResponseFormat(c, code.ComError, data)
    }
}
//import (
//    "basic.com/dbapi.git"
//    "basic.com/valib/logger.git"
//    "github.com/gin-gonic/gin"
//    "strconv"
//    "strings"
//    "webserver/extend/code"
//    "webserver/extend/util"
//)
//
//type CameraTaskArgsController struct {
//
//}
//
//// @Security ApiKeyAuth
//// @Summary 根据摄像机id和任务id查询算法配置详情
//// @Description 根据摄像机id和任务id查询算法配置详情
//// @Produce json
//// @Tags CameraTaskArgs
//// @Param cameraId query string true "摄像机id"
//// @Param taskId query string true "任务id"
//// @Param set_type query 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/getRulesByCameraAndTask [get]
//func (controller CameraTaskArgsController) FindByCameraAndTask(c *gin.Context) {
//    cameraId := c.Query("cameraId")
//    taskId := c.Query("taskId")
//    setType := c.Query("set_type")
//    if cameraId == "" || taskId == "" || setType == "" {
//        util.ResponseFormat(c,code.RequestParamError,"摄像机id和任务id不能为空")
//        return
//    }
//    var api dbapi.CameraTaskArgsApi
//    flag,data := api.FindByCameraAndTask(cameraId,taskId,setType)
//
//    if flag {
//        util.ResponseFormat(c, code.Success, data)
//    } else {
//        util.ResponseFormat(c, code.ComError, data)
//    }
//}
//
//// @Security ApiKeyAuth
//// @Summary 根据多个摄像机id查询联动任务规则设置
//// @Description 根据多个摄像机id查询联动任务规则设置
//// @Accept json
//// @Produce json
//// @Tags CameraTaskArgs
//// @Param cameraIds body controllers.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/cameraTaskArgs/getLinkRulesByCameraIds [post]
//func (controller CameraTaskArgsController) GetLinkRulesByCameraIds(c *gin.Context) {
//    var cameraIdsVo MultiCamera
//    if err := c.BindJSON(&cameraIdsVo);err !=nil {
//        util.ResponseFormat(c,code.RequestParamError,"参数有误")
//        return
//    }
//    var api dbapi.CameraTaskArgsApi
//    paramBody := util.Struct2Map(cameraIdsVo)
//    flag,data := api.GetLinkRulesByCameraIds(paramBody)
//    if flag {
//        util.ResponseFormat(c,code.Success,data)
//    } else {
//        util.ResponseFormat(c,code.ComError,data)
//    }
//}
//
//// @Security ApiKeyAuth
//// @Summary 根据分组id切换布防或撤防
//// @Description 根据分组id切换布防或撤防
//// @Accept x-www-form-urlencoded
//// @Produce json
//// @Tags CameraTaskArgs
//// @Param groupId formData string true "任务算法参数分组id"
//// @Param defenceState formData bool true "布防状态,false:撤防,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/cameraTaskArgs/updateDefenceStateByGroup [post]
//func (controller CameraTaskArgsController) UpdateDefenceStateByGroup(c *gin.Context){
//    groupId := c.PostForm("groupId")
//    str := c.PostForm("defenceState")
//    logger.Debug("defenceState:",str)
//    defenceState, err := strconv.ParseBool(str)
//    if groupId =="" || err !=nil{
//        util.ResponseFormat(c, code.RequestParamError, "参数有误")
//        return
//    }
//    var api dbapi.CameraTaskArgsApi
//    if b,data := api.UpdateDefenceStateByGroup(groupId,defenceState);b{
//        util.ResponseFormat(c,code.UpdateSuccess,data)
//    } else {
//        util.ResponseFormat(c,code.ComError,data)
//    }
//}
//
//// @Security ApiKeyAuth
//// @SUmmary 根据分组id删除摄像机算法规则
//// @Description 根据分组id删除摄像机算法规则
//// @Produce json
//// @Tags CameraTaskArgs
//// @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/cameraTaskArgs/deleteByGroup [get]
//func (controller CameraTaskArgsController)DeleteByGroup(c *gin.Context) {
//    groupId := c.Query("groupId")
//    if groupId == "" {
//        util.ResponseFormat(c, code.RequestParamError, "id必填")
//        return
//    }
//    var api dbapi.CameraTaskArgsApi
//    flag,data := api.DeleteByGroup(groupId)
//    if flag {
//        util.ResponseFormat(c,code.Success,data)
//    } else {
//        util.ResponseFormat(c,code.ComError,"删除失败")
//    }
//
//}
//
//type SaveLinkRulesGroupVo struct {
//    LinkTaskId string `json:"link_task_id"`//联动任务id
//    GroupId string `json:"group_id"`//分组id
//    GroupText string `json:"group_text"`//组规则文字
//    Rules []LinkRuleArgVo `json:"rules"`//组内的规则
//}
//
//type LinkRuleArgVo struct {
//    TaskId string `json:"task_id"`
//    CameraTaskArgs
//}
//
//type CameraTaskArgs struct {
//    Id string `json:"id"`
//    CameraTaskId string `json:"camera_task_id"`//camera_tasks表的主键,摄像机和任务关联id或者联动任务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"` //算法参数值设置
//    Sort int `json:"sort"`//排序
//    RuleWithPre string `json:"rule_with_pre"`//与上一条记录的逻辑运算规则(&&,||)
//    GroupId string `json:"group_id"`//分组id
//}
//
//// @Security ApiKeyAuth
//// @Summary 保存联动任务规则参数
//// @Description 保存联动任务规则参数
//// @Accept json
//// @Produce json
//// @Param saveBody body controllers.SaveLinkRulesGroupVo 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/cameraTaskArgs/saveLinkRulesByGroup [post]
//func (controller CameraTaskArgsController) SaveLinkRulesByGroup(c *gin.Context) {
//    var saveBody SaveLinkRulesGroupVo
//    if err := c.BindJSON(&saveBody);err !=nil {
//        util.ResponseFormat(c,code.RequestParamError,"参数有误")
//        return
//    }
//    var api dbapi.CameraTaskArgsApi
//    paramBody := util.Struct2Map(saveBody)
//    flag,data := api.SaveLinkRulesByGroup(paramBody)
//    if flag {
//        util.ResponseFormat(c,code.Success,data)
//    } else {
//        util.ResponseFormat(c,code.ComError,data)
//    }
//}
//
//type RuleApply2AllVo struct {
//    CameraId   string                `json:"camera_id" binding:"required"`//规则拥有者id
//}
//
//// @Summary 将本条规则应用到所有本地视频
//// @Description 将本条规则应用到所有本地视频
//// @Produce json
//// @Tags CameraTaskArgs
//// @Param args body controllers.RuleApply2AllVo 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/cameraTaskArgs/ruleApply2All [post]
//func (controller CameraTaskArgsController) RuleApply2All(c *gin.Context) {
//    var saveBody RuleApply2AllVo
//    err := c.BindJSON(&saveBody)
//    if err !=nil {
//        util.ResponseFormat(c, code.RequestParamError, "参数有误")
//        return
//    }
//    if !strings.HasPrefix(saveBody.CameraId, File_Video_Id_Pre) && !strings.HasPrefix(saveBody.CameraId, File_Img_Id_Pre) && !!strings.HasPrefix(saveBody.CameraId, File_Audio_Id_Pre) {
//        util.ResponseFormat(c, code.RequestParamError, "参数有误")
//        return
//    }
//    var api dbapi.CameraTaskApi
//    paramBody := util.Struct2Map(saveBody)
//    flag, data := api.RuleApply2All(paramBody)
//    if flag {
//        util.ResponseFormat(c,code.Success,data)
//    } else {
//        util.ResponseFormat(c, code.ComError, data)
//    }
//}
controllers/ruleTemplate.go
New file
@@ -0,0 +1,120 @@
package controllers
import (
    "basic.com/dbapi.git"
    "basic.com/pubsub/protomsg.git"
    "bytes"
    "encoding/json"
    "github.com/gin-gonic/gin"
    "github.com/gogo/protobuf/jsonpb"
    "webserver/extend/code"
    "webserver/extend/util"
)
type RuleTemplateController struct {
}
var jsonpbMarshaler = &jsonpb.Marshaler{
    EnumsAsInts: true,
    EmitDefaults: true,
    OrigName: true,
}
// @Summary 保存场景模板
// @Description 保存场景模板
// @Accept json
// @Produce json
// @Tags 场景模板
// @Param reqBody body models.RuleTemplate 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/template/rule/save [post]
func (rtc RuleTemplateController) Save(c *gin.Context) {
    var reqBody map[string]interface{}
    c.BindJSON(&reqBody)
    var api dbapi.RuleTemplateApi
    if api.Save(reqBody) {
        util.ResponseFormat(c, code.Success, "保存成功")
    } else {
        util.ResponseFormat(c, code.ComError, "保存失败")
    }
}
// @Summary 编辑
// @Description 编辑
// @Accept json
// @Produce json
// @Tags 场景模板
// @Param id 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/template/rule/{id} [get]
func (rtc RuleTemplateController) Show(c *gin.Context) {
    id := c.Param("id")
    if id == "" {
        util.ResponseFormat(c,code.RequestParamError, "参数有误")
        return
    }
    var api dbapi.RuleTemplateApi
    b, d := api.Show(id)
    if b {
        util.ResponseFormat(c,code.Success, d)
    } else {
        util.ResponseFormat(c,code.ComError, "")
    }
}
// @Summary 根据id删除场景模板
// @Description 根据id删除场景模板
// @Accept json
// @Produce json
// @Tags 场景模板
// @Param id 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/template/rule/{id} [delete]
func (rtc RuleTemplateController) Delete(c *gin.Context) {
    id := c.Param("id")
    if id == "" {
        util.ResponseFormat(c,code.RequestParamError, "参数有误")
        return
    }
    var api dbapi.RuleTemplateApi
    if api.Delete(id) {
        util.ResponseFormat(c,code.Success, "删除成功")
    } else {
        util.ResponseFormat(c,code.ComError, "")
    }
}
// @Summary 查找所有场景模板
// @Description 查找所有场景模板
// @Accept json
// @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/template/rule [get]
func (rtc RuleTemplateController) FindAll(c *gin.Context) {
    var api dbapi.RuleTemplateApi
    b, templates := api.FindAll()
    if b {
        var result protomsg.RuleTemplateList
        for _,r := range templates {
            result.List = append(result.List, &r)
        }
        var _buffer bytes.Buffer
        err := jsonpbMarshaler.Marshal(&_buffer, &result)
        if err == nil {
            jsonB := _buffer.Bytes()
            var m map[string]interface{}
            json.Unmarshal(jsonB, &m)
            util.ResponseFormat(c,code.Success, m)
            return
        }
    } else {
        util.ResponseFormat(c, code.ComError, "")
    }
}
controllers/task.go
@@ -1,16 +1,8 @@
package controllers
import (
    "basic.com/dbapi.git"
    "basic.com/pubsub/esutil.git"
    "basic.com/pubsub/protomsg.git"
    "encoding/json"
    "strconv"
    "time"
    "webserver/cache"
    "webserver/extend/config"
    "github.com/gin-gonic/gin"
    "time"
    "webserver/extend/code"
    "webserver/extend/util"
)
@@ -38,37 +30,37 @@
    FaceExtract_VirtualSdkId = "virtual-faceextract-sdk-pull"//结果输出的算法id
)
// @Security ApiKeyAuth
// @Summary 查找所有任务,包含任务信息和对应的算法信息
// @Description 查找所有任务
// @Produce json
// @Tags task
// @Success 200 {string} json "{"code":200, msg:"请求处理成功",data:"",success:true}"
// @Failure 500 {string} json "{"code":500, msg:"请求失败",data:"",success:false}"
// @Router /data/api-v/task/findAll [GET]
func (tc TaskController) FindAll(c *gin.Context) {
    // 显示所有任务: 获取信息
    var taskApi dbapi.TaskApi
    taskInfos := taskApi.FindAll()
    var arr []protomsg.TaskSdkInfo
    for _,ti :=range taskInfos{
        if ti.Task.Taskid != FaceExtract_VirtualTaskId{
            arr = append(arr,ti)
        }
    }
    var tasks []TaskSdkVo
    dataBytes, err := json.Marshal(arr)
    if err !=nil {
        util.ResponseFormat(c,code.ComError,[]TaskSdkVo{})
    } else {
        if err := json.Unmarshal(dataBytes, &tasks);err !=nil {
            util.ResponseFormat(c,code.ComError,[]TaskSdkVo{})
        } else {
            util.ResponseFormat(c,code.Success,tasks)
        }
    }
}
//// @Security ApiKeyAuth
//// @Summary 查找所有任务,包含任务信息和对应的算法信息
//// @Description 查找所有任务
//// @Produce json
//// @Tags task
//// @Success 200 {string} json "{"code":200, msg:"请求处理成功",data:"",success:true}"
//// @Failure 500 {string} json "{"code":500, msg:"请求失败",data:"",success:false}"
//// @Router /data/api-v/task/findAll [GET]
//func (tc TaskController) FindAll(c *gin.Context) {
//    // 显示所有任务: 获取信息
//    var taskApi dbapi.TaskApi
//
//    taskInfos := taskApi.FindAll()
//    var arr []protomsg.TaskSdkInfo
//    for _,ti :=range taskInfos{
//        if ti.Task.Taskid != FaceExtract_VirtualTaskId{
//            arr = append(arr,ti)
//        }
//    }
//    var tasks []TaskSdkVo
//    dataBytes, err := json.Marshal(arr)
//    if err !=nil {
//        util.ResponseFormat(c,code.ComError,[]TaskSdkVo{})
//    } else {
//        if err := json.Unmarshal(dataBytes, &tasks);err !=nil {
//            util.ResponseFormat(c,code.ComError,[]TaskSdkVo{})
//        } else {
//            util.ResponseFormat(c,code.Success,tasks)
//        }
//    }
//}
// @Security ApiKeyAuth
// @Summary 检索页面获取所有任务列表(包含已删除的任务)
@@ -80,333 +72,334 @@
// @Router /data/api-v/task/aggregateTaskList [GET]
func (tc TaskController) AggregateTaskList(c *gin.Context) {
    // 显示所有任务: 获取信息
    var taskApi dbapi.TaskApi
    taskInfos := taskApi.FindAll()
    m := make(map[string]string)
    var arr []protomsg.TaskSdkInfo
    for _,ti :=range taskInfos{
        if ti.Task.Taskid != FaceExtract_VirtualTaskId{
            arr = append(arr,ti)
            m[ti.Task.Taskid] = ti.Task.Taskid
        }
    }
    var tasks []TaskSdkVo
    dataBytes, err := json.Marshal(arr)
    if err !=nil {
        util.ResponseFormat(c,code.ComError,[]TaskSdkVo{})
    } else {
        if err := json.Unmarshal(dataBytes, &tasks);err !=nil {
            util.ResponseFormat(c,code.ComError,[]TaskSdkVo{})
        } else {
            //处理已被删除的任务
            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
                            tasks = append(tasks, TaskSdkVo{
                                Task:TaskVo{
                                    Taskid:    taskId,
                                    Taskname: tM["taskName"].(string),
                                    DelFlag: true,
                                },
                                Sdks:[]SdkVo{},
                            })
                        }
                    }
                }
            }
            util.ResponseFormat(c,code.Success,tasks)
        }
    }
    //var taskApi dbapi.TaskApi
    //
    //taskInfos := taskApi.FindAll()
    //m := make(map[string]string)
    //var arr []protomsg.TaskSdkInfo
    //for _,ti :=range taskInfos{
    //    if ti.Task.Taskid != FaceExtract_VirtualTaskId{
    //        arr = append(arr,ti)
    //        m[ti.Task.Taskid] = ti.Task.Taskid
    //    }
    //}
    //var tasks []TaskSdkVo
    //dataBytes, err := json.Marshal(arr)
    //if err !=nil {
    //    util.ResponseFormat(c,code.ComError,[]TaskSdkVo{})
    //} else {
    //    if err := json.Unmarshal(dataBytes, &tasks);err !=nil {
    //        util.ResponseFormat(c,code.ComError,[]TaskSdkVo{})
    //    } else {
    //        //处理已被删除的任务
    //        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
    //                        tasks = append(tasks, TaskSdkVo{
    //                            Task:TaskVo{
    //                                Taskid:    taskId,
    //                                Taskname: tM["taskName"].(string),
    //                                DelFlag: true,
    //                            },
    //                            Sdks:[]SdkVo{},
    //                        })
    //                    }
    //                }
    //            }
    //        }
    //
    //        util.ResponseFormat(c,code.Success,tasks)
    //    }
    //}
    util.ResponseFormat(c,code.Success,[]interface{}{})
}
// @Security ApiKeyAuth
// @Summary 添加任务
// @Description 查找所有任务
// @Accept json
// @Produce json
// @Tags task
// @Param reqMap body controllers.TaskVo false "任务AAA"
// @Success 200 {string} json "{"code":200, msg:"请求处理成功",data:"",success:true}"
// @Failure 500 {string} json "{"code":500, msg:"请求失败",data:"",success:false}"
// @Router /data/api-v/task/addTask [POST]
func (tc TaskController) AddTask(c *gin.Context) {
    var task TaskVo
    var taskApi dbapi.TaskApi
    err := c.BindJSON(&task)
    if err !=nil {
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    paramBody := util.Struct2Map(task)
    flag, data := taskApi.Add(paramBody)
    if !flag {
        util.ResponseFormat(c, code.ComError, data)
        return
    }
    util.ResponseFormat(c, code.Success, data)
}
type TaskSdkAdd struct {
    TaskId string `json:"taskId"`
    Sdks []SdkSort `json:"sdks"`
}
type SdkSort struct {
    SdkId string `json:"sdkId"`
    Sort int `json:"sort"`
}
// @Security ApiKeyAuth
// @Summary 给任务添加算法
// @Description 任务添加算法
// @Accept json
// @Produce json
// @Tags task
// @Param taskSdkAdd body controllers.TaskSdkAdd true "任务id"
// @Success 200 {string} json "{"code":200, msg:"请求处理成功",data:"",success:true}"
// @Failure 500 {string} json "{"code":500, msg:"请求失败",data:"",success:false}"
// @Router /data/api-v/task/addTaskSdk [post]
func (tc TaskController) AddTaskSdk(c *gin.Context) {
    var addVo TaskSdkAdd
    err := c.BindJSON(&addVo)
    if err !=nil || addVo.TaskId == "" || len(addVo.Sdks)==0 {
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    paramBody := util.Struct2Map(addVo)
    var taskApi dbapi.TaskApi
    flag,data := taskApi.AddTaskSdk(paramBody)
    if flag {
        util.ResponseFormat(c, code.Success, data)
    } else {
        util.ResponseFormat(c,code.ComError,data)
    }
}
// @Security ApiKeyAuth
// @Summary 任务删除算法
// @Description 根据taskid和sdkid删除
// @Produce json
// @Tags task
// @Param taskId query string true "任务id"
// @Param sdkId query string true "算法id"
// @Success 200 {string} json "{"code":200, msg:"请求处理成功",data:"",success:true}"
// @Failure 500 {string} json "{"code":500, msg:"请求失败",data:"",success:false}"
// @Router /data/api-v/task/delTaskSdk [GET]
func (tc TaskController) DeleteTaskSdk(c *gin.Context) {
    var taskApi dbapi.TaskApi
    taskId := c.Query("taskId")
    sdkId := c.Query("sdkId")
    if taskId == "" || sdkId == "" {
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    flag,data := taskApi.DeleteTaskSdk(taskId,sdkId)
    if flag {
        util.ResponseFormat(c, code.Success, data)
    } else {
        util.ResponseFormat(c,code.ComError, data)
    }
}
// @Security ApiKeyAuth
// @Summary 更新任务名称
// @Description 更新任务名称
// @Accept x-www-form-urlencoded
// @Produce json
// @Tags task
// @Param taskId formData string true "taskId"
// @Param taskName formData string true "taskName"
// @Success 200 {string} json "{"code":200, msg:"",data:"",success:true}"
// @Failure 500 {string} json "{"code":500, msg:"",data:"",success:false}"
// @Router /data/api-v/task/updateTaskName [POST]
func (tc TaskController) UpdateTaskName(c *gin.Context) {
    taskId := c.PostForm("taskId")
    taskName := c.PostForm("taskName")
    if taskId == "" || taskName == "" {
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    var api dbapi.TaskApi
    if api.UpdateTaskName(taskId, taskName) {
        util.ResponseFormat(c,code.UpdateSuccess,"更新成功")
    } else {
        util.ResponseFormat(c,code.ComError,"更新失败")
    }
}
type TaskStatusVo struct {
    TaskId string `json:"taskId"`
    Enable bool `json:"enable"`
}
// @Security ApiKeyAuth
// @Summary 更新任务状态
// @Description (算法不变,只更新任务状态)
// @Accept json
// @Produce json
// @Tags task
// @Param taskStatus body controllers.TaskStatusVo true "参数"
// @Success 200 {string} json "{"code":200, msg:"请求处理成功",data:"",success:true}"
// @Failure 500 {string} json "{"code":500, msg:"请求失败",data:"",success:false}"
// @Router /data/api-v/task/updateTaskStatus [POST]
func (tc TaskController) UpdateTaskStatus(c *gin.Context) {
    var tsvo TaskStatusVo
    err := c.BindJSON(&tsvo)
    if err !=nil {
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    var taskApi dbapi.TaskApi
    paramBody := util.Struct2Map(tsvo)
    flag, data := taskApi.UpdateTaskStatus(paramBody)
    if flag {
        util.ResponseFormat(c,code.Success,data)
    } else {
        util.ResponseFormat(c,code.ComError,data)
    }
}
// @Security ApiKeyAuth
// @Summary 删除任务
// @Description 根据任务id删除任务
// @Produce json
// @Tags task
// @Param taskId query string true "任务id"
// @Success 200 {string} json "{"code":200, msg:"请求处理成功",data:"",success:true}"
// @Failure 500 {string} json "{"code":500, msg:"请求失败",data:"",success:false}"
// @Router /data/api-v/task/delete [GET]
func (tc TaskController) DeleteTask(c *gin.Context) {
    var taskApi dbapi.TaskApi
    taskId := c.Query("taskId")
    if taskId == "" {
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    flag, data := taskApi.Delete(taskId)
    if flag {
        util.ResponseFormat(c,code.Success,data)
    } else {
        util.ResponseFormat(c,code.ComError,data)
    }
}
type TaskSdkRules struct {
    TaskId string `json:"taskId"`
    SdkId string  `json:"sdkId"`
    Rules []TaskSdkRuleVo `json:"rules"`
}
type TaskSdkRuleVo struct {
    Id string `json:"id"`
    SdkArgAlias string `json:"sdk_arg_alias"`
    Operator string `json:"operator"`
    SdkArgValue string `json:"sdk_arg_value"`
}
// @Security ApiKeyAuth
// @Summary 保存算法规则
// @Description 保存算法规则
// @Accept json
// @Produce json
// @Tags 算法规则
// @Param sdkrules body controllers.TaskSdkRules 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/task/saveTaskSdkRule [post]
func (tc TaskController) SaveTaskSdkRule(c *gin.Context) {
    var rules TaskSdkRules
    err := c.BindJSON(&rules)
    if err !=nil || rules.TaskId == "" || rules.SdkId == "" || len(rules.Rules) == 0 {
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    paramBody := util.Struct2Map(rules)
    var api dbapi.TaskSdkRuleApi
    b,d := api.SaveTaskSdkRule(paramBody)
    if b {
        util.ResponseFormat(c,code.Success,d)
    } else {
        util.ResponseFormat(c,code.ComError,"保存失败")
    }
}
// @Security ApiKeyAuth
// @Summary 删除算法规则
// @Description 删除算法规则
// @Accept x-www-form-urlencoded
// @Produce json
// @Tags 算法规则
// @Param taskId formData string true "taskId"
// @Param sdkId formData string true "sdkId"
// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
// @Router /data/api-v/task/deleteTaskSdkRule [post]
func (tc TaskController) DeleteTaskSdkRule(c *gin.Context) {
    taskId := c.PostForm("taskId")
    sdkId := c.PostForm("sdkId")
    if taskId == "" || sdkId == "" {
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    var api dbapi.TaskSdkRuleApi
    if api.DeleteTaskSdkRule(taskId, sdkId) {
        util.ResponseFormat(c,code.Success,"删除成功")
    } else {
        util.ResponseFormat(c,code.ComError, "删除失败")
    }
}
// @Security ApiKeyAuth
// @Summary 查询算法规则
// @Description 查询算法规则
// @Produce json
// @Tags 算法规则
// @Param taskId query string true "任务id"
// @Param sdkId 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/task/getRulesByTaskSdk [get]
func (tc TaskController) GetRulesByTaskSdk(c *gin.Context) {
    taskId := c.Query("taskId")
    sdkId := c.Query("sdkId")
    if taskId == "" || sdkId == ""{
        util.ResponseFormat(c,code.RequestParamError,"参数有误")
        return
    }
    var taskSdkApi dbapi.TaskSdkRuleApi
    b, d := taskSdkApi.GetRulesByTaskSdk(taskId, sdkId)
    if b {
        util.ResponseFormat(c,code.Success,d)
    } else {
        util.ResponseFormat(c,code.ComError,"查询失败")
    }
}
// @Security ApiKeyAuth
// @Summary 统计每个任务的摄像机数量
// @Description 统计每个任务的摄像机数量
// @Produce json
// @Tags task
// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
// @Router /data/api-v/task/statisticTaskCamera [get]
func (tc TaskController) StatisticTaskCamera(c *gin.Context) {
    var taskApi dbapi.TaskApi
    b,d := taskApi.StatisticTaskCamera()
    if b {
        util.ResponseFormat(c,code.Success, d)
    } else {
        util.ResponseFormat(c,code.ComError, "")
    }
}
//// @Security ApiKeyAuth
//// @Summary 添加任务
//// @Description 查找所有任务
//// @Accept json
//// @Produce json
//// @Tags task
//// @Param reqMap body controllers.TaskVo false "任务AAA"
//// @Success 200 {string} json "{"code":200, msg:"请求处理成功",data:"",success:true}"
//// @Failure 500 {string} json "{"code":500, msg:"请求失败",data:"",success:false}"
//// @Router /data/api-v/task/addTask [POST]
//func (tc TaskController) AddTask(c *gin.Context) {
//    var task TaskVo
//    var taskApi dbapi.TaskApi
//    err := c.BindJSON(&task)
//    if err !=nil {
//        util.ResponseFormat(c,code.RequestParamError,"参数有误")
//        return
//    }
//    paramBody := util.Struct2Map(task)
//    flag, data := taskApi.Add(paramBody)
//    if !flag {
//        util.ResponseFormat(c, code.ComError, data)
//        return
//    }
//
//    util.ResponseFormat(c, code.Success, data)
//}
//
//type TaskSdkAdd struct {
//    TaskId string `json:"taskId"`
//    Sdks []SdkSort `json:"sdks"`
//}
//type SdkSort struct {
//    SdkId string `json:"sdkId"`
//    Sort int `json:"sort"`
//}
//
//// @Security ApiKeyAuth
//// @Summary 给任务添加算法
//// @Description 任务添加算法
//// @Accept json
//// @Produce json
//// @Tags task
//// @Param taskSdkAdd body controllers.TaskSdkAdd true "任务id"
//// @Success 200 {string} json "{"code":200, msg:"请求处理成功",data:"",success:true}"
//// @Failure 500 {string} json "{"code":500, msg:"请求失败",data:"",success:false}"
//// @Router /data/api-v/task/addTaskSdk [post]
//func (tc TaskController) AddTaskSdk(c *gin.Context) {
//    var addVo TaskSdkAdd
//    err := c.BindJSON(&addVo)
//    if err !=nil || addVo.TaskId == "" || len(addVo.Sdks)==0 {
//        util.ResponseFormat(c,code.RequestParamError,"参数有误")
//        return
//    }
//    paramBody := util.Struct2Map(addVo)
//    var taskApi dbapi.TaskApi
//    flag,data := taskApi.AddTaskSdk(paramBody)
//    if flag {
//        util.ResponseFormat(c, code.Success, data)
//    } else {
//        util.ResponseFormat(c,code.ComError,data)
//    }
//}
//
//// @Security ApiKeyAuth
//// @Summary 任务删除算法
//// @Description 根据taskid和sdkid删除
//// @Produce json
//// @Tags task
//// @Param taskId query string true "任务id"
//// @Param sdkId query string true "算法id"
//// @Success 200 {string} json "{"code":200, msg:"请求处理成功",data:"",success:true}"
//// @Failure 500 {string} json "{"code":500, msg:"请求失败",data:"",success:false}"
//// @Router /data/api-v/task/delTaskSdk [GET]
//func (tc TaskController) DeleteTaskSdk(c *gin.Context) {
//    var taskApi dbapi.TaskApi
//    taskId := c.Query("taskId")
//    sdkId := c.Query("sdkId")
//    if taskId == "" || sdkId == "" {
//        util.ResponseFormat(c,code.RequestParamError,"参数有误")
//        return
//    }
//    flag,data := taskApi.DeleteTaskSdk(taskId,sdkId)
//    if flag {
//        util.ResponseFormat(c, code.Success, data)
//    } else {
//        util.ResponseFormat(c,code.ComError, data)
//    }
//}
//
//// @Security ApiKeyAuth
//// @Summary 更新任务名称
//// @Description 更新任务名称
//// @Accept x-www-form-urlencoded
//// @Produce json
//// @Tags task
//// @Param taskId formData string true "taskId"
//// @Param taskName formData string true "taskName"
//// @Success 200 {string} json "{"code":200, msg:"",data:"",success:true}"
//// @Failure 500 {string} json "{"code":500, msg:"",data:"",success:false}"
//// @Router /data/api-v/task/updateTaskName [POST]
//func (tc TaskController) UpdateTaskName(c *gin.Context) {
//    taskId := c.PostForm("taskId")
//    taskName := c.PostForm("taskName")
//    if taskId == "" || taskName == "" {
//        util.ResponseFormat(c,code.RequestParamError,"参数有误")
//        return
//    }
//    var api dbapi.TaskApi
//    if api.UpdateTaskName(taskId, taskName) {
//        util.ResponseFormat(c,code.UpdateSuccess,"更新成功")
//    } else {
//        util.ResponseFormat(c,code.ComError,"更新失败")
//    }
//
//}
//
//type TaskStatusVo struct {
//    TaskId string `json:"taskId"`
//    Enable bool `json:"enable"`
//}
//
//// @Security ApiKeyAuth
//// @Summary 更新任务状态
//// @Description (算法不变,只更新任务状态)
//// @Accept json
//// @Produce json
//// @Tags task
//// @Param taskStatus body controllers.TaskStatusVo true "参数"
//// @Success 200 {string} json "{"code":200, msg:"请求处理成功",data:"",success:true}"
//// @Failure 500 {string} json "{"code":500, msg:"请求失败",data:"",success:false}"
//// @Router /data/api-v/task/updateTaskStatus [POST]
//func (tc TaskController) UpdateTaskStatus(c *gin.Context) {
//    var tsvo TaskStatusVo
//    err := c.BindJSON(&tsvo)
//    if err !=nil {
//        util.ResponseFormat(c,code.RequestParamError,"参数有误")
//        return
//    }
//    var taskApi dbapi.TaskApi
//    paramBody := util.Struct2Map(tsvo)
//    flag, data := taskApi.UpdateTaskStatus(paramBody)
//    if flag {
//        util.ResponseFormat(c,code.Success,data)
//    } else {
//        util.ResponseFormat(c,code.ComError,data)
//    }
//}
//
//// @Security ApiKeyAuth
//// @Summary 删除任务
//// @Description 根据任务id删除任务
//// @Produce json
//// @Tags task
//// @Param taskId query string true "任务id"
//// @Success 200 {string} json "{"code":200, msg:"请求处理成功",data:"",success:true}"
//// @Failure 500 {string} json "{"code":500, msg:"请求失败",data:"",success:false}"
//// @Router /data/api-v/task/delete [GET]
//func (tc TaskController) DeleteTask(c *gin.Context) {
//    var taskApi dbapi.TaskApi
//    taskId := c.Query("taskId")
//    if taskId == "" {
//        util.ResponseFormat(c,code.RequestParamError,"参数有误")
//        return
//    }
//    flag, data := taskApi.Delete(taskId)
//    if flag {
//        util.ResponseFormat(c,code.Success,data)
//    } else {
//        util.ResponseFormat(c,code.ComError,data)
//    }
//
//}
//
//type TaskSdkRules struct {
//    TaskId string `json:"taskId"`
//    SdkId string  `json:"sdkId"`
//    Rules []TaskSdkRuleVo `json:"rules"`
//}
//
//type TaskSdkRuleVo struct {
//    Id string `json:"id"`
//    SdkArgAlias string `json:"sdk_arg_alias"`
//    Operator string `json:"operator"`
//    SdkArgValue string `json:"sdk_arg_value"`
//}
//
//// @Security ApiKeyAuth
//// @Summary 保存算法规则
//// @Description 保存算法规则
//// @Accept json
//// @Produce json
//// @Tags 算法规则
//// @Param sdkrules body controllers.TaskSdkRules 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/task/saveTaskSdkRule [post]
//func (tc TaskController) SaveTaskSdkRule(c *gin.Context) {
//    var rules TaskSdkRules
//    err := c.BindJSON(&rules)
//    if err !=nil || rules.TaskId == "" || rules.SdkId == "" || len(rules.Rules) == 0 {
//        util.ResponseFormat(c,code.RequestParamError,"参数有误")
//        return
//    }
//    paramBody := util.Struct2Map(rules)
//    var api dbapi.TaskSdkRuleApi
//    b,d := api.SaveTaskSdkRule(paramBody)
//    if b {
//        util.ResponseFormat(c,code.Success,d)
//    } else {
//        util.ResponseFormat(c,code.ComError,"保存失败")
//    }
//}
//
//// @Security ApiKeyAuth
//// @Summary 删除算法规则
//// @Description 删除算法规则
//// @Accept x-www-form-urlencoded
//// @Produce json
//// @Tags 算法规则
//// @Param taskId formData string true "taskId"
//// @Param sdkId formData string true "sdkId"
//// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
//// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
//// @Router /data/api-v/task/deleteTaskSdkRule [post]
//func (tc TaskController) DeleteTaskSdkRule(c *gin.Context) {
//    taskId := c.PostForm("taskId")
//    sdkId := c.PostForm("sdkId")
//    if taskId == "" || sdkId == "" {
//        util.ResponseFormat(c,code.RequestParamError,"参数有误")
//        return
//    }
//    var api dbapi.TaskSdkRuleApi
//    if api.DeleteTaskSdkRule(taskId, sdkId) {
//        util.ResponseFormat(c,code.Success,"删除成功")
//    } else {
//        util.ResponseFormat(c,code.ComError, "删除失败")
//    }
//}
//
//// @Security ApiKeyAuth
//// @Summary 查询算法规则
//// @Description 查询算法规则
//// @Produce json
//// @Tags 算法规则
//// @Param taskId query string true "任务id"
//// @Param sdkId 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/task/getRulesByTaskSdk [get]
//func (tc TaskController) GetRulesByTaskSdk(c *gin.Context) {
//    taskId := c.Query("taskId")
//    sdkId := c.Query("sdkId")
//    if taskId == "" || sdkId == ""{
//        util.ResponseFormat(c,code.RequestParamError,"参数有误")
//        return
//    }
//    var taskSdkApi dbapi.TaskSdkRuleApi
//    b, d := taskSdkApi.GetRulesByTaskSdk(taskId, sdkId)
//    if b {
//        util.ResponseFormat(c,code.Success,d)
//    } else {
//        util.ResponseFormat(c,code.ComError,"查询失败")
//    }
//}
//
//// @Security ApiKeyAuth
//// @Summary 统计每个任务的摄像机数量
//// @Description 统计每个任务的摄像机数量
//// @Produce json
//// @Tags task
//// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
//// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
//// @Router /data/api-v/task/statisticTaskCamera [get]
//func (tc TaskController) StatisticTaskCamera(c *gin.Context) {
//    var taskApi dbapi.TaskApi
//    b,d := taskApi.StatisticTaskCamera()
//    if b {
//        util.ResponseFormat(c,code.Success, d)
//    } else {
//        util.ResponseFormat(c,code.ComError, "")
//    }
//}
go.mod
@@ -3,12 +3,12 @@
go 1.12
require (
    basic.com/dbapi.git v0.0.0-20200312083548-4b84d53ed3bf
    basic.com/dbapi.git v0.0.0-20200624110237-a6e8debca64b // indirect
    basic.com/fileServer/WeedFSClient.git v0.0.0-20190919054037-0182b6c3f5cb
    basic.com/gb28181api.git v0.0.0-20191028082253-472438a8407b
    basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48
    basic.com/pubsub/esutil.git v0.0.0-20200114073900-ad9de8362777
    basic.com/pubsub/protomsg.git v0.0.0-20200605082339-fe3f28d45337
    basic.com/pubsub/protomsg.git v0.0.0-20200624085547-386ecad53ae3 // indirect
    basic.com/valib/capture.git v0.0.0-20191204103802-89c923cf2abe
    basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051
    basic.com/valib/godraw.git v0.0.0-20191122082247-26e9987cd183
go.sum
@@ -1,5 +1,5 @@
basic.com/dbapi.git v0.0.0-20200312083548-4b84d53ed3bf h1:d0h3A4bJ6oB2+rHRDA0UJ6FG1zX6HKvIhFfEZyJ7s5Y=
basic.com/dbapi.git v0.0.0-20200312083548-4b84d53ed3bf/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
basic.com/dbapi.git v0.0.0-20200624110237-a6e8debca64b h1:JspPr7IsNBBq9TrlfWZjFMWKobkhkvHC8d+MUJp8VaU=
basic.com/dbapi.git v0.0.0-20200624110237-a6e8debca64b/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
basic.com/fileServer/WeedFSClient.git v0.0.0-20190919054037-0182b6c3f5cb h1:fM6DojeInFSCFO+wkba1jtyPiSDqw0jYKi4Tk+e+ka4=
basic.com/fileServer/WeedFSClient.git v0.0.0-20190919054037-0182b6c3f5cb/go.mod h1:FTryK8BsVLfUplx8a3+l8hJWub6VbAWZCUH7sPRZaso=
basic.com/gb28181api.git v0.0.0-20191028082253-472438a8407b h1:Qh7x2PY3HA9B404Llq+olY5/YlGYrM58bpOHa2CGcro=
@@ -10,8 +10,8 @@
basic.com/pubsub/esutil.git v0.0.0-20191120125514-865efa73a9ae/go.mod h1:yIvppFPFGC61DOdm71ujnsxZBMFUu2yKjr5O43bMWCw=
basic.com/pubsub/esutil.git v0.0.0-20200114073900-ad9de8362777 h1:gTeuhepfLgOchD6bqydsGGV6KCj/UaseQQgo4DFyhGQ=
basic.com/pubsub/esutil.git v0.0.0-20200114073900-ad9de8362777/go.mod h1:yIvppFPFGC61DOdm71ujnsxZBMFUu2yKjr5O43bMWCw=
basic.com/pubsub/protomsg.git v0.0.0-20200605082339-fe3f28d45337 h1:6LTdIfHUZkfemhkuQnXXaeXRdnm4459PyxMd36AXV20=
basic.com/pubsub/protomsg.git v0.0.0-20200605082339-fe3f28d45337/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
basic.com/pubsub/protomsg.git v0.0.0-20200624085547-386ecad53ae3 h1:j9UtxEMVKvul6hS1hbb4BtPjpb4HwV/IZ76A5QVQU94=
basic.com/pubsub/protomsg.git v0.0.0-20200624085547-386ecad53ae3/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
basic.com/valib/capture.git v0.0.0-20191204103802-89c923cf2abe h1:uh3u7DuSOw6AwzvPC1EM19sw1Skks1EUJddcbHDKI9M=
basic.com/valib/capture.git v0.0.0-20191204103802-89c923cf2abe/go.mod h1:y+h7VUnoSQ3jOtf2K3twXNA8fYDfyUsifSswcyKLgNw=
basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051/go.mod h1:bkYiTUGzckyNOjAgn9rB/DOjFzwoSHJlruuWQ6hu6IY=
router/router.go
@@ -31,8 +31,8 @@
    deleteDataController := new(controllers.DeleteDataController)
    cameraTimeRuleController := new(controllers.CameraTimeruleController)
    polygonController := new(controllers.CameraPolygonController)
    cameraTaskController := new(controllers.CameraTaskController)
    cameraTaskArgsController := new(controllers.CameraTaskArgsController)
    //cameraTaskController := new(controllers.CameraTaskController)
    //cameraTaskArgsController := new(controllers.CameraTaskArgsController)
    dicController := new(controllers.DictionaryController)
    userController := new(controllers.UserController)
    eventPushController := new(controllers.EventPushController)
@@ -48,6 +48,8 @@
    icController := new(controllers.InfoController)
    gb28181C := new(controllers.Gb28181Controller)
    fStackC := new(controllers.FileStackController)
    cameraRuleController := new (controllers.CameraRuleController)
    rtc := new(controllers.RuleTemplateController)
    urlPrefix := "/data/api-v" // wp 添加 路径 前缀
@@ -110,12 +112,12 @@
        camera.POST("/updateCameraArea", cameraController.UpdateCameraArea)
        camera.GET("/updateSnapshotUrl/:cid", cameraController.UpdateSnapshotUrl)
        camera.POST("/alltask", cameraTaskController.FindTasksByCameraIds)
        camera.GET("/task/:cameraId", cameraTaskController.CameraTaskAll)
        //camera.POST("/alltask", cameraTaskController.FindTasksByCameraIds)
        //camera.GET("/task/:cameraId", cameraTaskController.CameraTaskAll)
        camera.DELETE("/delTask/:cameraId/:taskId", cameraController.CameraDelTask)
        camera.POST("/saveTask", cameraController.CameraTaskSave)
        camera.GET("/getRulesByCameraAndTask", cameraTaskArgsController.FindByCameraAndTask)
        //camera.DELETE("/delTask/:cameraId/:taskId", cameraController.CameraDelTask)
        //camera.POST("/saveTask", cameraController.CameraTaskSave)
        //camera.GET("/getRulesByCameraAndTask", cameraTaskArgsController.FindByCameraAndTask)
        camera.GET("/getCamerasByRunType", cameraController.GetCamerasByRunType)
        camera.POST("/updateRunEnable", cameraController.UpdateRunEnable)
        camera.POST("/changeRunType", cameraController.ChangeRunType)
@@ -123,26 +125,42 @@
        camera.POST("/ptzControl", ptzController.Move)
        camera.GET("/statisticRunInfo", cameraController.StatisticRunInfo)
        camera.POST("/pasteRules", cameraTaskController.PasteRules)
        //camera.POST("/pasteRules", cameraTaskController.PasteRules)
    }
    cameraTaskArgsApi := r.Group(urlPrefix + "/cameraTaskArgs")
    rtcApi := r.Group(urlPrefix + "/template")
    {
        cameraTaskArgsApi.GET("/deleteByGroup", cameraTaskArgsController.DeleteByGroup)
        cameraTaskArgsApi.POST("/getLinkRulesByCameraIds", cameraTaskArgsController.GetLinkRulesByCameraIds)
        cameraTaskArgsApi.POST("/saveLinkRulesByGroup", cameraTaskArgsController.SaveLinkRulesByGroup)
        cameraTaskArgsApi.POST("/updateDefenceStateByGroup", cameraTaskArgsController.UpdateDefenceStateByGroup)
        cameraTaskArgsApi.POST("/ruleApply2All", cameraTaskArgsController.RuleApply2All)
        rtcApi.POST("/rule/save", rtc.Save)
        rtcApi.GET("/rule/:id", rtc.Show)
        rtcApi.DELETE("/rule/:id", rtc.Delete)
        rtcApi.GET("/rule", rtc.FindAll)
    }
    cameraTaskApi := r.Group(urlPrefix + "/cameraTask")
    cameraRuleApi :=r.Group(urlPrefix+"/camera/rule")
    {
        cameraTaskApi.POST("/saveIsDataTrans", cameraTaskController.SaveIsDataTrans)
        cameraTaskApi.POST("/saveAlarmLevelByGroup", cameraTaskController.SaveAlarmLevelByGroup)
        cameraTaskApi.POST("/updateCameraTaskStatus", cameraTaskController.UpdateCameraTaskStatus)
        cameraTaskApi.POST("/addTask", cameraTaskController.AddTask)
        cameraRuleApi.GET("/:cameraId", cameraRuleController.FindByCameraId)
        cameraRuleApi.GET("/deleteByGroup",cameraRuleController.DeleteByGroup)
        cameraRuleApi.POST("/getLinkRulesByCameraIds",cameraRuleController.GetLinkRulesByCameraIds)
        cameraRuleApi.POST("/save", cameraRuleController.Save)
        cameraRuleApi.POST("/saveLinkRulesByGroup",cameraRuleController.SaveLinkRulesByGroup)
    }
    //cameraTaskArgsApi := r.Group(urlPrefix + "/cameraTaskArgs")
    //{
    //    cameraTaskArgsApi.GET("/deleteByGroup", cameraTaskArgsController.DeleteByGroup)
    //    cameraTaskArgsApi.POST("/getLinkRulesByCameraIds", cameraTaskArgsController.GetLinkRulesByCameraIds)
    //    cameraTaskArgsApi.POST("/saveLinkRulesByGroup", cameraTaskArgsController.SaveLinkRulesByGroup)
    //    cameraTaskArgsApi.POST("/updateDefenceStateByGroup", cameraTaskArgsController.UpdateDefenceStateByGroup)
    //
    //    cameraTaskArgsApi.POST("/ruleApply2All", cameraTaskArgsController.RuleApply2All)
    //}
    //cameraTaskApi := r.Group(urlPrefix + "/cameraTask")
    //{
    //    cameraTaskApi.POST("/saveIsDataTrans", cameraTaskController.SaveIsDataTrans)
    //    cameraTaskApi.POST("/saveAlarmLevelByGroup", cameraTaskController.SaveAlarmLevelByGroup)
    //    cameraTaskApi.POST("/updateCameraTaskStatus", cameraTaskController.UpdateCameraTaskStatus)
    //    cameraTaskApi.POST("/addTask", cameraTaskController.AddTask)
    //}
    polygon := r.Group(urlPrefix + "/polygon")
    {
@@ -156,19 +174,19 @@
    // 任务管理
    task := r.Group(urlPrefix + "/task")
    {
        task.GET("/findAll", taskController.FindAll)
        //task.GET("/findAll", taskController.FindAll)
        task.GET("/aggregateTaskList", taskController.AggregateTaskList)
        task.POST("/addTask", taskController.AddTask)
        task.POST("/updateTaskStatus", taskController.UpdateTaskStatus)
        task.GET("/delete", taskController.DeleteTask)
        task.POST("/addTaskSdk", taskController.AddTaskSdk)
        task.GET("/delTaskSdk", taskController.DeleteTaskSdk)
        task.POST("/updateTaskName", taskController.UpdateTaskName)
        task.GET("/getRulesByTaskSdk", taskController.GetRulesByTaskSdk)
        task.POST("/deleteTaskSdkRule", taskController.DeleteTaskSdkRule)
        task.POST("/saveTaskSdkRule", taskController.SaveTaskSdkRule)
        task.GET("/statisticTaskCamera", taskController.StatisticTaskCamera)
        //task.POST("/addTask", taskController.AddTask)
        //task.POST("/updateTaskStatus", taskController.UpdateTaskStatus)
        //task.GET("/delete", taskController.DeleteTask)
        //task.POST("/addTaskSdk", taskController.AddTaskSdk)
        //task.GET("/delTaskSdk", taskController.DeleteTaskSdk)
        //task.POST("/updateTaskName", taskController.UpdateTaskName)
        //task.GET("/getRulesByTaskSdk", taskController.GetRulesByTaskSdk)
        //task.POST("/deleteTaskSdkRule", taskController.DeleteTaskSdkRule)
        //task.POST("/saveTaskSdkRule", taskController.SaveTaskSdkRule)
        //
        //task.GET("/statisticTaskCamera", taskController.StatisticTaskCamera)
    }
    // 检索 查询 节点操作
vo/cameraRule.go
New file
@@ -0,0 +1,56 @@
package vo
//用于接收多个摄像机的id,以逗号隔开
type MultiCamera struct {
    CameraIds             []string                             `json:"cameraIds"`
}
type GroupAlarmLevelVo struct {
    GroupId                string                                 `json:"group_id" binding:"required"`
    AlarmLevel             int                                    `json:"alarm_level"`
}
type CFInfo struct {
    Id                  string                                 `json:"id"`
    Name                string                                 `json:"name"`
    RunType             int                                    `json:"run_type"`
}
type CameraSInfo struct {
    CFInfo
    RunServerName         string                                 `json:"runServerName"`
}
type CameraAndRules struct {
    CameraInfo            CameraSInfo                          `json:"cameraInfo"`
    AllGroupRules         []GroupRuleVo                         `json:"rules"`
}
type GroupRuleVo struct {
    CameraIds             []string                             `json:"cameraIds"` //左侧选中的摄像机,可以是多个
    Id                    string                              `json:"id" example:"组规则的id"`
    GroupText              string                              `json:"group_text" binding:"required"`
    AlarmLevel             int                                 `json:"alarm_level"`
    Rules                  []CameraRuleBase                     `json:"rules" binding:"required"`
    SetType                string                              `json:"set_type"`
    TemplateId             string                              `json:"template_id"`
    TimeRuleId             string                              `json:"time_rule_id"`  //时间段
    SceneName             string                                `json:"scene_name" binding:"required"` //场景名称,从模板来,修改即自定义
    Desc                 string                                 `json:"desc"` //场景描述
    Enable                 bool                                 `json:"enable"`
}
type CameraRuleBase struct {
    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"` //算法参数值设置
    Sort                 int                                    `json:"sort"`                   //排序
    RuleWithPre          string                                 `json:"rule_with_pre"` //与上一条记录的逻辑运算规则(&&,||)
    GroupId              string                                 `json:"group_id"`             //分组id
}