mirror of
https://github.com/hkmadao/rtsp2rtmp.git
synced 2025-09-26 19:31:19 +08:00
包结构整理;动态sql功能;
This commit is contained in:
3
main.go
3
main.go
@@ -7,8 +7,9 @@ import (
|
||||
|
||||
_ "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/conf" // 必须先导入配置文件
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/rtspclientmanager"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/task"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web"
|
||||
_ "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/register"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/task"
|
||||
|
||||
// "net/http"
|
||||
// _ "net/http/pprof"
|
||||
|
@@ -8,8 +8,9 @@ import (
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/deepch/vdk/av"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin/fileflvmanager/fileflvwriter"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
type FileFlvManager struct {
|
||||
@@ -54,7 +55,7 @@ func NewFileFlvManager(pktStream <-chan av.Packet, code string, codecs []av.Code
|
||||
code: code,
|
||||
codecs: codecs,
|
||||
}
|
||||
camera, err := models.CameraSelectOne(models.Camera{Code: code})
|
||||
camera, err := service.CameraSelectOne(entity.Camera{Code: code})
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
return ffm
|
||||
@@ -120,7 +121,7 @@ func (ffm *FileFlvManager) StopWrite() {
|
||||
}()
|
||||
}
|
||||
|
||||
//Write extends to writer.Writer
|
||||
// Write extends to writer.Writer
|
||||
func (ffm *FileFlvManager) flvWrite() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
|
@@ -12,8 +12,9 @@ import (
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/deepch/vdk/av"
|
||||
"github.com/deepch/vdk/format/flv"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
type IFileFlvManager interface {
|
||||
@@ -80,7 +81,7 @@ func NewFileFlvWriter(
|
||||
isStart: false,
|
||||
ffm: ffm,
|
||||
}
|
||||
camera, err := models.CameraSelectOne(models.Camera{Code: code})
|
||||
camera, err := service.CameraSelectOne(entity.Camera{Code: code})
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
return ffw
|
||||
@@ -162,7 +163,7 @@ func (ffw *FileFlvWriter) createFlvFile() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
//Write extends to writer.Writer
|
||||
// Write extends to writer.Writer
|
||||
func (ffw *FileFlvWriter) flvWrite() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
|
@@ -9,8 +9,9 @@ import (
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/deepch/vdk/av"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin/httpflvmanage/httpflvwriter"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
type HttpFlvManager struct {
|
||||
@@ -54,7 +55,7 @@ func NewHttpFlvManager(pktStream <-chan av.Packet, code string, codecs []av.Code
|
||||
code: code,
|
||||
codecs: codecs,
|
||||
}
|
||||
camera, err := models.CameraSelectOne(models.Camera{Code: code})
|
||||
camera, err := service.CameraSelectOne(entity.Camera{Code: code})
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
return hfm
|
||||
@@ -92,7 +93,7 @@ func (hfm *HttpFlvManager) StopWrite() {
|
||||
}()
|
||||
}
|
||||
|
||||
//Write extends to writer.Writer
|
||||
// Write extends to writer.Writer
|
||||
func (hfm *HttpFlvManager) flvWrite() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
@@ -114,7 +115,7 @@ func (hfm *HttpFlvManager) flvWrite() {
|
||||
}
|
||||
}
|
||||
|
||||
//添加播放者
|
||||
// 添加播放者
|
||||
func (hfm *HttpFlvManager) AddHttpFlvPlayer(
|
||||
playerDone <-chan int,
|
||||
pulseInterval time.Duration,
|
||||
|
@@ -8,8 +8,9 @@ import (
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/deepch/vdk/av"
|
||||
"github.com/deepch/vdk/format/flv"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
type IHttpFlvManager interface {
|
||||
@@ -81,7 +82,7 @@ func NewHttpFlvWriter(
|
||||
start: false,
|
||||
}
|
||||
|
||||
camera, err := models.CameraSelectOne(models.Camera{Code: code})
|
||||
camera, err := service.CameraSelectOne(entity.Camera{Code: code})
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
return hfw
|
||||
@@ -191,7 +192,7 @@ func (hfw *HttpFlvWriter) writerPacket(pkt av.Packet, templateTime *time.Time) e
|
||||
return nil
|
||||
}
|
||||
|
||||
//Write extends to io.Writer
|
||||
// Write extends to io.Writer
|
||||
func (hfw *HttpFlvWriter) Write(p []byte) (n int, err error) {
|
||||
// start := time.Now()
|
||||
defer func() {
|
||||
|
@@ -7,8 +7,9 @@ import (
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/deepch/vdk/av"
|
||||
"github.com/deepch/vdk/format/rtmp"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
type IRtmpFlvManager interface {
|
||||
@@ -74,9 +75,9 @@ func (rfw *RtmpFlvWriter) StopWrite() {
|
||||
}
|
||||
|
||||
func (rfw *RtmpFlvWriter) createConn() error {
|
||||
var camera models.Camera
|
||||
var camera entity.Camera
|
||||
camera.Code = rfw.code
|
||||
camera, err := models.CameraSelectOne(camera)
|
||||
camera, err := service.CameraSelectOne(camera)
|
||||
if err != nil {
|
||||
logs.Error("not found camera : %s", rfw.code)
|
||||
return err
|
||||
@@ -91,7 +92,7 @@ func (rfw *RtmpFlvWriter) createConn() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
//Write extends to writer.Writer
|
||||
// Write extends to writer.Writer
|
||||
func (rfw *RtmpFlvWriter) flvWrite() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
@@ -99,9 +100,9 @@ func (rfw *RtmpFlvWriter) flvWrite() {
|
||||
}
|
||||
}()
|
||||
|
||||
var camera models.Camera
|
||||
var camera entity.Camera
|
||||
camera.Code = rfw.code
|
||||
camera, err := models.CameraSelectOne(camera)
|
||||
camera, err := service.CameraSelectOne(camera)
|
||||
if err != nil {
|
||||
logs.Error("not found camera : %s", rfw.code)
|
||||
return
|
||||
|
@@ -1,103 +0,0 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
)
|
||||
|
||||
type Camera struct {
|
||||
Id string `orm:"pk;column(id)" json:"id"`
|
||||
Code string `orm:"column(code)" json:"code"`
|
||||
RtspURL string `orm:"column(rtsp_url)" json:"rtspURL"`
|
||||
RtmpURL string `orm:"column(rtmp_url)" json:"rtmpURL"`
|
||||
PlayAuthCode string `orm:"column(play_auth_code)" json:"playAuthCode"`
|
||||
OnlineStatus int `orm:"column(online_status)" json:"onlineStatus"`
|
||||
Enabled int `orm:"column(enabled)" json:"enabled"`
|
||||
RtmpPushStatus int `orm:"column(rtmp_push_status)" json:"rtmpPushStatus"`
|
||||
SaveVideo int `orm:"column(save_video)" json:"saveVideo"`
|
||||
Live int `orm:"column(live)" json:"live"`
|
||||
Created time.Time `orm:"column(created)" json:"created"`
|
||||
}
|
||||
|
||||
func CameraInsert(e Camera) (i int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
i, err = o.Insert(&e)
|
||||
if err != nil && err != orm.ErrLastInsertIdUnavailable {
|
||||
logs.Error("camera insert error : %v", err)
|
||||
return i, err
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
func CameraDelete(e Camera) (i int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
i, err = o.Delete(&e)
|
||||
if err != nil {
|
||||
logs.Error("camera delete error : %v", err)
|
||||
return 0, err
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
func CameraUpdate(e Camera) (i int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
i, err = o.Update(&e)
|
||||
if err != nil {
|
||||
logs.Error("camera update error : %v", err)
|
||||
return 0, err
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
func CameraSelectById(id string) (e Camera, err error) {
|
||||
o := orm.NewOrm()
|
||||
e = Camera{Id: id}
|
||||
|
||||
err = o.Read(&e)
|
||||
|
||||
if err == orm.ErrNoRows {
|
||||
logs.Error("查询不到")
|
||||
return e, err
|
||||
} else if err == orm.ErrMissPK {
|
||||
logs.Error("找不到主键")
|
||||
return e, err
|
||||
} else if err != nil {
|
||||
logs.Error("错误: %v", err)
|
||||
return e, err
|
||||
} else {
|
||||
return e, nil
|
||||
}
|
||||
}
|
||||
|
||||
func CameraSelectOne(q Camera) (e Camera, err error) {
|
||||
o := orm.NewOrm()
|
||||
err = o.QueryTable(new(Camera)).Filter("code", q.Code).One(&e)
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return e, err
|
||||
}
|
||||
return e, nil
|
||||
}
|
||||
|
||||
func CameraCountByCode(code string) (count int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
count, err = o.QueryTable(new(Camera)).Filter("code", code).Count()
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return count, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func CameraSelectAll() (es []Camera, err error) {
|
||||
o := orm.NewOrm()
|
||||
num, err := o.QueryTable(new(Camera)).All(&es)
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return es, err
|
||||
}
|
||||
logs.Debug("查询到%d条记录", num)
|
||||
return es, nil
|
||||
}
|
@@ -8,10 +8,11 @@ import (
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/deepch/vdk/av"
|
||||
"github.com/deepch/vdk/format/rtspv2"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/controllers"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/rtspclient"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/controllers"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
var rcmInstance *RtspClientManager
|
||||
@@ -75,7 +76,7 @@ func (s *RtspClientManager) startConnections() {
|
||||
logs.Error("rtspManager panic %v", r)
|
||||
}
|
||||
}()
|
||||
es, err := models.CameraSelectAll()
|
||||
es, err := service.CameraSelectAll()
|
||||
if err != nil {
|
||||
logs.Error("camera list query error: %s", err)
|
||||
return
|
||||
@@ -84,7 +85,7 @@ func (s *RtspClientManager) startConnections() {
|
||||
for {
|
||||
timeNow := time.Now()
|
||||
if timeNow.After(timeTemp.Add(30 * time.Second)) {
|
||||
es, err = models.CameraSelectAll()
|
||||
es, err = service.CameraSelectAll()
|
||||
if err != nil {
|
||||
logs.Error("camera list query error: %s", err)
|
||||
return
|
||||
@@ -117,8 +118,8 @@ func (s *RtspClientManager) connRtsp(code string) {
|
||||
}()
|
||||
//放置信息表示已经开始
|
||||
s.rcs.Store(code, struct{}{})
|
||||
q := models.Camera{Code: code}
|
||||
c, err := models.CameraSelectOne(q)
|
||||
q := entity.Camera{Code: code}
|
||||
c, err := service.CameraSelectOne(q)
|
||||
if err != nil {
|
||||
logs.Error("find camera [%s] error : %v", code, err)
|
||||
return
|
||||
@@ -140,7 +141,7 @@ func (s *RtspClientManager) connRtsp(code string) {
|
||||
logs.Error("camera [%s] conn : %v", c.Code, err)
|
||||
c.OnlineStatus = 0
|
||||
if c.OnlineStatus == 1 {
|
||||
models.CameraUpdate(c)
|
||||
service.CameraUpdate(c)
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -148,7 +149,7 @@ func (s *RtspClientManager) connRtsp(code string) {
|
||||
// logs.Warn("camera: %s codecs: %v", code, session.CodecData)
|
||||
|
||||
c.OnlineStatus = 1
|
||||
models.CameraUpdate(c)
|
||||
service.CameraUpdate(c)
|
||||
|
||||
done := make(chan int)
|
||||
//添加缓冲,缓解前后速率不一致问题,但是如果收包平均速率大于消费平均速率,依然会导致丢包
|
||||
@@ -206,12 +207,12 @@ Loop:
|
||||
}
|
||||
|
||||
//offline camera
|
||||
camera, err := models.CameraSelectOne(q)
|
||||
camera, err := service.CameraSelectOne(q)
|
||||
if err != nil {
|
||||
logs.Error("no camera error : %s", code)
|
||||
} else {
|
||||
camera.OnlineStatus = 0
|
||||
models.CameraUpdate(camera)
|
||||
service.CameraUpdate(camera)
|
||||
}
|
||||
|
||||
logs.Error("camera: %s session Close", code)
|
||||
|
@@ -7,15 +7,16 @@ import (
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/result"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/result"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
func CameraList(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := result.Result{Code: 1, Msg: ""}
|
||||
cameras, err := models.CameraSelectAll()
|
||||
cameras, err := service.CameraSelectAll()
|
||||
if err != nil {
|
||||
logs.Error("no camera found : %v", err)
|
||||
r.Code = 0
|
||||
@@ -39,7 +40,7 @@ func CameraDetail(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera, err := models.CameraSelectById(cameraId)
|
||||
camera, err := service.CameraSelectById(cameraId)
|
||||
if err != nil {
|
||||
logs.Error("no camera found : %v", err)
|
||||
r.Code = 0
|
||||
@@ -57,7 +58,7 @@ func CameraEdit(c *gin.Context) {
|
||||
Code: 1,
|
||||
Msg: "",
|
||||
}
|
||||
q := models.Camera{}
|
||||
q := entity.Camera{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
@@ -69,7 +70,7 @@ func CameraEdit(c *gin.Context) {
|
||||
|
||||
if q.Id == "" || len(q.Id) == 0 {
|
||||
id, _ := utils.UUID()
|
||||
count, err := models.CameraCountByCode(q.Code)
|
||||
count, err := service.CameraCountByCode(q.Code)
|
||||
if err != nil {
|
||||
logs.Error("check camera is exist error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -88,7 +89,7 @@ func CameraEdit(c *gin.Context) {
|
||||
q.Created = time.Now()
|
||||
playAuthCode, _ := utils.UUID()
|
||||
q.PlayAuthCode = playAuthCode
|
||||
_, err = models.CameraInsert(q)
|
||||
_, err = service.CameraInsert(q)
|
||||
if err != nil {
|
||||
logs.Error("camera insert error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -99,7 +100,7 @@ func CameraEdit(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
count, err := models.CameraCountByCode(q.Code)
|
||||
count, err := service.CameraCountByCode(q.Code)
|
||||
if err != nil {
|
||||
logs.Error("check camera is exist error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -114,12 +115,12 @@ func CameraEdit(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera, _ := models.CameraSelectById(q.Id)
|
||||
camera, _ := service.CameraSelectById(q.Id)
|
||||
camera.Code = q.Code
|
||||
camera.RtspURL = q.RtspURL
|
||||
camera.RtmpURL = q.RtmpURL
|
||||
// camera.Enabled = q.Enabled
|
||||
_, err = models.CameraUpdate(camera)
|
||||
_, err = service.CameraUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("camera insert error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -140,8 +141,8 @@ func CameraDelete(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera := models.Camera{Id: id}
|
||||
_, err := models.CameraDelete(camera)
|
||||
camera := entity.Camera{Id: id}
|
||||
_, err := service.CameraDelete(camera)
|
||||
|
||||
if err != nil {
|
||||
logs.Error("delete camera error : %v", err)
|
||||
@@ -162,7 +163,7 @@ func CameraDelete(c *gin.Context) {
|
||||
func CameraEnabled(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := result.Result{Code: 1, Msg: ""}
|
||||
q := models.Camera{}
|
||||
q := entity.Camera{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
@@ -172,7 +173,7 @@ func CameraEnabled(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := models.CameraSelectById(q.Id)
|
||||
camera, err := service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -184,7 +185,7 @@ func CameraEnabled(c *gin.Context) {
|
||||
if q.Enabled != 1 {
|
||||
camera.OnlineStatus = 0
|
||||
}
|
||||
_, err = models.CameraUpdate(camera)
|
||||
_, err = service.CameraUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("enabled camera status %d error : %v", camera.Enabled, err)
|
||||
r.Code = 0
|
||||
@@ -206,7 +207,7 @@ func CameraEnabled(c *gin.Context) {
|
||||
func RtmpPushChange(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := result.Result{Code: 1, Msg: ""}
|
||||
q := models.Camera{}
|
||||
q := entity.Camera{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
@@ -216,7 +217,7 @@ func RtmpPushChange(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := models.CameraSelectById(q.Id)
|
||||
camera, err := service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -225,7 +226,7 @@ func RtmpPushChange(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
camera.RtmpPushStatus = q.RtmpPushStatus
|
||||
_, err = models.CameraUpdate(camera)
|
||||
_, err = service.CameraUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("RtmpPushEnabled camera status %d error : %v", camera.Enabled, err)
|
||||
r.Code = 0
|
||||
@@ -248,7 +249,7 @@ func RtmpPushChange(c *gin.Context) {
|
||||
func CameraSaveVideoChange(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := result.Result{Code: 1, Msg: ""}
|
||||
q := models.Camera{}
|
||||
q := entity.Camera{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
@@ -258,7 +259,7 @@ func CameraSaveVideoChange(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := models.CameraSelectById(q.Id)
|
||||
camera, err := service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -267,7 +268,7 @@ func CameraSaveVideoChange(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
camera.SaveVideo = q.SaveVideo
|
||||
_, err = models.CameraUpdate(camera)
|
||||
_, err = service.CameraUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("SaveVideo camera status %d error : %v", camera.SaveVideo, err)
|
||||
r.Code = 0
|
||||
@@ -290,7 +291,7 @@ func CameraSaveVideoChange(c *gin.Context) {
|
||||
func CameraLiveChange(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := result.Result{Code: 1, Msg: ""}
|
||||
q := models.Camera{}
|
||||
q := entity.Camera{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
@@ -300,7 +301,7 @@ func CameraLiveChange(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := models.CameraSelectById(q.Id)
|
||||
camera, err := service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -309,7 +310,7 @@ func CameraLiveChange(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
camera.Live = q.Live
|
||||
_, err = models.CameraUpdate(camera)
|
||||
_, err = service.CameraUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("Live camera status %d error : %v", camera.Live, err)
|
||||
r.Code = 0
|
||||
@@ -330,7 +331,7 @@ func CameraLiveChange(c *gin.Context) {
|
||||
func CameraPlayAuthCodeReset(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := result.Result{Code: 1, Msg: ""}
|
||||
q := models.Camera{}
|
||||
q := entity.Camera{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
@@ -340,7 +341,7 @@ func CameraPlayAuthCodeReset(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := models.CameraSelectById(q.Id)
|
||||
camera, err := service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -350,7 +351,7 @@ func CameraPlayAuthCodeReset(c *gin.Context) {
|
||||
}
|
||||
playAuthCode, _ := utils.UUID()
|
||||
camera.PlayAuthCode = playAuthCode
|
||||
_, err = models.CameraUpdate(camera)
|
||||
_, err = service.CameraUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("PlayAuthCode camera status %d error : %v", camera.PlayAuthCode, err)
|
||||
r.Code = 0
|
@@ -6,9 +6,10 @@ import (
|
||||
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/result"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/result"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
func CameraShareList(c *gin.Context) {
|
||||
@@ -22,7 +23,7 @@ func CameraShareList(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
cameraShares, err := models.CameraShareSelectByCameraId(cameraId)
|
||||
cameraShares, err := service.CameraShareSelectByCameraId(cameraId)
|
||||
if err != nil {
|
||||
logs.Error("no camerashare found : %v", err)
|
||||
r.Code = 0
|
||||
@@ -41,7 +42,7 @@ func CameraShareEdit(c *gin.Context) {
|
||||
Code: 1,
|
||||
Msg: "",
|
||||
}
|
||||
q := models.CameraShare{}
|
||||
q := entity.CameraShare{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
@@ -51,7 +52,7 @@ func CameraShareEdit(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
_, err = models.CameraSelectById(q.CameraId)
|
||||
_, err = service.CameraSelectById(q.CameraId)
|
||||
if err != nil {
|
||||
logs.Error("not fount camera : %v", err)
|
||||
r.Code = 0
|
||||
@@ -66,7 +67,7 @@ func CameraShareEdit(c *gin.Context) {
|
||||
q.Created = time.Now()
|
||||
playAuthCode, _ := utils.UUID()
|
||||
q.AuthCode = playAuthCode
|
||||
_, err = models.CameraShareInsert(q)
|
||||
_, err = service.CameraShareInsert(q)
|
||||
if err != nil {
|
||||
logs.Error("camerashare insert error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -77,12 +78,12 @@ func CameraShareEdit(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
cameraShare, _ := models.CameraShareSelectById(q.Id)
|
||||
cameraShare, _ := service.CameraShareSelectById(q.Id)
|
||||
cameraShare.Name = q.Name
|
||||
cameraShare.StartTime = q.StartTime
|
||||
cameraShare.Deadline = q.Deadline
|
||||
// camera.Enabled = q.Enabled
|
||||
_, err = models.CameraShareUpdate(cameraShare)
|
||||
_, err = service.CameraShareUpdate(cameraShare)
|
||||
if err != nil {
|
||||
logs.Error("camerashare insert error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -103,8 +104,8 @@ func CameraShareDelete(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera := models.CameraShare{Id: id}
|
||||
_, err := models.CameraShareDelete(camera)
|
||||
camera := entity.CameraShare{Id: id}
|
||||
_, err := service.CameraShareDelete(camera)
|
||||
|
||||
if err != nil {
|
||||
logs.Error("delete camerashare error : %v", err)
|
||||
@@ -120,7 +121,7 @@ func CameraShareDelete(c *gin.Context) {
|
||||
func CameraShareEnabled(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := result.Result{Code: 1, Msg: ""}
|
||||
q := models.CameraShare{}
|
||||
q := entity.CameraShare{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
@@ -130,7 +131,7 @@ func CameraShareEnabled(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := models.CameraShareSelectById(q.Id)
|
||||
camera, err := service.CameraShareSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camerashare error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -139,7 +140,7 @@ func CameraShareEnabled(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
camera.Enabled = q.Enabled
|
||||
_, err = models.CameraShareUpdate(camera)
|
||||
_, err = service.CameraShareUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("enabled camerashare status %d error : %v", camera.Enabled, err)
|
||||
r.Code = 0
|
@@ -9,8 +9,9 @@ import (
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/result"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/result"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
func HttpFlvPlay(c *gin.Context) {
|
||||
@@ -34,8 +35,8 @@ func HttpFlvPlay(c *gin.Context) {
|
||||
Code: 1,
|
||||
Msg: "",
|
||||
}
|
||||
q := models.Camera{Code: code}
|
||||
camera, err := models.CameraSelectOne(q)
|
||||
q := entity.Camera{Code: code}
|
||||
camera, err := service.CameraSelectOne(q)
|
||||
if err != nil {
|
||||
logs.Error("camera query error : %v", err)
|
||||
r.Code = 0
|
||||
@@ -51,8 +52,8 @@ func HttpFlvPlay(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
if method == "temp" {
|
||||
csq := models.CameraShare{CameraId: camera.Id, AuthCode: authCode}
|
||||
cs, err := models.CameraShareSelectOne(csq)
|
||||
csq := entity.CameraShare{CameraId: camera.Id, AuthCode: authCode}
|
||||
cs, err := service.CameraShareSelectOne(csq)
|
||||
if err != nil {
|
||||
logs.Error("CameraShareSelectOne error : %v", err)
|
||||
r.Code = 0
|
20
src/rtsp2rtmp/web/dao/entity/camera.go
Normal file
20
src/rtsp2rtmp/web/dao/entity/camera.go
Normal file
@@ -0,0 +1,20 @@
|
||||
package entity
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type Camera struct {
|
||||
Id string `orm:"pk;column(id)" json:"id"`
|
||||
Code string `orm:"column(code)" json:"code"`
|
||||
RtspURL string `orm:"column(rtsp_url)" json:"rtspURL"`
|
||||
RtmpURL string `orm:"column(rtmp_url)" json:"rtmpURL"`
|
||||
PlayAuthCode string `orm:"column(play_auth_code)" json:"playAuthCode"`
|
||||
OnlineStatus int `orm:"column(online_status)" json:"onlineStatus"`
|
||||
Enabled int `orm:"column(enabled)" json:"enabled"`
|
||||
RtmpPushStatus int `orm:"column(rtmp_push_status)" json:"rtmpPushStatus"`
|
||||
SaveVideo int `orm:"column(save_video)" json:"saveVideo"`
|
||||
Live int `orm:"column(live)" json:"live"`
|
||||
Created time.Time `orm:"column(created)" json:"created"`
|
||||
CameraShares []CameraShare `orm:"-" json:"cameraShares"`
|
||||
}
|
17
src/rtsp2rtmp/web/dao/entity/camerashare.go
Normal file
17
src/rtsp2rtmp/web/dao/entity/camerashare.go
Normal file
@@ -0,0 +1,17 @@
|
||||
package entity
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type CameraShare struct {
|
||||
Id string `orm:"pk;column(id)" json:"id"`
|
||||
Name string `orm:"column(name)" json:"name"`
|
||||
AuthCode string `orm:"column(auth_code)" json:"authCode"`
|
||||
Enabled int `orm:"column(enabled)" json:"enabled"`
|
||||
Created time.Time `orm:"column(created)" json:"created"`
|
||||
StartTime time.Time `orm:"column(start_time)" json:"startTime"`
|
||||
Deadline time.Time `orm:"column(deadline)" json:"deadline"`
|
||||
CameraId string `orm:"column(camera_id)" json:"cameraId"`
|
||||
Camera Camera `orm:"-" json:"camera"`
|
||||
}
|
@@ -1,9 +1,10 @@
|
||||
package models
|
||||
package register
|
||||
|
||||
import (
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
"github.com/beego/beego/v2/core/config"
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
@@ -38,6 +39,6 @@ func init() {
|
||||
|
||||
func init() {
|
||||
// 需要在init中注册定义的model
|
||||
orm.RegisterModel(new(Camera))
|
||||
orm.RegisterModel(new(CameraShare))
|
||||
orm.RegisterModel(new(entity.Camera))
|
||||
orm.RegisterModel(new(entity.CameraShare))
|
||||
}
|
5
src/rtsp2rtmp/web/dyn_query/dyn_query.go
Normal file
5
src/rtsp2rtmp/web/dyn_query/dyn_query.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package dyn_query
|
||||
|
||||
type DynQuery interface {
|
||||
BuildSql(selectStatement SelectStatement) (string, error)
|
||||
}
|
207
src/rtsp2rtmp/web/dyn_query/dyn_query_mysql.go
Normal file
207
src/rtsp2rtmp/web/dyn_query/dyn_query_mysql.go
Normal file
@@ -0,0 +1,207 @@
|
||||
package dyn_query
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type DynQueryMysql struct {
|
||||
}
|
||||
|
||||
func (dynQueryMysql *DynQueryMysql) BuildSql(selectStatement SelectStatement) (sqlStr string, err error) {
|
||||
if len(selectStatement.From) == 0 {
|
||||
err = fmt.Errorf("from is empty")
|
||||
return
|
||||
}
|
||||
var tokens = make([]string, 0)
|
||||
|
||||
// select expr
|
||||
var selectTokens = make([]string, 0)
|
||||
if len(selectStatement.Selects) == 0 {
|
||||
var mainTable = selectStatement.From[0]
|
||||
selectTokens = append(selectTokens, "`"+mainTable.AliasName+"`.*")
|
||||
} else {
|
||||
for _, selectExpr := range selectStatement.Selects {
|
||||
selectTokens = append(selectTokens, "`"+selectExpr.TableAliasName+"`.`"+selectExpr.ColumnName+"`")
|
||||
}
|
||||
}
|
||||
tokens = append(tokens, "SELECT", strings.Join(selectTokens, ","))
|
||||
|
||||
// from expr
|
||||
var fromTokens = make([]string, 0)
|
||||
for _, tableRef := range selectStatement.From {
|
||||
fromTokens = append(fromTokens, "`"+tableRef.TableName+"` `"+tableRef.AliasName+"`")
|
||||
}
|
||||
tokens = append(tokens, "FROM", strings.Join(fromTokens, ","))
|
||||
|
||||
// join expr
|
||||
var fullJoinTokens = make([]string, 0)
|
||||
if len(selectStatement.Join) > 0 {
|
||||
for _, joinExpr := range selectStatement.Join {
|
||||
var joinTokens = make([]string, 0)
|
||||
if joinExpr.JoinType == InnerJoin {
|
||||
joinTokens = append(joinTokens, "INNER JION `"+joinExpr.TableName+"` `"+joinExpr.AliasName+"`")
|
||||
var conditions = joinExpr.On
|
||||
conditionTokens, makeErr := makeConditionsToken(conditions)
|
||||
if makeErr != nil {
|
||||
err = fmt.Errorf("make inner join token error: %v", makeErr)
|
||||
return
|
||||
}
|
||||
joinTokens = append(joinTokens, strings.Join(conditionTokens, " "))
|
||||
} else if joinExpr.JoinType == LeftJoin {
|
||||
joinTokens = append(joinTokens, "LEFT JION `"+joinExpr.TableName+"` `"+joinExpr.AliasName+"`")
|
||||
var conditions = joinExpr.On
|
||||
conditionTokens, makeErr := makeConditionsToken(conditions)
|
||||
if makeErr != nil {
|
||||
err = fmt.Errorf("make left join token error: %v", makeErr)
|
||||
return
|
||||
}
|
||||
joinTokens = append(joinTokens, strings.Join(conditionTokens, " "))
|
||||
} else if joinExpr.JoinType == RightJoin {
|
||||
joinTokens = append(joinTokens, "RIGHT JION `"+joinExpr.TableName+"` `"+joinExpr.AliasName+"`")
|
||||
var conditions = joinExpr.On
|
||||
conditionTokens, makeErr := makeConditionsToken(conditions)
|
||||
if makeErr != nil {
|
||||
err = fmt.Errorf("make right join token error: %v", makeErr)
|
||||
return
|
||||
}
|
||||
joinTokens = append(joinTokens, strings.Join(conditionTokens, " "))
|
||||
} else {
|
||||
err = fmt.Errorf("unsupport join: %d", joinExpr.JoinType)
|
||||
return
|
||||
}
|
||||
fullJoinTokens = append(fullJoinTokens, strings.Join(joinTokens, " "))
|
||||
}
|
||||
}
|
||||
tokens = append(tokens, strings.Join(fullJoinTokens, " "))
|
||||
|
||||
// where expr
|
||||
var whereTokens = make([]string, 0)
|
||||
if len(selectStatement.SqlWhere) > 0 {
|
||||
var conditions = selectStatement.SqlWhere
|
||||
conditionTokens, makeErr := makeConditionsToken(conditions)
|
||||
if makeErr != nil {
|
||||
err = fmt.Errorf("make where token error: %v", makeErr)
|
||||
return
|
||||
}
|
||||
whereTokens = append(whereTokens, strings.Join(conditionTokens, " "))
|
||||
tokens = append(tokens, "WHERE", strings.Join(whereTokens, " "))
|
||||
}
|
||||
|
||||
// having expr
|
||||
var havingTokens = make([]string, 0)
|
||||
if len(selectStatement.Having) > 0 {
|
||||
var conditions = selectStatement.Having
|
||||
conditionTokens, makeErr := makeConditionsToken(conditions)
|
||||
if makeErr != nil {
|
||||
err = fmt.Errorf("make having token error: %v", makeErr)
|
||||
return
|
||||
}
|
||||
havingTokens = append(havingTokens, strings.Join(conditionTokens, " "))
|
||||
tokens = append(tokens, "HAVING", strings.Join(havingTokens, " "))
|
||||
}
|
||||
|
||||
// order expr
|
||||
var orderTokens = make([]string, 0)
|
||||
if len(selectStatement.Orders) > 0 {
|
||||
for _, orderExpr := range selectStatement.Orders {
|
||||
if orderExpr.OrderType == ASC {
|
||||
orderTokens = append(orderTokens, "`"+orderExpr.TableAliasName+"`.`"+orderExpr.ColumnName+"` ASC")
|
||||
} else if orderExpr.OrderType == DESC {
|
||||
orderTokens = append(orderTokens, "`"+orderExpr.TableAliasName+"`.`"+orderExpr.ColumnName+"` DESC")
|
||||
} else {
|
||||
err = fmt.Errorf("unsupport OrderType: %d", orderExpr.OrderType)
|
||||
return
|
||||
}
|
||||
}
|
||||
tokens = append(tokens, "ORDER BY", strings.Join(orderTokens, ","))
|
||||
}
|
||||
|
||||
sqlStr = strings.Join(tokens, " ")
|
||||
return
|
||||
}
|
||||
|
||||
func makeConditionsToken(conditionExprs []ConditionExpression) (conditionTokens []string, err error) {
|
||||
conditionTokens = make([]string, 0)
|
||||
if len(conditionExprs) > 0 {
|
||||
for _, conditionExpr := range conditionExprs {
|
||||
var logicCode = "AND"
|
||||
if conditionExpr.ConditionType == OR {
|
||||
logicCode = "OR"
|
||||
}
|
||||
var andTokens = make([]string, 0)
|
||||
if len(conditionExpr.SimpleExprs) > 0 {
|
||||
for _, simpleExpr := range conditionExpr.SimpleExprs {
|
||||
var simpleExprTokens = make([]string, 0)
|
||||
simpleExprTokens = append(simpleExprTokens, "`"+simpleExpr.TableAliasName+"` `"+simpleExpr.ColumnName+"`")
|
||||
if simpleExpr.ExprType == IsNull {
|
||||
simpleExprTokens = append(simpleExprTokens, "IS NULL")
|
||||
} else if simpleExpr.ExprType == NotNull {
|
||||
simpleExprTokens = append(simpleExprTokens, "NOT NULL")
|
||||
} else if simpleExpr.ExprType == Like {
|
||||
simpleExprTokens = append(simpleExprTokens, "LIKE", "'%"+simpleExpr.Values[0]+"%'")
|
||||
} else if simpleExpr.ExprType == LeftLike {
|
||||
simpleExprTokens = append(simpleExprTokens, "LIKE", "'%"+simpleExpr.Values[0]+"'")
|
||||
} else if simpleExpr.ExprType == RightJoin {
|
||||
simpleExprTokens = append(simpleExprTokens, "LIKE", "'"+simpleExpr.Values[0]+"%'")
|
||||
} else if simpleExpr.ExprType == Equal {
|
||||
if simpleExpr.ValueType == String {
|
||||
simpleExprTokens = append(simpleExprTokens, "=", "'"+simpleExpr.Values[0]+"'")
|
||||
} else {
|
||||
simpleExprTokens = append(simpleExprTokens, "=", simpleExpr.Values[0])
|
||||
}
|
||||
} else if simpleExpr.ExprType == NotEqual {
|
||||
if simpleExpr.ValueType == String {
|
||||
simpleExprTokens = append(simpleExprTokens, "!=", "'"+simpleExpr.Values[0]+"'")
|
||||
} else {
|
||||
simpleExprTokens = append(simpleExprTokens, "!=", simpleExpr.Values[0])
|
||||
}
|
||||
} else if simpleExpr.ExprType == GT {
|
||||
if simpleExpr.ValueType == String {
|
||||
simpleExprTokens = append(simpleExprTokens, ">", "'"+simpleExpr.Values[0]+"'")
|
||||
} else {
|
||||
simpleExprTokens = append(simpleExprTokens, ">", simpleExpr.Values[0])
|
||||
}
|
||||
} else if simpleExpr.ExprType == GTE {
|
||||
if simpleExpr.ValueType == String {
|
||||
simpleExprTokens = append(simpleExprTokens, ">=", "'"+simpleExpr.Values[0]+"'")
|
||||
} else {
|
||||
simpleExprTokens = append(simpleExprTokens, ">=", simpleExpr.Values[0])
|
||||
}
|
||||
} else if simpleExpr.ExprType == LT {
|
||||
if simpleExpr.ValueType == String {
|
||||
simpleExprTokens = append(simpleExprTokens, "<", "'"+simpleExpr.Values[0]+"'")
|
||||
} else {
|
||||
simpleExprTokens = append(simpleExprTokens, "<", simpleExpr.Values[0])
|
||||
}
|
||||
} else if simpleExpr.ExprType == LTE {
|
||||
if simpleExpr.ValueType == String {
|
||||
simpleExprTokens = append(simpleExprTokens, "<=", "'"+simpleExpr.Values[0]+"'")
|
||||
} else {
|
||||
simpleExprTokens = append(simpleExprTokens, "<=", simpleExpr.Values[0])
|
||||
}
|
||||
} else if simpleExpr.ExprType == In {
|
||||
if simpleExpr.ValueType == String {
|
||||
simpleExprTokens = append(simpleExprTokens, "IN(", "'"+strings.Join(simpleExpr.Values, "','")+"')")
|
||||
} else {
|
||||
simpleExprTokens = append(simpleExprTokens, "IN(", strings.Join(simpleExpr.Values, ","), ")")
|
||||
}
|
||||
} else if simpleExpr.ExprType == NotIn {
|
||||
if simpleExpr.ValueType == String {
|
||||
simpleExprTokens = append(simpleExprTokens, "NOT IN(", "'"+strings.Join(simpleExpr.Values, "','")+"')")
|
||||
} else {
|
||||
simpleExprTokens = append(simpleExprTokens, "NOT IN(", strings.Join(simpleExpr.Values, ","), ")")
|
||||
}
|
||||
} else {
|
||||
err = fmt.Errorf("unsupport expr type: %d", simpleExpr.ExprType)
|
||||
return
|
||||
}
|
||||
|
||||
andTokens = append(andTokens, strings.Join(simpleExprTokens, " "))
|
||||
}
|
||||
}
|
||||
conditionTokens = append(conditionTokens, strings.Join(andTokens, logicCode))
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
126
src/rtsp2rtmp/web/dyn_query/select_statement.go
Normal file
126
src/rtsp2rtmp/web/dyn_query/select_statement.go
Normal file
@@ -0,0 +1,126 @@
|
||||
package dyn_query
|
||||
|
||||
type SelectStatement struct {
|
||||
Selects []SelectExpr
|
||||
From []TableRef
|
||||
Join []JoinExpr
|
||||
SqlWhere []ConditionExpression
|
||||
Having []ConditionExpression
|
||||
Orders []OrderExpr
|
||||
}
|
||||
|
||||
type SelectExpr = ColumnRef
|
||||
|
||||
type ColumnRef struct {
|
||||
TableAliasName string
|
||||
ColumnName string
|
||||
}
|
||||
|
||||
type TableRef struct {
|
||||
AliasName string
|
||||
TableName string
|
||||
}
|
||||
|
||||
type JoinExpr struct {
|
||||
JoinType EJoinType
|
||||
TableRef
|
||||
On []ConditionExpression
|
||||
}
|
||||
|
||||
type ConditionExpression struct {
|
||||
ConditionType EConditionType
|
||||
SimpleExprs []SimpleExpr
|
||||
}
|
||||
|
||||
type SimpleExpr struct {
|
||||
ExprType EExprType
|
||||
ColumnRef
|
||||
ValueType EValueType
|
||||
Values []string
|
||||
}
|
||||
|
||||
type OrderExpr struct {
|
||||
OrderType EOrderType
|
||||
ColumnRef
|
||||
}
|
||||
|
||||
type EValueType = uint32
|
||||
|
||||
const (
|
||||
String = iota
|
||||
Number
|
||||
)
|
||||
|
||||
type EOrderType = uint32
|
||||
|
||||
const (
|
||||
ASC = iota
|
||||
DESC
|
||||
)
|
||||
|
||||
type EExprType uint32
|
||||
|
||||
const (
|
||||
IsNull = iota
|
||||
NotNull
|
||||
Like
|
||||
LeftLike
|
||||
RightLike
|
||||
Equal
|
||||
NotEqual
|
||||
GTE
|
||||
GT
|
||||
LT
|
||||
LTE
|
||||
In
|
||||
NotIn
|
||||
)
|
||||
|
||||
type EConditionType uint32
|
||||
|
||||
const (
|
||||
AND = iota
|
||||
OR
|
||||
)
|
||||
|
||||
type EJoinType uint32
|
||||
|
||||
const (
|
||||
InnerJoin = iota
|
||||
LeftJoin
|
||||
RightJoin
|
||||
)
|
||||
|
||||
func StartBuild() *SelectStatement {
|
||||
return new(SelectStatement)
|
||||
}
|
||||
|
||||
func (selectStatemet *SelectStatement) BuildSelect(selectExprs ...SelectExpr) *SelectStatement {
|
||||
selectStatemet.Selects = append(selectStatemet.Selects, selectExprs...)
|
||||
return selectStatemet
|
||||
}
|
||||
|
||||
func (selectStatemet *SelectStatement) BuildFrom(tableRefs ...TableRef) *SelectStatement {
|
||||
selectStatemet.From = append(selectStatemet.From, tableRefs...)
|
||||
return selectStatemet
|
||||
}
|
||||
|
||||
func (selectStatemet *SelectStatement) BuildJoin(joinExprs ...JoinExpr) *SelectStatement {
|
||||
selectStatemet.Join = append(selectStatemet.Join, joinExprs...)
|
||||
return selectStatemet
|
||||
}
|
||||
|
||||
func (selectStatemet *SelectStatement) BuildWhere(conditions ...ConditionExpression) *SelectStatement {
|
||||
selectStatemet.SqlWhere = append(selectStatemet.SqlWhere, conditions...)
|
||||
return selectStatemet
|
||||
}
|
||||
|
||||
func (selectStatemet *SelectStatement) BuildHaving(conditions ...ConditionExpression) *SelectStatement {
|
||||
selectStatemet.Having = append(selectStatemet.Having, conditions...)
|
||||
return selectStatemet
|
||||
}
|
||||
|
||||
func (selectStatemet *SelectStatement) BuildOrder(orders ...OrderExpr) *SelectStatement {
|
||||
selectStatemet.Orders = append(selectStatemet.Orders, orders...)
|
||||
return selectStatemet
|
||||
}
|
105
src/rtsp2rtmp/web/service/camera.go
Normal file
105
src/rtsp2rtmp/web/service/camera.go
Normal file
@@ -0,0 +1,105 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
)
|
||||
|
||||
func CameraInsert(e entity.Camera) (i int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
i, err = o.Insert(&e)
|
||||
if err != nil && err != orm.ErrLastInsertIdUnavailable {
|
||||
logs.Error("camera insert error : %v", err)
|
||||
return i, err
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
func CameraDelete(e entity.Camera) (i int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
i, err = o.Delete(&e)
|
||||
if err != nil {
|
||||
logs.Error("camera delete error : %v", err)
|
||||
return 0, err
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
func CameraUpdate(e entity.Camera) (i int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
i, err = o.Update(&e)
|
||||
if err != nil {
|
||||
logs.Error("camera update error : %v", err)
|
||||
return 0, err
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
func CameraSelectById(id string) (e entity.Camera, err error) {
|
||||
o := orm.NewOrm()
|
||||
e = entity.Camera{Id: id}
|
||||
|
||||
err = o.Read(&e)
|
||||
|
||||
if err == orm.ErrNoRows {
|
||||
logs.Error("查询不到")
|
||||
return e, err
|
||||
} else if err == orm.ErrMissPK {
|
||||
logs.Error("找不到主键")
|
||||
return e, err
|
||||
} else if err != nil {
|
||||
logs.Error("错误: %v", err)
|
||||
return e, err
|
||||
} else {
|
||||
return e, nil
|
||||
}
|
||||
}
|
||||
|
||||
func CameraSelectOne(q entity.Camera) (e entity.Camera, err error) {
|
||||
o := orm.NewOrm()
|
||||
err = o.QueryTable(new(entity.Camera)).Filter("code", q.Code).One(&e)
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return e, err
|
||||
}
|
||||
return e, nil
|
||||
}
|
||||
|
||||
func CameraCountByCode(code string) (count int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
count, err = o.QueryTable(new(entity.Camera)).Filter("code", code).Count()
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return count, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func CameraSelectAll() (es []entity.Camera, err error) {
|
||||
o := orm.NewOrm()
|
||||
// num, err := o.QueryTable(new(entity.Camera)).All(&es)
|
||||
|
||||
qb, _ := orm.NewQueryBuilder("postgres")
|
||||
|
||||
// Construct query object
|
||||
qb.Select("*").
|
||||
From("camera").
|
||||
LeftJoin("camera_share").On("camera_share.camera_id = camera.id").
|
||||
Where("camera.code like ?").
|
||||
// OrderBy("camera.id").Desc().
|
||||
Limit(1000).Offset(0)
|
||||
|
||||
// export raw query string from QueryBuilder object
|
||||
sql := qb.String()
|
||||
|
||||
// execute the raw query string
|
||||
o.Raw(sql, "%%").QueryRows(&es)
|
||||
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return es, err
|
||||
}
|
||||
logs.Debug("查询到%d条记录", 20)
|
||||
return es, nil
|
||||
}
|
@@ -1,24 +1,12 @@
|
||||
package models
|
||||
package service
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
)
|
||||
|
||||
type CameraShare struct {
|
||||
Id string `orm:"pk;column(id)" json:"id"`
|
||||
CameraId string `orm:"column(camera_id)" json:"cameraId"`
|
||||
Name string `orm:"column(name)" json:"name"`
|
||||
AuthCode string `orm:"column(auth_code)" json:"authCode"`
|
||||
Enabled int `orm:"column(enabled)" json:"enabled"`
|
||||
Created time.Time `orm:"column(created)" json:"created"`
|
||||
StartTime time.Time `orm:"column(start_time)" json:"startTime"`
|
||||
Deadline time.Time `orm:"column(deadline)" json:"deadline"`
|
||||
}
|
||||
|
||||
func CameraShareInsert(e CameraShare) (i int64, err error) {
|
||||
func CameraShareInsert(e entity.CameraShare) (i int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
i, err = o.Insert(&e)
|
||||
if err != nil && err != orm.ErrLastInsertIdUnavailable {
|
||||
@@ -28,7 +16,7 @@ func CameraShareInsert(e CameraShare) (i int64, err error) {
|
||||
return i, nil
|
||||
}
|
||||
|
||||
func CameraShareDelete(e CameraShare) (i int64, err error) {
|
||||
func CameraShareDelete(e entity.CameraShare) (i int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
i, err = o.Delete(&e)
|
||||
if err != nil {
|
||||
@@ -38,7 +26,7 @@ func CameraShareDelete(e CameraShare) (i int64, err error) {
|
||||
return i, nil
|
||||
}
|
||||
|
||||
func CameraShareUpdate(e CameraShare) (i int64, err error) {
|
||||
func CameraShareUpdate(e entity.CameraShare) (i int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
i, err = o.Update(&e)
|
||||
if err != nil {
|
||||
@@ -48,9 +36,9 @@ func CameraShareUpdate(e CameraShare) (i int64, err error) {
|
||||
return i, nil
|
||||
}
|
||||
|
||||
func CameraShareSelectById(id string) (e CameraShare, err error) {
|
||||
func CameraShareSelectById(id string) (e entity.CameraShare, err error) {
|
||||
o := orm.NewOrm()
|
||||
e = CameraShare{Id: id}
|
||||
e = entity.CameraShare{Id: id}
|
||||
|
||||
err = o.Read(&e)
|
||||
|
||||
@@ -68,9 +56,9 @@ func CameraShareSelectById(id string) (e CameraShare, err error) {
|
||||
}
|
||||
}
|
||||
|
||||
func CameraShareSelectOne(q CameraShare) (e CameraShare, err error) {
|
||||
func CameraShareSelectOne(q entity.CameraShare) (e entity.CameraShare, err error) {
|
||||
o := orm.NewOrm()
|
||||
err = o.QueryTable(new(CameraShare)).Filter("CameraId", q.CameraId).Filter("AuthCode", q.AuthCode).One(&e)
|
||||
err = o.QueryTable(new(entity.CameraShare)).Filter("CameraId", q.CameraId).Filter("AuthCode", q.AuthCode).One(&e)
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return e, err
|
||||
@@ -80,7 +68,7 @@ func CameraShareSelectOne(q CameraShare) (e CameraShare, err error) {
|
||||
|
||||
func CameraShareCountByCode(code string) (count int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
count, err = o.QueryTable(new(CameraShare)).Filter("code", code).Count()
|
||||
count, err = o.QueryTable(new(entity.CameraShare)).Filter("code", code).Count()
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return count, err
|
||||
@@ -88,9 +76,9 @@ func CameraShareCountByCode(code string) (count int64, err error) {
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func CameraShareSelectAll() (es []CameraShare, err error) {
|
||||
func CameraShareSelectAll() (es []entity.CameraShare, err error) {
|
||||
o := orm.NewOrm()
|
||||
num, err := o.QueryTable(new(CameraShare)).All(&es)
|
||||
num, err := o.QueryTable(new(entity.CameraShare)).All(&es)
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return es, err
|
||||
@@ -99,9 +87,9 @@ func CameraShareSelectAll() (es []CameraShare, err error) {
|
||||
return es, nil
|
||||
}
|
||||
|
||||
func CameraShareSelectByCameraId(cameraId string) (es []CameraShare, err error) {
|
||||
func CameraShareSelectByCameraId(cameraId string) (es []entity.CameraShare, err error) {
|
||||
o := orm.NewOrm()
|
||||
num, err := o.QueryTable(new(CameraShare)).Filter("CameraId", cameraId).All(&es)
|
||||
num, err := o.QueryTable(new(entity.CameraShare)).Filter("CameraId", cameraId).All(&es)
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return es, err
|
@@ -5,9 +5,9 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/rtspclientmanager"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
var taskInstance *task
|
||||
@@ -47,7 +47,7 @@ func (t *task) offlineCamera() {
|
||||
}
|
||||
}()
|
||||
for {
|
||||
css, err := models.CameraSelectAll()
|
||||
css, err := service.CameraSelectAll()
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
}
|
||||
@@ -57,7 +57,7 @@ func (t *task) offlineCamera() {
|
||||
}
|
||||
if exists := rtspclientmanager.GetSingleRtspClientManager().ExistsPublisher(cs.Code); !exists {
|
||||
cs.OnlineStatus = 0
|
||||
models.CameraUpdate(cs)
|
||||
service.CameraUpdate(cs)
|
||||
}
|
||||
}
|
||||
<-time.After(10 * time.Minute)
|
@@ -11,9 +11,9 @@ import (
|
||||
"github.com/beego/beego/v2/core/config"
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/controllers"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/result"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/controllers"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/result"
|
||||
)
|
||||
|
||||
var tokens sync.Map
|
||||
@@ -124,7 +124,7 @@ func Cors() gin.HandlerFunc {
|
||||
}
|
||||
}
|
||||
|
||||
//验证token
|
||||
// 验证token
|
||||
func Validate() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
if c.Request.URL.Path == "/system/login" || strings.HasPrefix(c.Request.URL.Path, "/live/") ||
|
||||
|
Reference in New Issue
Block a user