liuxiaolong
2020-06-24 dff98ff959934d17b8222b06e827231374be55eb
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, "")
//   }
//}