From 7c811247ecf143e08c576986a884bedadc57dd66 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期五, 05 六月 2020 18:29:41 +0800
Subject: [PATCH] add refresh token to resp

---
 controllers/camera.go |  351 ++++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 276 insertions(+), 75 deletions(-)

diff --git a/controllers/camera.go b/controllers/camera.go
index a639c28..03c36ee 100644
--- a/controllers/camera.go
+++ b/controllers/camera.go
@@ -1,43 +1,71 @@
 package controllers
 
 import (
+	"basic.com/pubsub/protomsg.git"
 	"encoding/json"
 	"fmt"
 	"strconv"
+	"basic.com/valib/logger.git"
+	"strings"
+	"webserver/cache"
 
 	"github.com/gin-gonic/gin"
 
 	"basic.com/dbapi.git"
 	"webserver/extend/code"
 	"webserver/extend/util"
+    "webserver/service"
 )
 
 type CameraController struct{}
 
 type CameraVo struct {
-	Id        string       `json:"id"`
-	Name      string       `json:"name"`
-	Type      int          `json:"type" `
-	Addr      string       `json:"addr"`
-	Areaid    uint         `json:"areaid"`
-	Longitude float64      `json:"longitude"`
-	Latitude  float64      `json:"latitude"`
-	Rtsp      string       `json:"rtsp"`
-	Ip        string       `json:"ip"`
-	Port      int          `json:"port"`
-	Username  string       `json:"username"`
-	Password  string       `json:"password"`
-	Brand     string       `json:"brand"`
-	Reserved  string       `json:"reserved"`
+	Id        string  `json:"id"`
+	Name      string  `json:"name"`
+	Alias     string  `json:"alias"` //鎽勫儚鏈虹殑鍒悕
+	Type      int     `json:"type" `
+	Addr      string  `json:"addr"`
+	Areaid    string  `json:"areaid"`
+	Longitude float32 `json:"longitude"`
+	Latitude  float32 `json:"latitude"`
+	Rtsp      string  `json:"rtsp"`
+	Ip        string  `json:"ip"`
+	Port      int     `json:"port"`
+	Username  string  `json:"username"`
+	Password  string  `json:"password"`
+	Brand     string  `json:"brand"`
+	Reserved  string  `json:"reserved"`
 
-	IsRunning bool 		   `json:"is_running"`//鏄惁姝e湪瑙g爜
-	RunEnable bool 		   `json:"run_enable"`//鎺у埗瀹炴椂澶勭悊鎴栬疆璇㈠鐞嗙殑寮�鍏�
-	RunType   int 		   `json:"run_type"`//澶勭悊绫诲瀷锛�0锛氳疆璇紝1锛氬疄鏃�
-	RunServerId string 	   `json:"run_server_id"`//褰撳墠姝e湪澶勭悊鐨勫垎鏋愭湇鍔″櫒id
+	IsRunning   bool   `json:"is_running"`    //鏄惁姝e湪瑙g爜
+	RunEnable   bool   `json:"run_enable"`    //鎺у埗瀹炴椂澶勭悊鎴栬疆璇㈠鐞嗙殑寮�鍏�
+	RunType     int    `json:"run_type"`      //澶勭悊绫诲瀷锛�0锛氳疆璇紝1锛氬疄鏃�
+	RunServerId string `json:"run_server_id"` //褰撳墠姝e湪澶勭悊鐨勫垎鏋愭湇鍔″櫒id
+
+	ResolutionWidth  int   `json:"resolution_width"`//鍒嗚鲸鐜囧
+	ResolutionHeight int   `json:"resolution_height"`//鍒嗚鲸鐜囬珮
+
+	Sensors []SensorVo `json:"sensors"` //浼犳劅鍣ㄥ垪琛�
+}
+
+type Resolution struct {
+	Width int `json:"width"`
+	Height int `json:"height"`
+}
+
+type SensorVo struct {
+	Id        string       `json:"id"`
+	Type 	  string 	   `json:"type"`
+	Ip 		  string       `json:"ip"`
+	Port 	  int 		   `json:"port"`
+	Username  string       `json:"username"`
+	Password  string 	   `json:"password"`
+	Threshold int 		   `json:"threshold"`
+	Enable 	  bool 		   `json:"enable"`
 }
 
 // @Summary 娣诲姞鎽勫儚鏈�
 // @Description  "浼犲叆鍖哄煙鐨刬d锛坅reaid锛夊拰鎽勫儚鏈哄悕瀛�(name) 蹇呴』锛� 鍏朵粬鍙傛暟鍙互鍦ㄦ憚鍍忔満閰嶇疆鐐瑰嚮淇濆瓨杩涜娣诲姞"
