123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- package bullet_chat
- import (
- "encoding/json"
- "errors"
- "hongze/hongze_yb/models/tables/yb_bullet_chat"
- "hongze/hongze_yb/models/tables/yb_community_video"
- "hongze/hongze_yb/models/tables/yb_config"
- "hongze/hongze_yb/models/tables/yb_road_video"
- "math/rand"
- "time"
- )
- const (
- ConfBulletChatColor = "bullet_chat_color"
- )
- var (
- SourceBulletChatVideo int
- SourceBulletChatRoadVideo int
- )
- func init() {
- SourceBulletChatVideo = yb_bullet_chat.SourceBulletVideo
- SourceBulletChatRoadVideo = yb_bullet_chat.SourceBulletChatVideo
- }
- // BulletChatColor 弹幕颜色
- type BulletChatColor struct {
- Id int `json:"id" description:"颜色ID"`
- Color string `json:"color" description:"颜色#"`
- Remark string `json:"remark" description:"备注"`
- }
- // GetRandomColor 随机获取弹幕颜色
- func GetRandomColor() (color *BulletChatColor, err error) {
- // 读取配置
- var cond string
- var pars []interface{}
- cond += `config_code = ?`
- pars = append(pars, ConfBulletChatColor)
- confDao := new(yb_config.YbConfig)
- conf, e := confDao.Fetch(cond, pars)
- if e != nil {
- err = errors.New("获取弹幕颜色配置失败, Err: " + e.Error())
- return
- }
- if conf.ConfigID <= 0 {
- err = errors.New("获取弹幕颜色配置失败, ID为空")
- return
- }
- if conf.ConfigValue == "" {
- err = errors.New("弹幕颜色配置有误")
- return
- }
- colors := make([]*BulletChatColor, 0)
- if e = json.Unmarshal([]byte(conf.ConfigValue), &colors); e != nil {
- err = errors.New("弹幕颜色配置格式有误, Err: " + e.Error())
- return
- }
- defaultColor := &BulletChatColor{
- Id: 1,
- Color: "#FFFFFF",
- Remark: "白色",
- }
- colorLen := len(colors)
- if colorLen == 0 {
- color = defaultColor
- return
- }
- // 随机获取
- rand.Seed(time.Now().UnixNano())
- x := rand.Intn(colorLen)
- color = colors[x]
- return
- }
- // GetListMapBySourceAndIds 通过来源及IDs获取弹幕列表Map
- func GetListMapBySourceAndIds(source int, primaryIds []int) (idBulletsMap map[int][]*yb_bullet_chat.YbBulletChat, err error) {
- var cond string
- var pars []interface{}
- cond += `source = ? AND primary_id IN ?`
- pars = append(pars, source, primaryIds)
- list, e := yb_bullet_chat.GetList(cond, pars)
- if e != nil {
- err = errors.New("获取弹幕列表失败, Err: " + e.Error())
- return
- }
- idBulletsMap = make(map[int][]*yb_bullet_chat.YbBulletChat, 0)
- for i := range primaryIds {
- idBulletsMap[primaryIds[i]] = make([]*yb_bullet_chat.YbBulletChat, 0)
- }
- for i := range list {
- idBulletsMap[list[i].PrimaryID] = append(idBulletsMap[list[i].PrimaryID], list[i])
- }
- return
- }
- // CreateBulletChat 新增弹幕
- func CreateBulletChat(userId, primaryId, source, sourceAgent int, seconds float64, content string) (item *yb_bullet_chat.YbBulletChat, err error) {
- // 随机颜色
- color, e := GetRandomColor()
- if e != nil {
- err = errors.New("获取弹幕随机颜色失败, Err: " + e.Error())
- return
- }
- title := ""
- if source == 1 {
- vd, e := yb_community_video.GetItemById(primaryId)
- if e != nil {
- err = errors.New("获取视频失败, Err: " + e.Error())
- return
- }
- title = vd.Title
- } else {
- rv, e := yb_road_video.GetItemById(primaryId)
- if e != nil {
- err = errors.New("获取路演视频失败, Err: " + e.Error())
- return
- }
- title = rv.Title
- }
- nowTime := time.Now().Local()
- bc := new(yb_bullet_chat.YbBulletChat)
- bc.UserID = userId
- bc.PrimaryID = primaryId
- bc.Content = content
- bc.Seconds = seconds
- bc.Color = color.Color
- bc.Title = title
- bc.Source = source
- bc.SourceAgent = sourceAgent
- bc.CreateTime = nowTime
- bc.ModifyTime = nowTime
- if e := bc.Create(); e != nil {
- err = errors.New("新增弹幕失败, Err: " + e.Error())
- return
- }
- item = bc
- return
- }
|