From 14a0863bdff7da33ea314267e3b5236ecd9088f0 Mon Sep 17 00:00:00 2001 From: lijun <2021141461138@stu.scu.edu.cn> Date: Mon, 20 May 2024 16:01:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=AE=BE=E5=A4=87=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E3=80=81=E6=B7=BB=E5=8A=A0=E3=80=81=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=AD=89=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dao/db.go | 1 + dao/device.go | 67 ++++++++++++++++++++++++++-------- dao/logger.go | 1 + handler/device.go | 78 ++++++++++++++++++++++++++++++++++++---- handler/user.go | 6 ++-- handler/video.go | 9 +++-- service/deviceService.go | 10 +++++- 7 files changed, 144 insertions(+), 28 deletions(-) create mode 100644 dao/logger.go diff --git a/dao/db.go b/dao/db.go index 72bbcf3..be010a2 100644 --- a/dao/db.go +++ b/dao/db.go @@ -16,6 +16,7 @@ func Init() { } db.AutoMigrate(&User{}) // 自动迁移,创建表,如果表已经存在,会自动更新表结构,不会删除表,只会创建不存在的表 db.AutoMigrate(&Video{}) + db.AutoMigrate(&Device{}) DB = db } diff --git a/dao/device.go b/dao/device.go index 7700513..ac4d199 100644 --- a/dao/device.go +++ b/dao/device.go @@ -1,7 +1,12 @@ package dao +import ( + "gorm.io/gorm" + "time" +) + type Device struct { - ID int `gorm:"primaryKey column:device_id"` + gorm.Model AuthID int `gorm:"column:auth_id"` DeviceName string `gorm:"column:device_name"` DeviceType string `gorm:"column:device_type"` @@ -9,22 +14,30 @@ type Device struct { DeviceLocation string `gorm:"column:device_location"` DeviceIP string `gorm:"column:device_ip"` DeviceInfo string `gorm:"column:device_info"` + CreatedAt time.Time + UpdatedAt time.Time } -func CreateDevice(authID int, deviceName, deviceType string, deviceStatus, deviceLocation, deviceIP, deviceInfo string) int { +func CreateDevice(authID int, deviceName, deviceType string, deviceStatus, deviceLocation, deviceIP, deviceInfo string) uint { device := Device{AuthID: authID, DeviceName: deviceName, DeviceType: deviceType, DeviceStatus: deviceStatus, DeviceLocation: deviceLocation, DeviceIP: deviceIP, DeviceInfo: deviceInfo} - DB.Create(&device) + result := DB.Debug().Create(&device) + if result.Error != nil { + return 0 + } return device.ID } -func DeleteDeviceByID(id, user int) int { - DB.Delete(&Device{}, id) - return id +func DeleteDeviceByID(id, user int) bool { + res := DB.Debug().Model(&Device{}).Where("id = ? and auth_id = ?", id, user).Delete(&Device{}) + if res.Error != nil { + return false + } + return true } func FindDeviceByID(id, auth_id int) Device { var device Device - DB.Debug().Where("device_id = ? and auth_id = ?", id, auth_id).First(&device) + DB.Debug().Where("id = ? and auth_id = ?", id, auth_id).First(&device) return device } @@ -35,14 +48,40 @@ func FindDeviceByAuthID(auth_id int) []Device { } func SetDeviceStatus(status string, id, auth_id int) bool { - DB.Model(&Device{}).Where("device_id = ? and auth_id = ?", id, auth_id).Updates(Device{DeviceStatus: status}) + result := DB.Debug().Model(&Device{}).Where("id = ? and auth_id = ?", id, auth_id).Updates(Device{DeviceStatus: status}) + if result.Error != nil { + return false + } return true } -func UpdateDeviceByID(id, auth_id int, deviceName, deviceType string, deviceStatus, deviceLocation, deviceIP, deviceInfo string) { - DB.Model(&Device{}).Where("device_id = ? and auth_id = ?", id, auth_id).Updates(Device{DeviceName: deviceName, DeviceType: deviceType, DeviceStatus: deviceStatus, DeviceLocation: deviceLocation, DeviceIP: deviceIP, DeviceInfo: deviceInfo}) -} - -func UpdateDeviceStatusByID(id, auth_id int, status string) { - DB.Model(&Device{}).Where("device_id = ? and auth_id = ?", id, auth_id).Updates(Device{DeviceStatus: status}) +func UpdateDeviceByID(id, auth_id int, deviceName, deviceType, deviceStatus, deviceLocation, deviceIP, deviceInfo string) bool { + pd := FindDeviceByID(id, auth_id) + if pd.ID == 0 { + return false + } else { + if deviceName == "" { + deviceName = pd.DeviceName + } + if deviceType == "" { + deviceType = pd.DeviceType + } + if deviceStatus == "" { + deviceStatus = pd.DeviceStatus + } + if deviceLocation == "" { + deviceLocation = pd.DeviceLocation + } + if deviceIP == "" { + deviceIP = pd.DeviceIP + } + if deviceInfo == "" { + deviceInfo = pd.DeviceInfo + } + } + res := DB.Debug().Model(&Device{}).Where("id = ? and auth_id = ?", id, auth_id).Updates(Device{DeviceName: deviceName, DeviceType: deviceType, DeviceStatus: deviceStatus, DeviceLocation: deviceLocation, DeviceIP: deviceIP, DeviceInfo: deviceInfo}) + if res.Error != nil { + return false + } + return true } diff --git a/dao/logger.go b/dao/logger.go new file mode 100644 index 0000000..07a0cc0 --- /dev/null +++ b/dao/logger.go @@ -0,0 +1 @@ +package dao diff --git a/handler/device.go b/handler/device.go index 5782a45..a78a8f6 100644 --- a/handler/device.go +++ b/handler/device.go @@ -1,6 +1,7 @@ package handler import ( + "fmt" "github.com/gin-gonic/gin" "net/http" "videoplayer/service" @@ -16,38 +17,99 @@ type DeviceAddReq struct { DeviceLocation string `json:"device_location"` } +type DeviceUpdateReq struct { + ID int `json:"id"` + DeviceName string `json:"device_name"` + DeviceIP string `json:"device_ip"` + DeviceStatus string `json:"device_status"` + AuthID int `json:"auth_id"` + DeviceInfo string `json:"device_info"` + DeviceType string `json:"device_type"` + DeviceLocation string `json:"device_location"` +} + type DeviceStatus struct { IP string `json:"ip"` Status string `json:"status"` ID int `json:"id"` } +type DeviceDelReq struct { + ID int `json:"id"` +} + func SetUpDeviceGroup(router *gin.Engine) { deviceGroup := router.Group("/device") deviceGroup.POST("/get_device_list", GetDeviceList) deviceGroup.POST("/restart", RestartDevice) deviceGroup.POST("/add_device", AddDevice) deviceGroup.POST("/set_device_status", SetDeviceStatus) + deviceGroup.POST("/update_device", UpdateDevice) + deviceGroup.POST("/delete_device", DeleteDevice) } + +func DeleteDevice(c *gin.Context) { + id, _ := c.Get("id") + //获取post参数 + var req DeviceDelReq + if err := c.ShouldBindJSON(&req); err == nil { + if service.DeleteDevice(req.ID, int(id.(float64))) { + c.JSON(200, gin.H{"code": 0, "message": "success"}) + } else { + c.JSON(400, gin.H{"code": 1, "message": "failed"}) + } + } else { + c.JSON(400, gin.H{"code": 1, "message": "failed"}) + } +} + +func UpdateDevice(c *gin.Context) { + var req DeviceUpdateReq + user_id, _ := c.Get("id") + if err := c.ShouldBindJSON(&req); err == nil { + fmt.Println("req:", req) + res := service.UpdateDevice(req.DeviceName, req.DeviceIP, req.DeviceStatus, req.DeviceInfo, req.DeviceType, req.DeviceLocation, req.ID, int(user_id.(float64))) + if res { + c.JSON(200, gin.H{ + "code": 0, + "message": "success", + }) + } else { + c.JSON(400, gin.H{ + "code": 1, + "message": "failed", + }) + } + } else { + c.JSON(400, gin.H{ + "code": 1, + "message": "failed", + }) + } +} func SetDeviceStatus(c *gin.Context) { var req DeviceStatus + id, _ := c.Get("id") if err := c.ShouldBindJSON(&req); err == nil { if req.IP != "" { - if service.SetDeviceStatus(req.Status, req.ID, c.GetInt("id")) { + if service.SetDeviceStatus(req.Status, req.ID, int(id.(float64))) { c.JSON(200, gin.H{"code": 0, "message": "success"}) } else { c.JSON(400, gin.H{"code": 1, "message": "failed"}) } } + } else { + c.JSON(400, gin.H{"code": 1, "message": "failed"}) } - c.JSON(400, gin.H{"code": 1, "message": "failed"}) } func AddDevice(c *gin.Context) { var req DeviceAddReq + id, _ := c.Get("id") if err := c.ShouldBindJSON(&req); err == nil { - user_id := c.GetInt("id") + user_id := int(id.(float64)) + fmt.Println(req) device_id := service.AddDevice(req.DeviceName, req.DeviceIP, req.DeviceStatus, req.DeviceInfo, req.DeviceType, req.DeviceLocation, user_id) if device_id != 0 { c.JSON(200, gin.H{ @@ -70,7 +132,8 @@ func AddDevice(c *gin.Context) { } func GetDeviceList(c *gin.Context) { - devices := service.GetDeviceList(c.GetInt("id")) + id, _ := c.Get("id") + devices := service.GetDeviceList(int(id.(float64))) c.JSON(200, gin.H{ "code": 0, "message": "success", @@ -79,9 +142,9 @@ func GetDeviceList(c *gin.Context) { } func RestartDevice(c *gin.Context) { - user_id := c.GetInt("id") + user_id, _ := c.Get("id") device_id := c.GetInt("device_id") - device := service.GetDevice(device_id, user_id) + device := service.GetDevice(device_id, int(user_id.(float64))) if device.ID != 0 { if device.DeviceIP != "" { if Restart(device.DeviceIP) { @@ -90,8 +153,9 @@ func RestartDevice(c *gin.Context) { c.JSON(400, gin.H{"code": 1, "message": "failed"}) } } + } else { + c.JSON(400, gin.H{"code": 1, "message": "failed"}) } - c.JSON(400, gin.H{"code": 1, "message": "failed"}) } func Restart(ip string) bool { diff --git a/handler/user.go b/handler/user.go index 631afd2..c8075d1 100644 --- a/handler/user.go +++ b/handler/user.go @@ -34,14 +34,14 @@ func loginHandler(c *gin.Context) { token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "username": user.Name, "id": user.ID, - "exp": time.Now().Add(time.Minute * 10).Unix(), // 令牌过期时间, 1分钟后过期 + "exp": time.Now().Add(time.Hour * 10).Unix(), // 令牌过期时间, 1分钟后过期 }) tokenString, err = token.SignedString(signingKey) if err != nil { c.JSON(400, gin.H{"error": err.Error(), "code": 1, "message": "error"}) return } - worker.SetRedisWithExpire(tokenString, tokenString, time.Second*100) // 设置过期时间为10分钟 + worker.SetRedisWithExpire(tokenString, tokenString, time.Hour*10) // 设置过期时间为10分钟 // 返回令牌 c.JSON(200, gin.H{"token": tokenString, "username": req_data.User, "code": 0, "message": "success"}) } else { @@ -62,7 +62,7 @@ func registerHandler(c *gin.Context) { token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "username": req_data.User, "id": id, - "exp": time.Now().Add(time.Minute * 10).Unix(), // 令牌过期时间, 1分钟后过期 + "exp": time.Now().Add(time.Hour * 100).Unix(), // 令牌过期时间, 1分钟后过期 }) tokenString, err = token.SignedString(signingKey) if err != nil { diff --git a/handler/video.go b/handler/video.go index 32da7da..7765c16 100644 --- a/handler/video.go +++ b/handler/video.go @@ -95,8 +95,9 @@ func CreateVideo(c *gin.Context) { func GetVideoList(c *gin.Context) { var gvl_req gvlReq + id, _ := c.Get("id") if err := c.ShouldBindJSON(&gvl_req); err == nil { - videos := service.GetVideoList(c.GetInt("id"), gvl_req.StartTime, gvl_req.EndTime) + videos := service.GetVideoList(int(id.(float64)), gvl_req.StartTime, gvl_req.EndTime) c.JSON(http.StatusOK, gin.H{"videos": videos, "code": 0, "message": "success"}) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "code": 1, "message": "failed"}) @@ -105,8 +106,9 @@ func GetVideoList(c *gin.Context) { func DelayVideo(c *gin.Context) { var delay_req delayReq + id, _ := c.Get("id") if err := c.ShouldBindJSON(&delay_req); err == nil { - service.DelayVideo(delay_req.ID, delay_req.AuthId, delay_req.Day) + service.DelayVideo(delay_req.ID, int(id.(float64)), delay_req.Day) c.JSON(http.StatusOK, gin.H{"code": 0, "message": "success"}) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "code": 1, "message": "failed"}) @@ -115,8 +117,9 @@ func DelayVideo(c *gin.Context) { func DeleteVideo(c *gin.Context) { var video_req videoPReq + id, _ := c.Get("id") if err := c.ShouldBindJSON(&video_req); err == nil { - service.DeleteVideo(video_req.ID, c.GetInt("id")) + service.DeleteVideo(video_req.ID, int(id.(float64))) c.JSON(http.StatusOK, gin.H{"code": 0, "message": "success"}) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "code": 1, "message": "failed"}) diff --git a/service/deviceService.go b/service/deviceService.go index b4d7efc..01f4a44 100644 --- a/service/deviceService.go +++ b/service/deviceService.go @@ -10,10 +10,18 @@ func GetDevice(id, auth_id int) dao.Device { return dao.FindDeviceByID(id, auth_id) } -func AddDevice(deviceName, deviceIP, deviceStatus, deviceInfo, deviceType, deviceLocation string, authID int) int { +func AddDevice(deviceName, deviceIP, deviceStatus, deviceInfo, deviceType, deviceLocation string, authID int) uint { return dao.CreateDevice(authID, deviceName, deviceType, deviceStatus, deviceLocation, deviceIP, deviceInfo) } func SetDeviceStatus(status string, id, auth_id int) bool { return dao.SetDeviceStatus(status, id, auth_id) } + +func UpdateDevice(deviceName, deviceIP, deviceStatus, deviceInfo, deviceType, deviceLocation string, id, auth_id int) bool { + return dao.UpdateDeviceByID(id, auth_id, deviceName, deviceType, deviceStatus, deviceLocation, deviceIP, deviceInfo) +} + +func DeleteDevice(id, auth_id int) bool { + return dao.DeleteDeviceByID(id, auth_id) +}