From cb707715e4648719a5ab083f0623620079b20f2a Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期四, 20 六月 2019 16:23:42 +0800
Subject: [PATCH] task rules set complete

---
 controllers/user.go           |   40 ++++++
 middlewares/auth/auth.go      |   45 +++++++
 controllers/cameraTask.go     |   79 ++++++++++--
 controllers/cameraTimerule.go |    2 
 controllers/cameraTaskArgs.go |    9 
 main.go                       |    1 
 controllers/task.go           |   20 +++
 controllers/sdk.go            |    4 
 middlewares/auth/jwt.go       |  107 +++++++++++++++++
 router/router.go              |   23 ++-
 10 files changed, 297 insertions(+), 33 deletions(-)

diff --git a/controllers/cameraTask.go b/controllers/cameraTask.go
index 7417413..4066ceb 100644
--- a/controllers/cameraTask.go
+++ b/controllers/cameraTask.go
@@ -2,10 +2,10 @@
 
 import (
 	"basic.com/dbapi.git"
-	"webserver/extend/code"
-	"webserver/extend/util"
 	"fmt"
 	"github.com/gin-gonic/gin"
+	"webserver/extend/code"
+	"webserver/extend/util"
 	"webserver/models"
 )
 
@@ -173,37 +173,88 @@
 	}
 }
 
-type TransAndAlarmLevelVo struct {
+type DataTransVo struct {
 	CameraIds []string `json:"camera_ids"`
 	TaskId string `json:"task_id"`
 	IsDataTrans int `json:"is_data_trans"`
-	GroupLevels []GroupAlarmLevelVo `json:"group_levels"`
 }
 type GroupAlarmLevelVo struct {
 	GroupId string `json:"group_id"`
 	AlarmLevel int `json:"alarm_level"`
 }
 
-// @Summary 淇濆瓨浠诲姟鏄惁涓嬩紶鏁版嵁浠ュ強缁勬姤璀︾瓑绾�
-// @Description 淇濆瓨浠诲姟鏄惁涓嬩紶鏁版嵁浠ュ強缁勬姤璀︾瓑绾�
+// @Summary 淇濆瓨浠诲姟鏄惁涓嬩紶鏁版嵁
+// @Description 淇濆瓨浠诲姟鏄惁涓嬩紶鏁版嵁
 // @Accept json
 // @Produce json
 // @Tags CameraTask
-// @Param TransAndAlarmLevel body controllers.TransAndAlarmLevelVo true "璇锋眰鍙傛暟缁撴瀯"
+// @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/saveTransAndAlarmLevel [post]
-func (controller CameraTaskController) SaveTransAndAlarmLevel(c *gin.Context) {
-	var vo TransAndAlarmLevelVo
-	if err := c.BindJSON(&vo);err!=nil {
+// @Router /data/api-v/cameraTask/saveIsDataTrans [post]
+func (controller CameraTaskController) SaveIsDataTrans(c *gin.Context) {
+	var transVo DataTransVo
+	if err := c.BindJSON(&transVo);err!=nil {
 		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
 		return
 	}
-	fmt.Println("SaveTransAndAlarmLevel.vo:",vo)
 	var api dbapi.CameraTaskApi
-	paramBody := util.Struct2Map(vo)
+	paramBody := util.Struct2Map(transVo)
 
-	flag ,data := api.SaveTransAndAlarmLevel(paramBody)
+	flag ,data := api.SaveIsDataTrans(paramBody)
+	if flag {
+		util.ResponseFormat(c,code.Success,data)
+	} else {
+		util.ResponseFormat(c,code.ComError,data)
+	}
+}
+
+// @Summary 淇濆瓨瑙勫垯缁勬姤璀︾瓑绾�
+// @Description 淇濆瓨瑙勫垯缁勬姤璀︾瓑绾�
+// @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 (controller 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"`
+}
+
+// @Summary 鏇存柊浠诲姟鐘舵��
+// @Description 鏇存柊浠诲姟鐘舵��
+// @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 (controller 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 {
 		util.ResponseFormat(c,code.Success,data)
 	} else {
diff --git a/controllers/cameraTaskArgs.go b/controllers/cameraTaskArgs.go
index 5ccf893..8d6f33f 100644
--- a/controllers/cameraTaskArgs.go
+++ b/controllers/cameraTaskArgs.go
@@ -48,15 +48,16 @@
 // @Param cameraIds body controllers.MultiCamera true "鎽勫儚鏈篿ds"
 // @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 [get]
+// @Router /data/api-v/cameraTaskArgs/getLinkRulesByCameraIds [post]
 func (controller CameraTaskArgsController) GetLinkRulesByCameraIds(c *gin.Context) {
-	var cameraIds MultiCamera
-	if err := c.BindJSON(&cameraIds);err !=nil {
+	var cameraIdsVo MultiCamera
+	if err := c.BindJSON(&cameraIdsVo);err !=nil {
 		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
 		return
 	}
 	var api dbapi.CameraTaskArgsApi
-	flag,data := api.GetLinkRulesByCameraIds()
+	paramBody := util.Struct2Map(cameraIdsVo)
+	flag,data := api.GetLinkRulesByCameraIds(paramBody)
 	if flag {
 		util.ResponseFormat(c,code.Success,data)
 	} else {
diff --git a/controllers/cameraTimerule.go b/controllers/cameraTimerule.go
index 7450959..a4a249e 100644
--- a/controllers/cameraTimerule.go
+++ b/controllers/cameraTimerule.go
@@ -51,7 +51,7 @@
 	paramBody["id"] = vo.Id
 	paramBody["name"] = vo.Name
 	paramBody["time_rule"] = vo.TimeRule
-	fmt.Println("paramBody: ", paramBody)
+
 	var api dbapi.CameraApi
 	flag, data := api.SaveCameraTimerule(paramBody)
 	if flag {
diff --git a/controllers/sdk.go b/controllers/sdk.go
index cbd1ebb..820278d 100644
--- a/controllers/sdk.go
+++ b/controllers/sdk.go
@@ -20,8 +20,8 @@
 	CreateTime string `json:"create_time"`
 	CreateBy string `json:"create_by"`
 	UpdateTime string `json:"update_time"`
-	Enabled int `json:"enabled"`//鏄惁鍚敤
-	DelFlag int `json:"del_flag"`//閫昏緫鍒犻櫎
+	Enable bool `json:"enable"`//鏄惁鍚敤
+	DelFlag bool `json:"del_flag"`//閫昏緫鍒犻櫎
 }
 
 //绠楁硶鍙傛暟瀹氫箟
diff --git a/controllers/task.go b/controllers/task.go
index 07420dc..b76c7b5 100644
--- a/controllers/task.go
+++ b/controllers/task.go
@@ -2,11 +2,12 @@
 
 import (
 	"basic.com/dbapi.git"
+	"encoding/json"
 	"time"
 
+	"github.com/gin-gonic/gin"
 	"webserver/extend/code"
 	"webserver/extend/util"
-	"github.com/gin-gonic/gin"
 )
 
 type TaskController struct{}
@@ -22,6 +23,11 @@
 	DelFlag  bool `json:"del_flag"`
 }
 
+type TaskSdkVo struct {
+	Task TaskVo `json:"task"`
+	Sdks []SdkVo `json:"sdks"`
+}
+
 // @Summary 鏌ユ壘鎵�鏈変换鍔★紝鍖呭惈浠诲姟淇℃伅鍜屽搴旂殑绠楁硶淇℃伅
 // @Description 鏌ユ壘鎵�鏈変换鍔�
 // @Produce json
@@ -34,7 +40,17 @@
 	var taskApi dbapi.TaskApi
 
 	taskInfos := taskApi.FindAll()
-	util.ResponseFormat(c, code.Success, taskInfos)
+	var tasks []TaskSdkVo
+	dataBytes, err := json.Marshal(taskInfos)
+	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)
+		}
+	}
 }
 
 // @Summary 娣诲姞浠诲姟