+// @Security ApiKeyAuth
 // @Accept json
 // @Produce json
 // @Tags camera
@@ -45,7 +73,7 @@
 // @Success 200 {string} json "{"code":200, success:true,  msg:"璇锋眰澶勭悊鎴愬姛", data:"娣诲姞鍚庣殑鎽勫儚鏈轰俊鎭�"}"
 // @Failure 500 {string} json "{"code":500, success:false   msg:"null ",data:"閿欒淇℃伅鍐呭"}"
 // @Router /data/api-v/camera/add [post]
-func (ac CameraController) CameraAdd(c *gin.Context) {
+func (cc CameraController) CameraAdd(c *gin.Context) {
 	var cam CameraVo
 	var api dbapi.CameraApi
 
@@ -54,10 +82,10 @@
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟閿欒")
 		return
 	}
-	cam.Id = util.PseudoUuid()
-	paramBody :=util.Struct2Map(cam)
-	if api.CameraAdd(paramBody) {
-		util.ResponseFormat(c, code.Success, cam)
+	paramBody := util.Struct2Map(cam)
+	b, data := api.CameraAdd(paramBody)
+	if b {
+		util.ResponseFormat(c, code.Success, data)
 		return
 	}
 	util.ResponseFormat(c, code.ComError, err)
@@ -66,6 +94,7 @@
 
 // @Summary 鏇存柊鎽勫儚鏈�
 // @Description "鐢ㄤ簬鏇存柊鎽勫儚鏈烘搷浣�"
+// @Security ApiKeyAuth
 // @Accept json
 // @Produce json
 // @Tags camera
@@ -73,17 +102,19 @@
 // @Success 200 {string} json "{"code":200, success:true,  msg:"璇锋眰澶勭悊鎴愬姛", data:"淇敼鍚庣殑鎽勫儚鏈轰俊鎭�"}"
 // @Failure 500 {string} json "{"code":500, success:false   msg:"null",data:"閿欒淇℃伅鍐呭"}"
 // @Router /data/api-v/camera/update [put]
-func (ac CameraController) CameraUpdate(c *gin.Context) {
+func (cc CameraController) CameraUpdate(c *gin.Context) {
 	var cam CameraVo
 	var api dbapi.CameraApi
 
 	err := c.BindJSON(&cam)
 	if err != nil {
+		logger.Debug("err:",err)
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟閿欒")
 		return
 	}
-	paramBody :=util.Struct2Map(cam)
-	if api.CameraAdd(paramBody) {
+	logger.Debug("camera sensors:", cam.Sensors)
+	paramBody := util.Struct2Map(cam)
+	if api.CameraUpdate(paramBody) {
 		util.ResponseFormat(c, code.Success, cam)
 		return
 	}
@@ -93,41 +124,86 @@
 
 // @Summary "鍒犻櫎鎽勫儚鏈�"
 // @Description "鏍规嵁鎽勫儚鏈篿d鍒犻櫎鎽勫儚鏈�"
+// @Security ApiKeyAuth
 // @Produce json
 // @Tags camera
 // @Param cid path string true "鎽勫儚鏈篿d example: cid0"
 // @Success 200 {string} json "{"code":200, success:true,  msg:"璇锋眰澶勭悊鎴愬姛", data:"鍒犻櫎鎴愬姛"}"
 // @Failure 500 {string} json "{"code":500, success:false   msg:"",data:"閿欒淇℃伅鍐呭"}"
 // @Router /data/api-v/camera/del/{cid} [delete]
-func (ac CameraController) CameraDel(c *gin.Context) {
+func (cc CameraController) CameraDel(c *gin.Context) {
 	var api dbapi.CameraApi
 	cid := c.Param("cid")
-
-	if api.CameraDelete(cid){
+	logger.Debug("CameraDel.cid:",cid)
+	if api.CameraDelete(cid) {
 		util.ResponseFormat(c, code.Success, "鍒犻櫎鎴愬姛")
 		return
 	}
-	util.ResponseFormat(c, code.ComError,"鍒犻櫎澶辫触")
+	util.ResponseFormat(c, code.ComError, "鍒犻櫎澶辫触")
 }
 
 // @Summary 鏄剧ず鎽勫儚鏈�
 // @Description "鏄剧ず鎽勫儚鏈�"
+// @Security ApiKeyAuth
 // @Produce json
 // @Tags camera
 // @Param cid path string true "鎽勫儚鏈篿d"
-// @Success 200 {string} json "{"code":200, success:true,  msg:"璇锋眰澶勭悊鎴愬姛", data:"鎽勫儚鏈轰俊鎭�"}"
-// @Failure 500 {string} json "{"code":500, success:false   msg:"",data:"閿欒淇℃伅鍐呭"}"
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
 // @Router /data/api-v/camera/show/{cid} [get]
-func (ac CameraController) CameraSel(c *gin.Context) {
+func (cc CameraController) CameraSel(c *gin.Context) {
 	var api dbapi.CameraApi
 	cid := c.Param("cid")
-	camera,err := api.GetCameraById(cid)
-	if err !=nil {
-		util.ResponseFormat(c,code.ComError,"鏌ヨ澶辫触")
+	camera, err := api.GetCameraById(cid)
+	if err != nil {
+		util.ResponseFormat(c, code.ComError, "鏌ヨ澶辫触")
 		return
 	}
-
-	util.ResponseFormat(c, code.Success, camera)
+	//2019-11-02鏂板闇�姹傦紝鏄剧ず姣忎釜鎽勫儚鏈虹殑澶勭悊鏈嶅姟鍣ㄤ俊鎭�,褰掑睘鐨勮妭鐐规湇鍔″櫒鍚嶇О
+	m := util.Struct2Map(camera)
+	m["runServerName"] = ""
+	m["resolution_width"] = camera.ResolutionWidth
+	m["resolution_height"] = camera.ResolutionHeight
+	//鎽勫儚鏈哄垎杈ㄧ巼
+	dRe0 := Resolution{
+		Width: 0,
+		Height: 0,
+	}
+	dRe1 := Resolution{
+		Width: 1920,
+		Height: 1080,
+	}
+	dRe2 := Resolution{
+		Width: 2688,
+		Height: 1520,
+	}
+	m["resolutions"] = []Resolution{ dRe0, dRe1, dRe2 }
+	if camera.RunServerId !="" {
+		localConf, e := cache.GetServerInfo()
+		if e ==nil {
+			if camera.RunServerId == localConf.ServerId {//褰掑睘鏈彴鏈嶅姟鍣�
+				m["runServerName"] = localConf.ServerName
+			} else {//灞炰簬鍏朵粬鏈嶅姟鍣�
+				var clusterApi dbapi.ClusterApi
+				b, data := clusterApi.FindCluster()
+				if b && data !=nil {
+					cb, _ := json.Marshal(data)
+					var clu ClusterDb
+					if err := json.Unmarshal(cb, &clu);err ==nil {
+						if len(clu.Nodes) >0 {
+							for _,n :=range clu.Nodes {
+								if camera.RunServerId == n.NodeId {
+									m["runServerName"] = n.NodeName
+									break
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+	util.ResponseFormat(c, code.Success, m)
 
 }
 
@@ -162,22 +238,33 @@
 	return json.Marshal(test)
 }
 
+// @Security ApiKeyAuth
 // @Summary 灏嗘憚鍍忔満鎸傚埌鎸囧畾鐨勭洰褰曟爲涓�
 // @Description 灏嗘憚鍍忔満鎸傚埌鎸囧畾鐨勭洰褰曟爲涓�
+// @Accept x-www-form-urlencoded
 // @Produce json
 // @Tags camera
-// @Param cameraId path string true "鎽勫儚鏈篿d"
-// @Param areaId path string true "鐩綍鍖哄煙id"
+// @Param cameraId formData string true "鎽勫儚鏈篿d"
+// @Param areaId formData string true "鐩綍鍖哄煙id"
 // @Success 200 {string} json "{"code":200, success:true, msg:"璇锋眰澶勭悊鎴愬姛", data:""}"
 // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:"閿欒淇℃伅鍐呭"}"
-// @Router /data/api-v/camera/cameraAreaAdd [get]
-func (ac CameraController) CameraAreaAdd(c *gin.Context) {
-	cameraId := c.Param("cameraId")
-	areaId := c.Param("areaId")
-	fmt.Println(cameraId)
-	fmt.Println(areaId)
+// @Router /data/api-v/camera/updateCameraArea [post]
+func (cc CameraController) UpdateCameraArea(c *gin.Context) {
+	cameraId := c.PostForm("cameraId")
+	areaId := c.PostForm("areaId")
+    if cameraId == "" || areaId == "" {
+        util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
+        return
+    }
+    var api dbapi.CameraApi
+    if api.UpdateCameraArea(cameraId, areaId) {
+        util.ResponseFormat(c,code.Success,"鏇存柊鎴愬姛")
+    } else {
+        util.ResponseFormat(c,code.ComError,"")
+    }
 }
 
+// @Security ApiKeyAuth
 // @Summary 鍒犻櫎鏌愪竴涓洰褰曟爲涓嬬殑鎸囧畾鎽勫儚鏈�
 // @Description 鍒犻櫎鏌愪竴涓洰褰曟爲涓嬬殑鎸囧畾鎽勫儚鏈�
 // @Produce json
@@ -187,13 +274,40 @@
 // @Success 200 {string} json "{"code":200, success:true, msg:"璇锋眰澶勭悊鎴愬姛", data:""}"
 // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:"閿欒淇℃伅鍐呭"}"
 // @Router /data/api-v/camera/cameraAreaDel [get]
-func (ac CameraController) CameraAreaDel(c *gin.Context) {
+func (cc CameraController) CameraAreaDel(c *gin.Context) {
 	cameraId := c.Param("cameraId")
 	areaId := c.Param("areaId")
 	fmt.Println(cameraId)
 	fmt.Println(areaId)
 }
 
+// @Security ApiKeyAuth
+// @Summary 鏍规嵁server鑾峰彇鎵�鏈夋憚鍍忔満鍒楄〃鍙婁俊鎭�
+// @Description 鏍规嵁server鑾峰彇鎵�鏈夋憚鍍忔満鍒楄〃鍙婁俊鎭�
+// @Produce json
+// @Tags camera
+// @Param cameraName query string false "鎽勫儚鏈哄悕绉�"
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
+// @Router /data/api-v/camera/getAllCamerasByServer [get]
+func (cc CameraController) GetAllCamerasByServer(c *gin.Context) {
+	localConf, err2 := cache.GetServerInfo()
+	if err2 !=nil || localConf.ServerId == "" {
+		logger.Debug("localConfig is wrong!!!")
+		util.ResponseFormat(c,code.ComError,"鏈嶅姟鍣ㄦ湰鏈烘湭閰嶇疆serverId")
+		return
+	}
+	var api dbapi.CameraApi
+	cameraName := c.Query("cameraName")
+	b,d := api.GetAllCamerasByServer(localConf.ServerId, cameraName)
+	if b {
+		util.ResponseFormat(c,code.Success, d)
+	} else {
+		util.ResponseFormat(c,code.ComError, "")
+	}
+}
+
+// @Security ApiKeyAuth
 // @Summary 鑾峰彇杩愯绫诲瀷鑾峰彇鎽勫儚鏈哄垪琛�
 // @Description 鑾峰彇杩愯绫诲瀷鑾峰彇鎽勫儚鏈哄垪琛�
 // @Produce json
@@ -207,76 +321,163 @@
 
 	runTypeStr := c.Query("runType")
 	cameraName := c.Query("cameraName")
-	fmt.Println("runType:",runTypeStr)
-	fmt.Println("cameraName:",cameraName)
+	fmt.Println("runType:", runTypeStr)
+	fmt.Println("cameraName:", cameraName)
 	runType, err := strconv.Atoi(runTypeStr)
-	if err !=nil || (runType !=0 && runType !=1) {
-		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+	if err != nil || (runType != 0 && runType != 1) {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
 		return
 	}
 	var api dbapi.CameraApi
-	b,list := api.GetCamerasByRunType(runType)
+	b, list := api.GetCamerasByRunType(runType, cameraName)
 	if b {
 		dataBytes, _ := json.Marshal(list)
 		var cams []CameraVo
 		json.Unmarshal(dataBytes, &cams)
-		util.ResponseFormat(c,code.Success,cams)
+		util.ResponseFormat(c, code.Success, cams)
 	} else {
-		util.ResponseFormat(c,code.ComError,err)
+		util.ResponseFormat(c, code.ComError, err)
 	}
 }
 
+// @Security ApiKeyAuth
 // @Summary 鍒囨崲鎽勫儚鏈鸿繍琛屽疄鏃舵垨杞鐨勫紑鍏�
 // @Description 鍒囨崲鎽勫儚鏈鸿繍琛屽疄鏃舵垨杞鐨勫紑鍏�
+// @Accept x-www-form-urlencoded
 // @Produce json
 // @Tags camera
-// @Param cameraId query string true "鎽勫儚鏈篿d"
-// @Param runEnable query bool true "寮�鍚細true锛屽叧闂細false"
+// @Param cameraId formData string true "鎽勫儚鏈篿d"
+// @Param runEnable formData bool true "寮�鍚細true锛屽叧闂細false"
 // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
 // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
 // @Router /data/api-v/camera/updateRunEnable [post]
-func (cc CameraController) UpdateRunEnable(c *gin.Context){
+func (cc CameraController) UpdateRunEnable(c *gin.Context) {
 	cameraId := c.PostForm("cameraId")
 	enableStr := c.PostForm("runEnable")
 	runEnable, err := strconv.ParseBool(enableStr)
-	if cameraId == "" || err !=nil {
-		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+	if cameraId == "" || err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
 		return
 	}
 
 	var api dbapi.CameraApi
 	b, data := api.UpdateRunEnable(cameraId, runEnable)
-	fmt.Println("data:",data)
+	fmt.Println("data:", data)
 	if b {
-		util.ResponseFormat(c,code.Success,data)
+		util.ResponseFormat(c, code.Success, data)
 	} else {
-		util.ResponseFormat(c,code.ComError,"鏇存柊澶辫触")
+		util.ResponseFormat(c, code.ComError, "鏇存柊澶辫触")
 	}
 }
 
+// @Security ApiKeyAuth
+// @Summary  鏇存柊搴曞浘
+// @Description 鍒锋柊搴曞浘
+// @Produce json
+// @Tags camera
+// @Param cid path string true "鎽勫儚鏈篿d"
+// @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/updateSnapshotUrl/{cid} [get]
+func(cc CameraController) UpdateSnapshotUrl(c *gin.Context){
+    cid := c.Param("cid")
+    //filename, err := service.UpdateSnapshotUrl(cid)
+    if cid == "" {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
+		return
+	}
+    if strings.HasPrefix(cid, File_Video_Id_Pre) || strings.HasPrefix(cid, File_Img_Id_Pre) || strings.HasPrefix(cid, File_Audio_Id_Pre) {
+		var fileApi dbapi.FileAnalysisApi
+		b, d := fileApi.Show(cid)
+		if b {
+			var file protomsg.FileAnalysis
+			bytes, _ := json.Marshal(d)
+			err := json.Unmarshal(bytes, &file)
+			if err == nil {
+				util.ResponseFormat(c, code.Success, map[string]string{
+					"cameraId": cid,
+					"snapshotUrl": file.SnapshotUrl,
+				})
+				return
+			} else {
+				util.ResponseFormat(c, code.ComError, "鏇存柊澶辫触")
+				return
+			}
+		} else {
+			util.ResponseFormat(c, code.ComError, "鏇存柊澶辫触")
+			return
+		}
+	}
+	filename, err := service.UpdateCapture(cid)
+    if err != nil {
+    	logger.Debug("UpdateSnapshotUrl.err:",err)
+		util.ResponseFormat(c, code.ComError, "鏇存柊澶辫触")
+        return 
+    }
+    util.ResponseFormat(c, code.Success, map[string]string{
+    	"cameraId": cid,
+    	"snapshotUrl": filename,
+	})
+} 
+
+type CameraChangeRunVo struct {
+	CameraIds []string `json:"camera_ids"`
+	RunType   int      `json:"run_type"`
+}
+
+// @Security ApiKeyAuth
 // @Summary 鎽勫儚鏈鸿疆璇㈠拰瀹炴椂鐘舵�佸垏鎹�
 // @Description 鎽勫儚鏈鸿疆璇㈠拰瀹炴椂鐘舵�佸垏鎹�
 // @Produce json
 // @Tags camera
-// @Param cameraId query string true "鎽勫儚鏈篿d"
-// @Param runType query int true "0锛氬疄鏃跺垏杞锛�1锛氳疆璇㈠垏瀹炴椂"
+// @Param changeRunBody body controllers.CameraChangeRunVo true "鍙傛暟缁撴瀯浣�,0锛氬疄鏃跺垏杞锛�1锛氳疆璇㈠垏瀹炴椂"
 // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
 // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
 // @Router /data/api-v/camera/changeRunType [post]
-func (cc CameraController) ChangeRunType(c *gin.Context){
-	cameraId := c.PostForm("cameraId")
-	runTypeStr := c.PostForm("runType")
-	runType,err := strconv.Atoi(runTypeStr)
-	if cameraId == "" || err!=nil || (runType !=0 && runType !=1){
-		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+func (cc CameraController) ChangeRunType(c *gin.Context) {
+	var ccrVo CameraChangeRunVo
+	if err := c.BindJSON(&ccrVo); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
 		return
 	}
-
+	paramBody := util.Struct2Map(ccrVo)
 	var api dbapi.CameraApi
-	b, data := api.ChangeRunType(cameraId, runType)
+	b, data := api.ChangeRunType(paramBody)
 	if b {
-		util.ResponseFormat(c,code.Success,data)
+		util.ResponseFormat(c, code.Success, data)
 	} else {
-		util.ResponseFormat(c,code.ComError,"鏇存柊澶辫触")
+		util.ResponseFormat(c, code.ComError, "鏇存柊澶辫触")
 	}
-}
\ No newline at end of file
+}
+
+// @Security ApiKeyAuth
+// @Summary 缁熻瀹炴椂鍜岃疆璇㈢殑杩愯璺暟鎯呭喌
+// @Description 缁熻瀹炴椂鍜岃疆璇㈢殑杩愯璺暟鎯呭喌
+// @Produce json
+// @Tags camera
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
+// @Router /data/api-v/camera/statisticRunInfo [get]
+func (cc CameraController) StatisticRunInfo(c *gin.Context) {
+	var api dbapi.CameraApi
+	b, d := api.StatisticRunInfo()
+	if b {
+		util.ResponseFormat(c,code.Success,d)
+	} else {
+		util.ResponseFormat(c,code.ComError,"")
+	}
+}
+
+/*
+// @Security ApiKeyAuth
+// @Summary 鑾峰彇鎽勫儚鏈哄垎杈ㄧ巼
+// @Description 鑾峰彇鍒嗚鲸鐜�
+// @Produce json
+// @Tags camera
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
+// @Router /data/api-v/camera/resolution/{cid} [get]
+func (cc CameraController) Resolution(c *gin.Context) {
+
+}
+*/

--
Gitblit v1.8.0