playlist.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package busmodels
  2. import (
  3. orm "device-manage/common/global"
  4. "errors"
  5. "fmt"
  6. )
  7. //完整播放信息列表. 包括视频属性以及播放列表.
  8. type PlayList struct {
  9. BusPlayAttri `json:"playAttri"`
  10. VideoList []string `json:"videoList"`
  11. }
  12. //是bus_play_item 和 bus_play_attri 表的主表, 包含这两个表的外键.
  13. //在添加BusPlayMenu表数据的时候, 同时添加bus_play_attri表的数据, 删除 BusPlayMenu表数据的时候,删除BusPlayItem和BusPlayAttri表数据.
  14. //播放列表数据表
  15. type BusPlayMenu struct {
  16. MenuId int `json:"menuId" gorm:"primary_key;AUTO_INCREMENT"`
  17. MenuName string `json:"menuName" gorm:"size:128;"`
  18. Remark string `json:"remark" gorm:"size:128;"`
  19. CreateBy string `json:"createBy" gorm:"size:128;"`
  20. UpdateBy string `json:"updateBy" gorm:"size:128;"`
  21. BaseModel
  22. BusPlayAttri BusPlayAttri `gorm:"foreignKey:MenuId;REFERENCES bus_play_menu(menu_id) ON DELETE CASCADE ON UPDATE CASCADE"`
  23. }
  24. func (BusPlayMenu) TableName() string {
  25. return "bus_play_menu"
  26. }
  27. func (e *BusPlayMenu) Insert() (id int, err error) {
  28. // check 用户名
  29. var playAttri BusPlayAttri
  30. var count int64
  31. orm.Eloquent.Table(e.TableName()).Where("menu_name = ?", e.MenuName).Count(&count)
  32. if count > 0 {
  33. err = errors.New("播放列表 已存在!")
  34. return
  35. }
  36. //添加数据
  37. if err = orm.Eloquent.Table(e.TableName()).Create(&e).Error; err != nil {
  38. return
  39. }
  40. id = e.MenuId
  41. playAttri.MenuId = e.MenuId
  42. playAttri.Volume = 0
  43. playAttri.PlaySwitch = 0
  44. playAttri.StartTime = "06:00:00"
  45. playAttri.EndTime = "18:00:00"
  46. playAttri.Subtitle = ""
  47. playAttri.SubtitleLocation = ""
  48. playAttri.OwnerId = e.CreateBy
  49. //添加数据
  50. if err = orm.Eloquent.Table(playAttri.TableName()).Create(&playAttri).Error; err != nil {
  51. return
  52. }
  53. return
  54. }
  55. func (e *BusPlayMenu) Get() (BusPlayMenu, error) {
  56. var doc BusPlayMenu
  57. table := orm.Eloquent.Table(e.TableName())
  58. if e.MenuId != 0 {
  59. table = table.Where("menu_id = ?", e.MenuId)
  60. }
  61. if err := table.First(&doc).Error; err != nil {
  62. return doc, err
  63. }
  64. return doc, nil
  65. }
  66. //获取某个MenuId列表下面的所有的item
  67. func (e *BusPlayMenu) GetPlayMenuList() ([]BusPlayMenu, int, error) {
  68. var doc []BusPlayMenu
  69. table := orm.Eloquent.Table(e.TableName())
  70. var count int64
  71. if err := table.Find(&doc).Count(&count).Error; err != nil {
  72. return nil, 0, err
  73. }
  74. return doc, int(count), nil
  75. }
  76. func (e *BusPlayMenu) BatchDelete(id []int) (Result bool, err error) {
  77. if err = orm.Eloquent.Table(e.TableName()).Where("menu_id in (?)", id).Delete(&BusPlayMenu{}).Error; err != nil {
  78. return
  79. }
  80. Result = true
  81. return
  82. }
  83. func (e *BusPlayMenu) Update(id int) (update BusPlayMenu, err error) {
  84. if err = orm.Eloquent.Table(e.TableName()).First(&update, id).Error; err != nil {
  85. return
  86. }
  87. //参数1:是要修改的数据
  88. //参数2:是修改的数据
  89. if err = orm.Eloquent.Table(e.TableName()).Model(&update).Updates(&e).Error; err != nil {
  90. return
  91. }
  92. return
  93. }
  94. // item 表 以 menu表 menuId为外键, 当playmenu表删除 menuid的时候, item表所有包含此外键的数据全部被级联删除.
  95. // videoId也是外键, 是bus_video表的id, 当此表包含video_id外键的时候, bus_video表不可删除此视频
  96. //所有播放列表总的item表
  97. type BusPlayItem struct {
  98. ItemId int `json:"itemId" gorm:"primary_key;AUTO_INCREMENT"`
  99. MenuId int `json:"menuId" gorm:""`
  100. VideoId int `json:"videoId" gorm:""`
  101. CreateBy string `json:"createBy" gorm:"size:128;"`
  102. UpdateBy string `json:"updateBy" gorm:"size:128;"`
  103. BaseModel
  104. }
  105. type BusPlayItemValue struct {
  106. ItemId int `json:"itemId" gorm:"primary_key;AUTO_INCREMENT"`
  107. MenuId int `json:"menuId" gorm:""`
  108. VideoId int `json:"videoId" gorm:""`
  109. CreateBy string `json:"createBy" gorm:"size:128;"`
  110. UpdateBy string `json:"updateBy" gorm:"size:128;"`
  111. BaseModel
  112. VideoName string `json:"videoName" gorm:"size:128;"`
  113. Size string `json:"size" gorm:"size:128;"`
  114. VideoTime string `json:"videoTime" gorm:"size:128;"`
  115. }
  116. func (BusPlayItem) TableName() string {
  117. return "bus_play_item"
  118. }
  119. //获取某个MenuId列表下面的所有的item
  120. func (e *BusPlayItem) GetPlayList() ([]BusPlayItemValue, int, error) {
  121. var doc []BusPlayItemValue
  122. table := orm.Eloquent.Select("bus_play_item.*, bus_video.video_name, bus_video.size, bus_video.video_time").Table(e.TableName())
  123. table = table.Joins("inner join bus_video on bus_video.video_id = bus_play_item.video_id")
  124. if e.MenuId != 0 {
  125. table = table.Where("menu_id = ?", e.MenuId)
  126. }
  127. var count int64
  128. if err := table.Find(&doc).Count(&count).Error; err != nil {
  129. return nil, 0, err
  130. }
  131. return doc, int(count), nil
  132. }
  133. func (e *BusPlayItem) Insert() (id int, err error) {
  134. // check 用户名
  135. var count int64
  136. table := orm.Eloquent.Table(e.TableName())
  137. if e.MenuId != 0 {
  138. table = table.Where("menu_id = ?", e.MenuId)
  139. }
  140. if e.VideoId != 0 {
  141. table = table.Where("video_id = ?", e.VideoId)
  142. }
  143. table.Count(&count)
  144. fmt.Println(count)
  145. if count > 0 {
  146. err = errors.New("列表视频 已存在!")
  147. e.Delete(e.MenuId, e.VideoId)
  148. return
  149. }
  150. //添加数据
  151. if err = orm.Eloquent.Table(e.TableName()).Create(&e).Error; err != nil {
  152. return
  153. }
  154. id = e.ItemId
  155. return
  156. }
  157. //从列表批量移除视频
  158. func (e *BusPlayItem) BatchDelete(id []int) (Result bool, err error) {
  159. if err = orm.Eloquent.Table(e.TableName()).Where("item_id in (?)", id).Delete(&BusPlayItem{}).Error; err != nil {
  160. return
  161. }
  162. Result = true
  163. return
  164. }
  165. func (e *BusPlayItem) Delete(menuid int, vid int) (Result bool, err error) {
  166. if err = orm.Eloquent.Table(e.TableName()).Where("video_id = ? , menu_id = ?", vid, menuid).Delete(&BusPlayItem{}).Error; err != nil {
  167. return
  168. }
  169. Result = true
  170. return
  171. }