diff --git a/controllers/user.go b/controllers/user.go
index e212688..a406775 100644
--- a/controllers/user.go
+++ b/controllers/user.go
@@ -1,9 +1,47 @@
 package controllers
 
 import (
+	"basic.com/dbapi.git"
 	"github.com/gin-gonic/gin"
+	"webserver/extend/code"
+	"webserver/extend/util"
+	"webserver/middlewares/auth"
 )
 
-func Login(c *gin.Context) {
+type UserController struct {
 
+}
+
+type UserVo struct {
+	UserName string `json:"username"`
+	Password string `json:"password"`
+}
+
+// @Summary 鐢ㄦ埛鐧诲綍
+// @Description 鐢ㄦ埛鐧诲綍
+// @Accept json
+// @Produce json
+// @Tags 鐢ㄦ埛
+// @Param user body UserVo 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/user/login [post]
+func (controller UserController) Login(c *gin.Context) {
+	var userVo UserVo
+	if err := c.BindJSON(&userVo);err !=nil {
+		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+		return
+	}
+	var api dbapi.UserApi
+	flag, userInfo := api.Login(userVo.UserName, userVo.Password)
+	if flag {
+		authDriver := auth.GenerateAuthDriver()
+		tokenStr := (*authDriver).Login(c.Request, c.Writer, util.Struct2Map(userInfo))
+		util.ResponseFormat(c,code.Success,map[string]interface{}{
+			"userInfo":userInfo,
+			"token":tokenStr,
+		})
+	} else {
+		util.ResponseFormat(c,code.SigninInfoError,"鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒")
+	}
 }
\ No newline at end of file
diff --git a/main.go b/main.go
index 0f66a94..14eb75e 100644
--- a/main.go
+++ b/main.go
@@ -20,6 +20,7 @@
 	config.Init(*envirment)
 	models.Init()
 	r := router.NewRouter()
+
 	r.Run("0.0.0.0:8000")
 
 	defer models.CloseDB()
diff --git a/middlewares/auth/auth.go b/middlewares/auth/auth.go
index 8832b06..449ae51 100644
--- a/middlewares/auth/auth.go
+++ b/middlewares/auth/auth.go
@@ -1 +1,46 @@
 package auth
+
+import (
+	"github.com/gin-gonic/gin"
+	"net/http"
+	"strings"
+	"webserver/extend/code"
+	"webserver/extend/util"
+)
+
+const (
+	TokenKey = "abc123456789"
+)
+
+type Auth interface {
+	Check(c *gin.Context)bool
+	User(c *gin.Context)interface{}
+	Login(http *http.Request,w http.ResponseWriter,user map[string]interface{})interface{}
+	Logout(http *http.Request,w http.ResponseWriter) bool
+}
+
+func GenerateAuthDriver() *Auth {
+	var authDriver Auth
+	authDriver = NewJwtAuthDriver()
+	return &authDriver
+}
+
+func AuthHandler() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		urlPath := c.Request.URL.Path
+		if strings.Contains(urlPath,"/data/api-v") && !strings.Contains(urlPath,"login"){
+			jwtDriver :=NewJwtAuthDriver()
+			if !jwtDriver.Check(c) {
+				util.ResponseFormat(c,code.TokenNotFound,"灏氭湭鐧诲綍锛岃鐧诲綍")
+				c.Abort()
+			}
+			c.Next()
+		} else {
+			c.Next()
+		}
+	}
+}
+
+func GetCurUser(c *gin.Context)map[string]interface{}{
+	return (*GenerateAuthDriver()).User(c).(map[string]interface{})
+}
\ No newline at end of file
diff --git a/middlewares/auth/jwt.go b/middlewares/auth/jwt.go
index 8832b06..c7074e2 100644
--- a/middlewares/auth/jwt.go
+++ b/middlewares/auth/jwt.go
@@ -1 +1,108 @@
 package auth
