camera.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package models
  2. import (
  3. "bytes"
  4. "fmt"
  5. "time"
  6. )
  7. //网关下挂载的设备串口设备,如485接口的设备,数据来自设备上报
  8. type CameraDevice struct {
  9. ID string `gorm:"type:varchar(32);primary_key"` //设备ID,DID
  10. Name string `gorm:"type:varchar(64)"` //设备名称
  11. GID string `gorm:"type:varchar(32)"` //网关ID
  12. IP string `gorm:"type:varchar(40)"` //ip
  13. SN string `gorm:"type:varchar(64)"` //设备序列号
  14. Brand string `gorm:"type:varchar(24)"` //设备品牌
  15. Model string `gorm:"type:varchar(32)"` //设备型号
  16. DevType int `gorm:"type:int"` //3摄象机,4一键报警(带视频)
  17. User string `gorm:"-"` //onvif用户名
  18. Password string `gorm:"-"` //onvif密码
  19. RtmpServer string `gorm:"-"` //流地址
  20. WebServer string `gorm:"-"` //web地址
  21. Event string `gorm:"-"` //需要订阅的事件主题
  22. Gb28181 bool `gorm:"-"` //国标28181,是否已开启GB28181
  23. Tenant string `gorm:"type:varchar(8)"` //租户ID
  24. State int `gorm:"type:int"` //1启用,0禁用
  25. //LcModel
  26. }
  27. func (CameraDevice) TableName() string {
  28. return "t_device_camera"
  29. }
  30. func (o CameraDevice) Delete() error {
  31. return G_db.Model(&o).Updates(map[string]interface{}{"state": 0}).Error
  32. }
  33. func (o CameraDevice) IsExistedByCode() (bool, error) {
  34. var count int = 0
  35. err := G_db.Model(&o).Where(" id = ? ", o.ID).Count(&count).Error
  36. return count > 0, err
  37. }
  38. func (o CameraDevice) SaveFromWeb() error {
  39. has, err := o.IsExistedByCode()
  40. if err != nil {
  41. return err
  42. }
  43. if has { //更新
  44. return G_db.Model(&o).Updates(map[string]interface{}{"name": o.Name, "g_id": o.GID,
  45. "dev_type": o.DevType, "tenant": o.Tenant, "state": o.State}).Error
  46. } else { //插入
  47. return G_db.Create(&o).Error
  48. }
  49. }
  50. func (o CameraDevice) SaveFromGateway() error {
  51. return nil
  52. has, err := o.IsExistedByCode()
  53. if err != nil {
  54. return err
  55. }
  56. if has { //更新
  57. return G_db.Model(&o).Updates(map[string]interface{}{"name": o.Name, "g_id": o.GID, "ip": o.IP, "sn": o.SN,
  58. "brand": o.Brand, "model": o.Model, "dev_type": o.DevType, "user": o.User, "password": o.Password,
  59. "rtmp_server": o.RtmpServer, "web_server": o.WebServer, "event": o.Event, "gb28181": o.Gb28181}).Error
  60. } else { //插入
  61. return G_db.Create(&o).Error
  62. }
  63. }
  64. func CameraDeviceUpdateState(id string, state int) error {
  65. return G_db.Model(CameraDevice{}).Where("id = ?", id).Updates(map[string]interface{}{"state": state}).Error
  66. }
  67. type CameraInfo struct {
  68. GID string
  69. Tenant string
  70. Gb28181 bool
  71. }
  72. func GetCameraInfoByID(id string) (*CameraInfo, error) {
  73. var ci CameraInfo
  74. err := G_db.Model(&CameraDevice{}).Select([]string{"id", "g_id", "tenant", "gb28181"}).Where("id = ? ", id).Scan(&ci).Error
  75. return &ci, err
  76. }
  77. //IPC Preset
  78. type IpcPresets struct {
  79. ID string `gorm:"type:varchar(32);primary_key"`
  80. Token string `gorm:"type:varchar(16);primary_key"`
  81. Name string `gorm:"type:varchar(40)"`
  82. X float32 `gorm:"type:decimal(8,5)"`
  83. Y float32 `gorm:"type:decimal(8,5)"`
  84. Z float32 `gorm:"type:decimal(8,5)"`
  85. File string `gorm:"type:varchar(64)"` //预置位快照
  86. Mark string `gorm:"type:varchar(128)"` //备注
  87. CreatedAt time.Time
  88. UpdatedAt time.Time
  89. }
  90. func (IpcPresets) TableName() string {
  91. return "t_device_ipc_presets"
  92. }
  93. func MultiInsertIpcPresets(datas []IpcPresets) error {
  94. if len(datas) == 0 {
  95. return nil
  96. }
  97. var buffer bytes.Buffer
  98. sql := "insert into t_device_ipc_presets (id,token,name,x,y,z,file,mark,created_at) values"
  99. if _, err := buffer.WriteString(sql); err != nil {
  100. return err
  101. }
  102. for i, e := range datas {
  103. if i == len(datas)-1 {
  104. buffer.WriteString(fmt.Sprintf("('%s','%s','%s',%f,%f,%f,'%s','%s','%s');",
  105. e.ID, e.Token, e.Name, e.X, e.Y, e.Z, e.File, e.Mark, e.CreatedAt.Format("2006-01-02 15:04:05")))
  106. } else {
  107. buffer.WriteString(fmt.Sprintf("('%s','%s','%s',%f,%f,%f,'%s','%s','%s'),",
  108. e.ID, e.Token, e.Name, e.X, e.Y, e.Z, e.File, e.Mark, e.CreatedAt.Format("2006-01-02 15:04:05")))
  109. }
  110. }
  111. return G_db.Exec(buffer.String()).Error
  112. }
  113. func GetPresetsByID(id string) ([]IpcPresets, error) {
  114. var arr []IpcPresets
  115. err := G_db.Model(&IpcPresets{}).Where("id = ? ", id).Find(&arr).Error
  116. return arr, err
  117. }
  118. func (o IpcPresets) IsExistedByCode() (bool, error) {
  119. var count int = 0
  120. err := G_db.Model(&IpcPresets{}).Where("id = ? AND token = ? ", o.ID, o.Token).Count(&count).Error
  121. return count > 0, err
  122. }
  123. func (o IpcPresets) SaveFromGateway() error {
  124. has, err := o.IsExistedByCode()
  125. if err != nil {
  126. return err
  127. }
  128. if has { //更新
  129. return G_db.Model(&o).Updates(map[string]interface{}{"name": o.Name, "x": o.X, "y": o.Y, "z": o.Z}).Error
  130. } else { //插入
  131. return G_db.Create(&o).Error
  132. }
  133. }
  134. func (o IpcPresets) SaveFromGateway2() error {
  135. has, err := o.IsExistedByCode()
  136. if err != nil {
  137. return err
  138. }
  139. if has { //更新
  140. return G_db.Model(&o).Updates(map[string]interface{}{"name": o.Name, "x": o.X, "y": o.Y, "z": o.Z, "file": o.File}).Error
  141. } else { //插入
  142. return G_db.Create(&o).Error
  143. }
  144. }