123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- package service
- import (
- "context"
- "fmt"
- "strconv"
- "time"
- "go-common/app/interface/main/dm2/model"
- "go-common/library/database/elastic"
- "go-common/library/ecode"
- "go-common/library/log"
- xtime "go-common/library/time"
- )
- const (
- _dmRecentLimit = 1000
- _dateTimeFormart = "2006-01-02 15:04:05"
- )
- // DMUpRecent recent dm of upper.
- func (s *Service) DMUpRecent(c context.Context, mid, pn, ps int64) (res *model.DmRecentResponse, err error) {
- var (
- mids, aids []int64
- aidmap = make(map[int64]struct{})
- midMap = make(map[int64]struct{})
- searchResult *model.SearchRecentDMResult
- )
- if ps < 0 || pn < 1 {
- err = ecode.RequestErr
- return
- }
- if (pn-1)*ps >= _dmRecentLimit {
- return
- }
- searchParam := &model.SearchRecentDMParam{
- Type: model.SubTypeVideo,
- UpMid: mid,
- States: []int32{model.StateNormal, model.StateHide, model.StateMonitorAfter},
- Ps: int(ps),
- Pn: int(pn),
- Field: "ctime",
- Sort: elastic.OrderDesc,
- }
- searchResult, err = s.dao.SearhcDmRecent(c, searchParam)
- if err != nil || searchResult == nil || len(searchResult.Result) == 0 || searchResult.Page == nil {
- return
- }
- for _, item := range searchResult.Result {
- if _, ok := aidmap[item.Aid]; !ok {
- aids = append(aids, item.Aid)
- aidmap[item.Aid] = struct{}{}
- }
- if _, ok := midMap[item.Mid]; !ok {
- mids = append(mids, item.Mid)
- midMap[item.Mid] = struct{}{}
- }
- }
- arcMap, err := s.archiveInfos(c, aids)
- if err != nil {
- return
- }
- infoMap, err := s.accountInfos(c, mids)
- if err != nil {
- return
- }
- memebers := make([]*model.DMMember, 0, len(searchResult.Result))
- for _, item := range searchResult.Result {
- member := &model.DMMember{
- ID: item.ID,
- IDStr: strconv.FormatInt(item.ID, 10),
- Type: item.Type,
- Aid: item.Aid,
- Oid: item.Oid,
- Mid: item.Mid,
- MidHash: model.Hash(item.Mid, 0),
- Pool: item.Pool,
- State: item.State,
- Attrs: model.DMAttrNtoA(item.Attr),
- Msg: item.Msg,
- Mode: item.Mode,
- Color: fmt.Sprintf("%06x", item.Color),
- Progress: item.Progress,
- FontSize: item.FontSize,
- }
- if ctime, err := time.ParseInLocation(_dateTimeFormart, item.Ctime, time.Now().Location()); err == nil {
- member.Ctime = xtime.Time(ctime.Unix())
- }
- if arc, ok := arcMap[item.Aid]; ok {
- member.Title = arc.Title
- }
- if info, ok := infoMap[item.Mid]; ok {
- member.Uname = info.Name
- }
- memebers = append(memebers, member)
- }
- res = &model.DmRecentResponse{
- Data: memebers,
- Page: searchResult.Page,
- }
- if res.Page.Total > _dmRecentLimit {
- res.Page.Total = _dmRecentLimit
- }
- return
- }
- // DMUpSearch danmu list from search.
- func (s *Service) DMUpSearch(c context.Context, mid int64, p *model.SearchDMParams) (res *model.SearchDMResult, err error) {
- var (
- mids, dmids []int64
- )
- sub, err := s.subject(c, p.Type, p.Oid)
- if err != nil {
- return
- }
- if sub.Mid != mid {
- err = ecode.AccessDenied
- return
- }
- res = &model.SearchDMResult{}
- srchData, err := s.dao.SearchDM(c, p)
- if err != nil || srchData == nil {
- return
- }
- for _, v := range srchData.Result {
- dmids = append(dmids, v.ID)
- }
- dms, err := s.dmList(c, p.Type, p.Oid, dmids)
- if err != nil {
- log.Error("s.dms(%d,%v) error(%v)", p.Oid, dmids, err)
- return
- }
- for _, dm := range dms {
- mids = append(mids, dm.Mid)
- }
- infoMap, err := s.accountInfos(c, mids)
- if err != nil {
- return
- }
- for _, dm := range dms {
- var msg string
- if dm.Content != nil {
- msg = dm.Content.Msg
- } else {
- continue
- }
- if dm.ContentSpe != nil {
- msg = dm.ContentSpe.Msg
- }
- item := &model.DMMember{
- ID: dm.ID,
- IDStr: strconv.FormatInt(dm.ID, 10),
- Type: dm.Type,
- Aid: sub.Pid,
- Oid: dm.Oid,
- Mid: dm.Mid,
- MidHash: model.Hash(dm.Mid, 0),
- Pool: dm.Pool,
- State: dm.State,
- Attrs: dm.AttrNtoA(),
- Msg: msg,
- Ctime: dm.Ctime,
- Mode: dm.Content.Mode,
- Color: fmt.Sprintf("%06x", dm.Content.Color),
- Progress: dm.Progress,
- FontSize: dm.Content.FontSize,
- }
- if info, ok := infoMap[dm.Mid]; ok {
- item.Uname = info.Name
- }
- res.Result = append(res.Result, item)
- }
- res.Page.Num = srchData.Page.Num
- res.Page.Size = srchData.Page.Size
- res.Page.Total = srchData.Page.Total
- return
- }
- // UptSearchDMState update dm search state
- func (s *Service) UptSearchDMState(c context.Context, dmids []int64, oid int64, state, tp int32) (err error) {
- if err = s.dao.UptSearchDMState(c, dmids, oid, state, tp); err != nil {
- return
- }
- if err = s.dao.UptSearchRecentState(c, dmids, oid, state, tp); err != nil {
- return
- }
- return
- }
- // UptSearchDMPool update dm search pool
- func (s *Service) UptSearchDMPool(c context.Context, dmids []int64, oid int64, pool, tp int32) (err error) {
- if err = s.dao.UptSearchDMPool(c, dmids, oid, pool, tp); err != nil {
- return
- }
- if err = s.dao.UptSearchRecentPool(c, dmids, oid, pool, tp); err != nil {
- return
- }
- return
- }
- // UptSearchDMAttr update dm search attr
- func (s *Service) UptSearchDMAttr(c context.Context, dmids []int64, oid int64, attr, tp int32) (err error) {
- if err = s.dao.UptSearchDMAttr(c, dmids, oid, attr, tp); err != nil {
- return
- }
- if err = s.dao.UptSearchRecentAttr(c, dmids, oid, attr, tp); err != nil {
- return
- }
- return
- }
|