videoplayer/dao/video.go

168 lines
6.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package dao
import (
"fmt"
"gorm.io/gorm"
"videoplayer/proto"
)
type Video struct {
gorm.Model
CameraID int `gorm:"column:camera_id"`
VideoPath string `gorm:"column:video_path"`
VideoName string `gorm:"column:video_name"`
AuthId int `gorm:"column:auth_id"`
Human int `gorm:"column:human"`
IsDelete int `gorm:"column:isdelete"`
CreateTime string `gorm:"column:create_time"`
EndTime string `gorm:"column:end_time"`
DeleteTime string `gorm:"column:delete_time"`
FileSize int `gorm:"column:file_size"`
}
func FindWillDelVideoList(id int) []Video {
var videos []Video
DB.Raw("select * from videos where auth_id = ? and delete_time<=now() and isdelete=0", id).Scan(&videos)
return videos
}
func CreateVideo(videoPath, videoName string, cameraID, authID, human, isDelete int, createTime, endTime, deleteTime string, fileSize int) uint {
video := Video{VideoPath: videoPath, VideoName: videoName, CameraID: cameraID, AuthId: authID, Human: human, IsDelete: isDelete, CreateTime: createTime, EndTime: endTime, DeleteTime: deleteTime, FileSize: fileSize}
var res *gorm.DB
if proto.Config.SERVER_SQL_LOG {
res = DB.Debug().Create(&video)
if res.Error != nil {
return 0
}
if deleteTime == "" {
DB.Debug().Exec("update videos set delete_time= DATE_ADD(NOW(), INTERVAL 20 DAY) where id=?", video.ID) //delete_time= DATE_ADD(NOW(), INTERVAL 20 DAY)
}
} else {
res = DB.Create(&video)
if res.Error != nil {
return 0
}
if deleteTime == "" {
DB.Exec("update videos set delete_time= DATE_ADD(NOW(), INTERVAL 20 DAY) where id=?", video.ID) //delete_time= DATE_ADD(NOW(), INTERVAL 20 DAY)
}
}
return video.ID
}
// 文件已删除
func DeleteVideoByID(id, user int) int {
var res *gorm.DB
if proto.Config.SERVER_SQL_LOG {
res = DB.Debug().Exec("update videos set deleted_at = now(),isdelete=1 where id=? and auth_id=?", id, user)
} else {
res = DB.Exec("update videos set deleted_at = now(),isdelete=1 where id=? and auth_id=?", id, user) //delete_time= DATE_ADD(NOW(), INTERVAL 20 DAY)
}
if res.Error != nil {
fmt.Println("dao DeleteVideoByID:", res.Error)
return 0
}
return id
}
// 文件未删除时逻辑删除
func LogicDeleteVideoByID(id, user int) int {
var res *gorm.DB
if proto.Config.SERVER_SQL_LOG {
res = DB.Debug().Exec("update videos set deleted_at=now(),delete_time=now() where id=? and auth_id=?", id, user)
} else {
res = DB.Exec("update videos set deleted_at=now(),delete_time=now() where id=? and auth_id=?", id, user)
}
if res.Error != nil {
fmt.Println("dao LogicDeleteVideoByID:", res.Error)
return 0
}
return id
}
// 回滚视频输出-逻辑删除,若文件已删除则不可回滚
func RollbackVideoByID(id, user int) int {
res := DB.Exec("update videos set deleted_at=null where id=? and auth_id=? and isdelete=0", id, user) //isdelete=0说明文件未删除
if res.Error != nil {
fmt.Println("dao RollbackVideoByID:", res.Error)
return 0
}
return id
}
func UpdateVideo(videoPath, videoName string, cameraID, videoID, authID, human, isDelete int, createTime, endTime string, fileSize int) bool {
var res *gorm.DB
if proto.Config.SERVER_SQL_LOG {
res = DB.Debug().Model(&Video{}).Where("id = ? and auth_id = ?", videoID, authID).Updates(Video{VideoPath: videoPath, VideoName: videoName, CameraID: cameraID, AuthId: authID, Human: human, IsDelete: isDelete, CreateTime: createTime, EndTime: endTime, FileSize: fileSize})
} else {
res = DB.Model(&Video{}).Where("id = ? and auth_id = ?", videoID, authID).Updates(Video{VideoPath: videoPath, VideoName: videoName, CameraID: cameraID, AuthId: authID, Human: human, IsDelete: isDelete, CreateTime: createTime, EndTime: endTime, FileSize: fileSize})
}
if res.Error != nil {
return false
}
return true
}
func FindVideoByID(id, auth_id int) Video {
var video Video
DB.Where("id = ? and auth_id = ?", id, auth_id).Where("isdelete = ?", 0).First(&video)
return video
}
// 根据用户id查找视频列表,返回最新30条
func FindVideoListsByAuthID(auth_id int) []Video {
var videos []Video
DB.Where("auth_id = ? and isdelete =? ", auth_id, 0).Order("create_time DESC").Limit(30).Find(&videos)
return videos
}
func FindVideoListByTime(auth_id int, startTime, endTime string) []Video {
var videos []Video
if proto.Config.SERVER_SQL_LOG {
DB.Debug().Where("auth_id = ?", auth_id).Where("create_time > ? and create_time < ? and isdelete=0", startTime, endTime).Find(&videos)
} else {
DB.Where("auth_id = ?", auth_id).Where("create_time > ? and create_time < ? and isdelete=0", startTime, endTime).Find(&videos)
}
return videos
}
// id 为视频idauth_id为用户idday为延长天数返回修改的行数
func DelayVideo(id, auth_id, day int) int {
res := DB.Exec("update videos set delete_time = date_add(delete_time, interval ? day) where id = ? and auth_id = ? and isdelete=0", day, id, auth_id)
if res.Error != nil {
return 0
}
return int(res.RowsAffected)
}
// id 为用户idday为延长天数返回修改的行数
func DelayAllVideo(id, day int) int {
res := DB.Exec("update videos set delete_time = date_add(delete_time, interval ? day) where auth_id = ? and isdelete = 0", day, id)
if res.Error != nil {
return 0
}
return int(res.RowsAffected)
}
func QuashOneDelay(id, user_id int, day int) int {
res := DB.Exec("update videos set delete_time = date_sub(delete_time, interval ? day) where id = ? and auth_id = ? and isdelete=0", day, id, user_id)
if res.Error != nil {
return 0
}
return int(res.RowsAffected)
}
func QuashAllDelay(user_id int, day int) int {
res := DB.Exec("update videos set delete_time = date_sub(delete_time, interval ? day) where auth_id = ? and isdelete=0", day, user_id)
if res.Error != nil {
return 0
}
return int(res.RowsAffected)
}
// 获取视频列表分页
func GetVideoListByPage(auth_id, page, pageSize int) []Video {
var videos []Video
DB.Where("auth_id = ? and isdelete = ?", auth_id, 0).Order("created_at DESC").Offset((page - 1) * pageSize).Limit(pageSize).Find(&videos) //Offset((page - 1) * pageSize).Limit(pageSize),分页,page从1开始,pageSize每页多少条,Offset是偏移量,Limit是限制条数
return videos
}