media.go 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. package models
  2. import (
  3. "eta/eta_mini_crm_ht/utils"
  4. "fmt"
  5. "github.com/beego/beego/v2/client/orm"
  6. "strconv"
  7. "strings"
  8. "time"
  9. )
  10. type MediaType string
  11. type SendStatus string
  12. const (
  13. Video MediaType = "video"
  14. Audio MediaType = "audio"
  15. UNSEND SendStatus = "UNSEND"
  16. SEND SendStatus = "SEND"
  17. )
  18. func (m *Media) ToView() *ESMedia {
  19. return &ESMedia{
  20. MediaId: m.Id,
  21. AuthorId: m.AuthorId,
  22. AuthorName: m.AuthorName,
  23. MediaType: m.MediaType,
  24. Src: m.Src,
  25. MediaName: m.MediaName,
  26. SourceType: m.SourceType,
  27. MediaPlayMilliseconds: m.MediaPlayMilliseconds,
  28. PermissionIds: m.PermissionIds,
  29. PublishedTime: m.PublishedTime.Format(time.DateTime),
  30. }
  31. }
  32. type ESMedia struct {
  33. MediaId int `json:"mediaId"`
  34. AuthorId int `json:"authorId"`
  35. AuthorName string `json:"authorName"`
  36. CoverSrc int `json:"coverSrc"`
  37. MediaType MediaType `json:"mediaType"`
  38. Src string `json:"src"`
  39. MediaName string `json:"mediaName"`
  40. SourceType string `json:"sourceType"`
  41. MediaPlayMilliseconds int `json:"mediaPlayMilliseconds"`
  42. PermissionIds string `json:"permissionIds"`
  43. PublishedTime string `json:"publishedTime"`
  44. }
  45. type MediaView struct {
  46. MediaId int `json:"mediaId"`
  47. AuthorId int `json:"authorId"`
  48. AuthorName string `json:"authorName"`
  49. CoverSrc string `json:"coverSrc"`
  50. MediaType MediaType `json:"mediaType"`
  51. Src string `json:"src"`
  52. MediaName string `json:"mediaName"`
  53. SourceType string `json:"sourceType"`
  54. MediaPlayMilliseconds int `json:"mediaPlayMilliseconds"`
  55. PermissionIds string `json:"permissionIds"`
  56. PermissionNames string `json:"permission_names"`
  57. PublishedTime string `json:"publishedTime"`
  58. }
  59. func (m *Media) ToMediaView() (message *MediaView) {
  60. message = &MediaView{
  61. MediaId: m.Id,
  62. AuthorId: m.AuthorId,
  63. AuthorName: m.AuthorName,
  64. MediaType: m.MediaType,
  65. Src: m.Src,
  66. MediaName: m.MediaName,
  67. SourceType: m.SourceType,
  68. MediaPlayMilliseconds: m.MediaPlayMilliseconds,
  69. PermissionIds: m.PermissionIds,
  70. PublishedTime: m.PublishedTime.Format(time.DateTime),
  71. }
  72. image, err := GetImageById(m.CoverSrc)
  73. if err != nil || image == nil {
  74. message.CoverSrc = ""
  75. } else {
  76. message.CoverSrc = image.SrcUrl
  77. }
  78. ids := strings.Split(m.PermissionIds, ",")
  79. var idList []int
  80. for _, id := range ids {
  81. var idInt int
  82. idInt, err = strconv.Atoi(id)
  83. if err != nil {
  84. utils.FileLog.Error("转换品种名称失败:%v", err)
  85. break
  86. }
  87. idList = append(idList, idInt)
  88. }
  89. if len(idList) > 0 {
  90. names, err := GetPermissionNames(idList)
  91. if err != nil {
  92. utils.FileLog.Error("获取品种名称失败:%v", err)
  93. }
  94. message.PermissionNames = strings.Join(names, ",")
  95. }
  96. return
  97. }
  98. func (m *Media) ToMessageView() (message *MessageMedia) {
  99. message = &MessageMedia{
  100. MediaId: m.Id,
  101. AuthorId: m.AuthorId,
  102. AuthorName: m.AuthorName,
  103. MediaType: m.MediaType,
  104. Src: m.Src,
  105. MediaName: m.MediaName,
  106. SourceType: m.SourceType,
  107. SendStatus: m.SendStatus,
  108. MediaPlayMilliseconds: m.MediaPlayMilliseconds,
  109. PermissionIds: m.PermissionIds,
  110. PublishedTime: m.PublishedTime.Format(time.DateTime),
  111. }
  112. image, err := GetImageById(m.CoverSrc)
  113. if err != nil || image == nil {
  114. message.CoverSrc = ""
  115. } else {
  116. message.CoverSrc = image.SrcUrl
  117. }
  118. ids := strings.Split(m.PermissionIds, ",")
  119. var idList []int
  120. for _, id := range ids {
  121. var idInt int
  122. idInt, err = strconv.Atoi(id)
  123. if err != nil {
  124. utils.FileLog.Error("转换品种名称失败:%v", err)
  125. break
  126. }
  127. idList = append(idList, idInt)
  128. }
  129. if len(idList) > 0 {
  130. names, err := GetPermissionNames(idList)
  131. if err != nil {
  132. utils.FileLog.Error("获取品种名称失败:%v", err)
  133. }
  134. message.PermissionNames = strings.Join(names, ",")
  135. }
  136. return
  137. }
  138. type MessageMedia struct {
  139. MediaId int `json:"mediaId"`
  140. AuthorId int `json:"authorId"`
  141. AuthorName string `json:"authorName"`
  142. CoverSrc string `json:"coverSrc"`
  143. MediaType MediaType `json:"mediaType"`
  144. Src string `json:"src"`
  145. MediaName string `json:"mediaName"`
  146. SourceType string `json:"sourceType"`
  147. SendStatus SendStatus `json:"sendStatus"`
  148. MediaPlayMilliseconds int `json:"mediaPlayMilliseconds"`
  149. PermissionIds string `json:"permissionIds"`
  150. PermissionNames string `description:"permission_names"`
  151. PublishedTime string `json:"publishedTime"`
  152. }
  153. type Media struct {
  154. Id int `orm:"pk;auto" description:"id"`
  155. AuthorId int `description:"author_id"`
  156. AuthorName string `description:"author_name"`
  157. CoverSrc int `description:"cover_src"`
  158. MediaType MediaType `description:"media_type"`
  159. Src string `description:"src"`
  160. MediaName string `description:"media_name"`
  161. SourceType string `description:"source_type"`
  162. MediaPlayMilliseconds int `description:"media_play_milliseconds"`
  163. PermissionIds string `description:"permission_ids"`
  164. PublishedTime time.Time `description:"published_time"`
  165. SendStatus SendStatus `json:"sendStatus"`
  166. Deleted int `description:"deleted"`
  167. CreatedTime time.Time `description:"created_time"`
  168. UpdatedTime time.Time `description:"updated_time"`
  169. }
  170. func GetMediaCountByCondition(media MediaType, condition string, pars []interface{}) (count int, err error) {
  171. o := orm.NewOrm()
  172. sql := `SELECT COUNT(*) AS count FROM media WHERE 1 =1 AND media_type = ? `
  173. if condition != "" {
  174. sql += condition
  175. }
  176. err = o.Raw(sql, media, pars).QueryRow(&count)
  177. return
  178. }
  179. func (m *Media) UpdateSendStatus() (err error) {
  180. o := orm.NewOrm()
  181. m.SendStatus = SEND
  182. _, err = o.Update(m, "send_status")
  183. return
  184. }
  185. func GetMediaById(media MediaType, id int) (item *Media, err error) {
  186. o := orm.NewOrm()
  187. sql := `SELECT * FROM media WHERE 1 = 1 AND media_type = ? and id =? AND deleted=0`
  188. err = o.Raw(sql, media, id).QueryRow(&item)
  189. return
  190. }
  191. func GetMediaByCondition(media MediaType, condition string, sortCondition string, pars []interface{}, startPage, pageSize int) (items []*Media, err error) {
  192. o := orm.NewOrm()
  193. sql := `SELECT * FROM media WHERE 1 = 1 AND media_type = ? AND deleted=0`
  194. if condition != "" {
  195. sql += condition
  196. }
  197. if sortCondition != "" {
  198. sql += sortCondition // 排序
  199. }
  200. sql += ` LIMIT ?, ?`
  201. _, err = o.Raw(sql, media, pars, startPage, pageSize).QueryRows(&items)
  202. return
  203. }
  204. func InsertMedia(m *Media) (err error) {
  205. tx, err := orm.NewOrm().Begin()
  206. if err != nil {
  207. return
  208. }
  209. if err != nil {
  210. fmt.Printf("%v", err)
  211. return
  212. }
  213. defer func() {
  214. if r := recover(); r != nil {
  215. _ = tx.Rollback()
  216. return
  217. }
  218. if err != nil {
  219. _ = tx.Rollback()
  220. } else {
  221. _ = tx.Commit()
  222. }
  223. }()
  224. insertId, err := tx.Insert(m)
  225. if err != nil {
  226. _ = tx.Rollback()
  227. return
  228. }
  229. m.Id = int(insertId)
  230. permissionMappingList := make([]*MediaPermissionMapping, 0)
  231. ids := strings.Split(m.PermissionIds, ",")
  232. for _, item := range ids {
  233. x, _ := strconv.Atoi(item)
  234. permissionMappingList = append(permissionMappingList, &MediaPermissionMapping{
  235. MediaId: m.Id,
  236. MediaType: m.MediaType,
  237. PermissionId: x,
  238. CreatedTime: time.Now(),
  239. })
  240. }
  241. _, err = tx.InsertMulti(500, permissionMappingList)
  242. return
  243. }
  244. func DeleteMedia(m *Media) (err error) {
  245. o := orm.NewOrm()
  246. if err != nil {
  247. return err
  248. }
  249. tx, err := o.Begin()
  250. if err != nil {
  251. fmt.Printf("%v", err)
  252. return
  253. }
  254. defer func() {
  255. if r := recover(); r != nil {
  256. _ = tx.Rollback()
  257. return
  258. }
  259. }()
  260. err = DeleteMappingsById(m.Id)
  261. if err != nil {
  262. _ = tx.Rollback()
  263. return
  264. }
  265. _, err = o.Update(m, "deleted")
  266. if err != nil {
  267. _ = tx.Rollback()
  268. return
  269. }
  270. _ = tx.Commit()
  271. return
  272. }
  273. func UpdateMedia(m *Media) (updateId int64, err error) {
  274. o := orm.NewOrm()
  275. if err != nil {
  276. return 0, err
  277. }
  278. tx, err := o.Begin()
  279. if err != nil {
  280. fmt.Printf("%v", err)
  281. return
  282. }
  283. defer func() {
  284. if r := recover(); r != nil {
  285. _ = tx.Rollback()
  286. return
  287. }
  288. }()
  289. err = DeleteMappingsById(m.Id)
  290. if err != nil {
  291. _ = tx.Rollback()
  292. return
  293. }
  294. updateId, err = o.Update(m, "author_id", "author_name", "cover_src", "src", "media_play_milliseconds", "permission_ids")
  295. if err != nil {
  296. _ = tx.Rollback()
  297. return
  298. }
  299. ids := strings.Split(m.PermissionIds, ",")
  300. for _, item := range ids {
  301. x, _ := strconv.Atoi(item)
  302. mapping := &MediaPermissionMapping{
  303. MediaId: m.Id,
  304. MediaType: m.MediaType,
  305. PermissionId: x,
  306. CreatedTime: time.Now(),
  307. }
  308. _, err = o.Insert(mapping)
  309. if err != nil {
  310. _ = tx.Rollback()
  311. return
  312. }
  313. }
  314. _ = tx.Commit()
  315. return
  316. }