package busmodels import ( orm "device-manage/common/global" "errors" "fmt" ) //完整播放信息列表. 包括视频属性以及播放列表. type PlayList struct { BusPlayAttri `json:"playAttri"` VideoList []string `json:"videoList"` } //是bus_play_item 和 bus_play_attri 表的主表, 包含这两个表的外键. //在添加BusPlayMenu表数据的时候, 同时添加bus_play_attri表的数据, 删除 BusPlayMenu表数据的时候,删除BusPlayItem和BusPlayAttri表数据. //播放列表数据表 type BusPlayMenu struct { MenuId int `json:"menuId" gorm:"primary_key;AUTO_INCREMENT"` MenuName string `json:"menuName" gorm:"size:128;"` Remark string `json:"remark" gorm:"size:128;"` CreateBy string `json:"createBy" gorm:"size:128;"` UpdateBy string `json:"updateBy" gorm:"size:128;"` BaseModel BusPlayAttri BusPlayAttri `gorm:"foreignKey:MenuId;REFERENCES bus_play_menu(menu_id) ON DELETE CASCADE ON UPDATE CASCADE"` } func (BusPlayMenu) TableName() string { return "bus_play_menu" } func (e *BusPlayMenu) Insert() (id int, err error) { // check 用户名 var playAttri BusPlayAttri var count int64 orm.Eloquent.Table(e.TableName()).Where("menu_name = ?", e.MenuName).Count(&count) if count > 0 { err = errors.New("播放列表 已存在!") return } //添加数据 if err = orm.Eloquent.Table(e.TableName()).Create(&e).Error; err != nil { return } id = e.MenuId playAttri.MenuId = e.MenuId playAttri.Volume = 0 playAttri.PlaySwitch = 0 playAttri.StartTime = "06:00:00" playAttri.EndTime = "18:00:00" playAttri.Subtitle = "" playAttri.SubtitleLocation = "" playAttri.OwnerId = e.CreateBy //添加数据 if err = orm.Eloquent.Table(playAttri.TableName()).Create(&playAttri).Error; err != nil { return } return } func (e *BusPlayMenu) Get() (BusPlayMenu, error) { var doc BusPlayMenu table := orm.Eloquent.Table(e.TableName()) if e.MenuId != 0 { table = table.Where("menu_id = ?", e.MenuId) } if err := table.First(&doc).Error; err != nil { return doc, err } return doc, nil } //获取某个MenuId列表下面的所有的item func (e *BusPlayMenu) GetPlayMenuList() ([]BusPlayMenu, int, error) { var doc []BusPlayMenu table := orm.Eloquent.Table(e.TableName()) var count int64 if err := table.Find(&doc).Count(&count).Error; err != nil { return nil, 0, err } return doc, int(count), nil } func (e *BusPlayMenu) BatchDelete(id []int) (Result bool, err error) { if err = orm.Eloquent.Table(e.TableName()).Where("menu_id in (?)", id).Delete(&BusPlayMenu{}).Error; err != nil { return } Result = true return } func (e *BusPlayMenu) Update(id int) (update BusPlayMenu, err error) { if err = orm.Eloquent.Table(e.TableName()).First(&update, id).Error; err != nil { return } //参数1:是要修改的数据 //参数2:是修改的数据 if err = orm.Eloquent.Table(e.TableName()).Model(&update).Updates(&e).Error; err != nil { return } return } // item 表 以 menu表 menuId为外键, 当playmenu表删除 menuid的时候, item表所有包含此外键的数据全部被级联删除. // videoId也是外键, 是bus_video表的id, 当此表包含video_id外键的时候, bus_video表不可删除此视频 //所有播放列表总的item表 type BusPlayItem struct { ItemId int `json:"itemId" gorm:"primary_key;AUTO_INCREMENT"` MenuId int `json:"menuId" gorm:""` VideoId int `json:"videoId" gorm:""` CreateBy string `json:"createBy" gorm:"size:128;"` UpdateBy string `json:"updateBy" gorm:"size:128;"` BaseModel } type BusPlayItemValue struct { ItemId int `json:"itemId" gorm:"primary_key;AUTO_INCREMENT"` MenuId int `json:"menuId" gorm:""` VideoId int `json:"videoId" gorm:""` CreateBy string `json:"createBy" gorm:"size:128;"` UpdateBy string `json:"updateBy" gorm:"size:128;"` BaseModel VideoName string `json:"videoName" gorm:"size:128;"` Size string `json:"size" gorm:"size:128;"` VideoTime string `json:"videoTime" gorm:"size:128;"` } func (BusPlayItem) TableName() string { return "bus_play_item" } //获取某个MenuId列表下面的所有的item func (e *BusPlayItem) GetPlayList() ([]BusPlayItemValue, int, error) { var doc []BusPlayItemValue table := orm.Eloquent.Select("bus_play_item.*, bus_video.video_name, bus_video.size, bus_video.video_time").Table(e.TableName()) table = table.Joins("inner join bus_video on bus_video.video_id = bus_play_item.video_id") if e.MenuId != 0 { table = table.Where("menu_id = ?", e.MenuId) } var count int64 if err := table.Find(&doc).Count(&count).Error; err != nil { return nil, 0, err } return doc, int(count), nil } func (e *BusPlayItem) Insert() (id int, err error) { // check 用户名 var count int64 table := orm.Eloquent.Table(e.TableName()) if e.MenuId != 0 { table = table.Where("menu_id = ?", e.MenuId) } if e.VideoId != 0 { table = table.Where("video_id = ?", e.VideoId) } table.Count(&count) fmt.Println(count) if count > 0 { err = errors.New("列表视频 已存在!") e.Delete(e.MenuId, e.VideoId) return } //添加数据 if err = orm.Eloquent.Table(e.TableName()).Create(&e).Error; err != nil { return } id = e.ItemId return } //从列表批量移除视频 func (e *BusPlayItem) BatchDelete(id []int) (Result bool, err error) { if err = orm.Eloquent.Table(e.TableName()).Where("item_id in (?)", id).Delete(&BusPlayItem{}).Error; err != nil { return } Result = true return } func (e *BusPlayItem) Delete(menuid int, vid int) (Result bool, err error) { if err = orm.Eloquent.Table(e.TableName()).Where("video_id = ? , menu_id = ?", vid, menuid).Delete(&BusPlayItem{}).Error; err != nil { return } Result = true return }