+
+import (
+	"encoding/json"
+	"errors"
+	jwtLib "github.com/dgrijalva/jwt-go"
+	"github.com/dgrijalva/jwt-go/request"
+	"github.com/gin-gonic/gin"
+	"net/http"
+	"strings"
+	"time"
+)
+
+type jwtAuthManager struct {
+	secret string
+	expire time.Duration
+	alg string
+}
+
+func NewJwtAuthDriver() *jwtAuthManager{
+	return &jwtAuthManager{
+		secret:TokenKey,
+		expire:time.Hour*8,
+		alg:"HS256",
+	}
+}
+
+func (jwtAuth *jwtAuthManager) Check(c *gin.Context) bool {
+	token := c.Request.Header.Get("Authorization")
+	b := "Bearer "
+	if !strings.Contains(token, b) {
+		return false
+	}
+	t := strings.Split(token, b)
+	if len(t) < 2 {
+		return false
+	}
+	var keyFunc = func(token *jwtLib.Token) (interface{},error) {
+		b := []byte(jwtAuth.secret)
+		return b,nil
+	}
+	authJwtToken, err:= request.ParseFromRequest(c.Request,request.OAuth2Extractor,keyFunc)
+	if err !=nil {
+		return false
+	}
+
+	c.Set("User",map[string]interface{}{
+		"token":authJwtToken,
+	})
+
+	return authJwtToken.Valid
+}
+
+func (jwtAuth *jwtAuthManager) User(c *gin.Context) interface{}{
+	var jwtToken *jwtLib.Token
+	if jwtUser, exist := c.Get("User");!exist{
+		tokenStr :=strings.Replace(c.Request.Header.Get("Authorization"),"Bearer ","",-1)
+		if tokenStr == ""{
+			return map[interface{}]interface{}{}
+		}
+		var err error
+		jwtToken,err = jwtLib.Parse(tokenStr, func(token *jwtLib.Token) (interface{}, error) {
+			b :=[]byte(jwtAuth.secret)
+			return b,nil
+		})
+		if err !=nil {
+			panic(err)
+		}
+	} else {
+		jwtToken = jwtUser.(map[string]interface{})["token"].(*jwtLib.Token)
+	}
+	if claims,ok :=jwtToken.Claims.(jwtLib.MapClaims);ok && jwtToken.Valid{
+		var user map[string]interface{}
+		if err := json.Unmarshal([]byte(claims["user"].(string)), &user); err != nil {
+			panic(err)
+		}
+		c.Set("User", map[string]interface{}{
+			"token": jwtToken,
+			"user":  user,
+		})
+		return user
+	} else {
+		panic(errors.New("decode jwt user claims fail"))
+	}
+}
+
+func (jwtAuth *jwtAuthManager) Login(http *http.Request, w http.ResponseWriter, user map[string]interface{}) interface{} {
+
+	token := jwtLib.New(jwtLib.GetSigningMethod(jwtAuth.alg))
+
+	userStr, err := json.Marshal(user)
+	token.Claims = jwtLib.MapClaims{
+		"user": string(userStr),
+		"exp":  time.Now().Add(jwtAuth.expire).Unix(),
+	}
+
+	tokenString, err := token.SignedString([]byte(jwtAuth.secret))
+	if err != nil {
+		return nil
+	}
+
+	return tokenString
+}
+
+func (jwtAuth *jwtAuthManager) Logout(http *http.Request, w http.ResponseWriter) bool {
+
+	return true
+}
diff --git a/router/router.go b/router/router.go
index b29bb37..cabb1e3 100644
--- a/router/router.go
+++ b/router/router.go
@@ -1,17 +1,19 @@
 package router
 
 import (
-	"webserver/controllers"
 	"github.com/gin-gonic/gin"
 	"github.com/swaggo/gin-swagger"
 	"github.com/swaggo/gin-swagger/swaggerFiles"
 	"github.com/szuecs/gin-glog"
 	"time"
+	"webserver/controllers"
 )
 
 func NewRouter() *gin.Engine {
 	r := gin.Default()
 	r.Use(ginglog.Logger(3 * time.Second))
+
+	//r.Use(auth.AuthHandler())//auth杩囨护鍣�
 
 	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
 
@@ -29,11 +31,13 @@
 	cameraTaskController :=new(controllers.CameraTaskController)
 	cameraTaskArgsController :=new(controllers.CameraTaskArgsController)
 	dicController :=new(controllers.DictionaryController)
+	userController :=new(controllers.UserController)
 
 	urlPrefix := "/data/api-v" // wp 娣诲姞 璺緞 鍓嶇紑
-
-	r.POST("/signup", controllers.Signup)
-	r.POST("/signin", controllers.Login)
+	userApi :=r.Group(urlPrefix+"/user")
+	{
+		userApi.POST("/login",userController.Login)
+	}
 
 	//鍖哄煙绠$悊
 	area := r.Group(urlPrefix + "/area")
@@ -56,8 +60,7 @@
 		camera.POST("/alltask", cameraTaskController.FindTasksByCameraIds)
 		camera.GET("/task/:cameraId", cameraTaskController.CameraTaskAll)
 
-		camera.GET("/delTask/:cid", cameraController.CameraDelTask)
-		camera.DELETE("/task/del/:cid/:tid", cameraController.CameraDelTask)
+		camera.GET("/delTask/:cameraId/:taskId", cameraController.CameraDelTask)
 		camera.POST("/saveTask", cameraController.CameraTaskSave)
 		camera.GET("/getRulesByCameraAndTask",cameraTaskArgsController.FindByCameraAndTask)
 	}
