mirror of
https://github.com/lkmio/gb-cms.git
synced 2025-12-24 11:51:52 +08:00
104 lines
2.6 KiB
Go
104 lines
2.6 KiB
Go
package dao
|
|
|
|
import (
|
|
"gb-cms/common"
|
|
"gorm.io/gorm"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
SipDialogTypeSubscribeCatalog = iota + 1
|
|
SipDialogTypeSubscribeAlarm
|
|
SipDialogTypeSubscribePosition
|
|
)
|
|
|
|
// SipDialogModel 持久化SIP会话
|
|
type SipDialogModel struct {
|
|
GBModel
|
|
DeviceID string // 保存级联上级的会话, 使用server addr作为id
|
|
ChannelID string
|
|
CallID string
|
|
Dialog *common.RequestWrapper `json:"message,omitempty"`
|
|
Type int
|
|
RefreshTime time.Time
|
|
}
|
|
|
|
func (m *SipDialogModel) TableName() string {
|
|
return "lkm_dialog"
|
|
}
|
|
|
|
type daoDialog struct {
|
|
}
|
|
|
|
func (m *daoDialog) QueryDialogs(id string) ([]*SipDialogModel, error) {
|
|
var dialogs []*SipDialogModel
|
|
err := db.Where("device_id = ?", id).Find(&dialogs).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return dialogs, nil
|
|
}
|
|
|
|
func (m *daoDialog) QueryDialogsByType(id string, t int) ([]*SipDialogModel, error) {
|
|
var dialogs []*SipDialogModel
|
|
err := db.Where("device_id = ? and type = ?", id, t).Find(&dialogs).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return dialogs, nil
|
|
}
|
|
|
|
// DeleteDialogs 删除设备下的所有会话
|
|
func (m *daoDialog) DeleteDialogs(id string) error {
|
|
return DBTransaction(func(tx *gorm.DB) error {
|
|
return tx.Where("device_id = ?", id).Unscoped().Delete(&SipDialogModel{}).Error
|
|
})
|
|
}
|
|
|
|
// DeleteDialogsByType 删除设备下的指定类型会话
|
|
func (m *daoDialog) DeleteDialogsByType(id string, t int) (*SipDialogModel, error) {
|
|
var dialog SipDialogModel
|
|
err := DBTransaction(func(tx *gorm.DB) error {
|
|
err := tx.Where("device_id = ? and type = ?", id, t).First(&dialog).Error
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return tx.Unscoped().Delete(&dialog).Error
|
|
})
|
|
|
|
return &dialog, err
|
|
}
|
|
|
|
// Save 保存会话
|
|
func (m *daoDialog) Save(dialog *SipDialogModel) error {
|
|
return DBTransaction(func(tx *gorm.DB) error {
|
|
return tx.Save(dialog).Error
|
|
})
|
|
}
|
|
|
|
// QueryExpiredDialogs 查找即将过期的订阅会话
|
|
func (m *daoDialog) QueryExpiredDialogs(now time.Time) ([]*SipDialogModel, error) {
|
|
var dialogs []*SipDialogModel
|
|
err := db.Where("refresh_time <= ?", now).Find(&dialogs).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return dialogs, nil
|
|
}
|
|
|
|
// QueryDialogByCallID 根据callid查询dialog
|
|
func (m *daoDialog) QueryDialogByCallID(id string) (*SipDialogModel, error) {
|
|
var dialog SipDialogModel
|
|
err := db.Where("call_id = ?", id).First(&dialog).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &dialog, nil
|
|
}
|
|
|
|
func (m *daoDialog) UpdateRefreshTime(callid string, refreshTime time.Time) error {
|
|
return DBTransaction(func(tx *gorm.DB) error {
|
|
return tx.Model(&SipDialogModel{}).Where("call_id = ?", callid).Update("refresh_time", refreshTime).Error
|
|
})
|
|
}
|