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 }