@@ -65,13 +68,15 @@
 	cameraTaskArgsApi :=r.Group(urlPrefix + "/cameraTaskArgs")
 	{
 		cameraTaskArgsApi.GET("/deleteByGroup",cameraTaskArgsController.DeleteByGroup)
-		cameraTaskArgsApi.GET("/getLinkRulesByCameraIds",cameraTaskArgsController.GetLinkRulesByCameraIds)
-		cameraTaskArgsApi.POST("saveLinkRulesByGroup",cameraTaskArgsController.SaveLinkRulesByGroup)
+		cameraTaskArgsApi.POST("/getLinkRulesByCameraIds",cameraTaskArgsController.GetLinkRulesByCameraIds)
+		cameraTaskArgsApi.POST("/saveLinkRulesByGroup",cameraTaskArgsController.SaveLinkRulesByGroup)
 	}
 
 	cameraTaskApi := r.Group(urlPrefix + "/cameraTask")
 	{
-		cameraTaskApi.POST("/saveTransAndAlarmLevel",cameraTaskController.SaveTransAndAlarmLevel)
+		cameraTaskApi.POST("/saveIsDataTrans",cameraTaskController.SaveIsDataTrans)
+		cameraTaskApi.POST("/saveAlarmLevelByGroup",cameraTaskController.SaveAlarmLevelByGroup)
+		cameraTaskApi.POST("/updateCameraTaskStatus",cameraTaskController.UpdateCameraTaskStatus)
 	}
 
 	polygon := r.Group(urlPrefix+"/polygon")

--
Gitblit v1.8.0