You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
4.1 KiB
167 lines
4.1 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"time" |
|
|
|
"go-common/app/admin/main/dm/model" |
|
"go-common/app/service/main/archive/api" |
|
"go-common/app/service/main/archive/model/archive" |
|
"go-common/library/log" |
|
manager "go-common/library/queue/databus/report" |
|
) |
|
|
|
// ArchiveList get archive list. |
|
func (s *Service) ArchiveList(c context.Context, req *model.ArchiveListReq) (res *model.ArchiveResult, err error) { |
|
var ( |
|
oids, aids []int64 |
|
aidMap = make(map[int64]struct{}) |
|
arcMap = make(map[int64]*model.ArcVideo) |
|
archiveTypes = make(map[int64]*model.ArchiveType) |
|
subs map[int64]*model.Subject |
|
r = &model.SearchSubjectReq{ |
|
State: req.State, |
|
Attrs: req.Attrs, |
|
Pn: req.Pn, |
|
Ps: req.Ps, |
|
Sort: req.Sort, |
|
Order: req.Order, |
|
} |
|
) |
|
res = &model.ArchiveResult{} |
|
res.Page = &model.Page{} |
|
if req.ID > 0 { |
|
switch req.IDType { |
|
case "oid": |
|
r.Oids = append(r.Oids, req.ID) |
|
case "mid": |
|
r.Mids = append(r.Mids, req.ID) |
|
case "aid": |
|
r.Aids = append(r.Aids, req.ID) |
|
case "ep", "ss": |
|
if r.Aids, r.Oids, err = s.dao.SeasonInfos(c, req.IDType, req.ID); err != nil { |
|
err = nil |
|
return |
|
} |
|
} |
|
} |
|
data := make([]*model.DMSubject, 0) |
|
if len(r.Aids) > 0 && req.Page >= 1 { |
|
var ( |
|
pages []*api.Page |
|
arg = archive.ArgAid2{Aid: r.Aids[0]} |
|
) |
|
if pages, err = s.arcRPC.Page3(c, &arg); err != nil { |
|
log.Error("arcRPC.Page3(%v) error(%v)", arg, err) |
|
return |
|
} |
|
if len(pages) < int(req.Page) { |
|
log.Error("req.Page too big(%d) error(%v)", req.Page, err) |
|
return |
|
} |
|
r.Oids = append(r.Oids, pages[req.Page-1].Cid) |
|
} |
|
res = new(model.ArchiveResult) |
|
if oids, res.Page, err = s.dao.SearchSubject(c, r); err != nil { |
|
return |
|
} |
|
if subs, err = s.dao.Subjects(c, model.SubTypeVideo, oids); err != nil { |
|
return |
|
} |
|
for _, oid := range oids { |
|
if sub, ok := subs[oid]; ok { |
|
s := &model.DMSubject{ |
|
OID: sub.Oid, |
|
Type: sub.Type, |
|
AID: sub.Pid, |
|
ACount: sub.ACount, |
|
Limit: sub.Maxlimit, |
|
CTime: sub.Ctime, |
|
MTime: sub.Mtime, |
|
MID: sub.Mid, |
|
State: sub.State, |
|
} |
|
data = append(data, s) |
|
} |
|
} |
|
if len(data) <= 0 { |
|
return |
|
} |
|
for _, idx := range data { |
|
if _, ok := aidMap[idx.AID]; !ok { |
|
aidMap[idx.AID] = struct{}{} |
|
aids = append(aids, idx.AID) |
|
} |
|
} |
|
if arcMap, err = s.dao.ArchiveVideos(c, aids); err != nil { |
|
return |
|
} |
|
if archiveTypes, err = s.dao.TypeInfo(c); err != nil { |
|
return |
|
} |
|
for _, idx := range data { |
|
info, ok := arcMap[idx.AID] // get archive info |
|
if !ok { |
|
continue |
|
} |
|
idx.Title = info.Archive.Title |
|
idx.TID = info.Archive.TID |
|
if v, ok := archiveTypes[idx.TID]; ok { |
|
idx.TName = v.Name |
|
} |
|
if len(info.Videos) > 0 { // get ep_title name |
|
for _, video := range info.Videos { |
|
if video.CID == idx.OID { |
|
idx.ETitle = video.Title |
|
} |
|
} |
|
} |
|
} |
|
res.ArcLists = data |
|
return |
|
} |
|
|
|
// UptSubjectsState change oids subject state and send manager log. |
|
func (s *Service) UptSubjectsState(c context.Context, tp int32, uid int64, uname string, oids []int64, state int32, comment string) (err error) { |
|
var affect int64 |
|
for _, oid := range oids { |
|
if affect, err = s.dao.UpSubjectState(c, tp, oid, state); err != nil { |
|
return |
|
} |
|
if affect == 0 { |
|
log.Info("s.UpSubjectState affect=0 oid(%d)", oid) |
|
continue |
|
} |
|
managerInfo := &manager.ManagerInfo{ |
|
UID: uid, |
|
Uname: uname, |
|
Business: model.DMLogBizID, |
|
Type: int(tp), |
|
Oid: oid, |
|
Ctime: time.Now(), |
|
Content: map[string]interface{}{ |
|
"comment": comment, |
|
}, |
|
} |
|
if state == model.SubStateOpen { |
|
managerInfo.Action = "开启弹幕池" |
|
} else { |
|
managerInfo.Action = "关闭弹幕池" |
|
} |
|
manager.Manager(managerInfo) |
|
log.Info("s.managerLogSend(%+v)", managerInfo) |
|
} |
|
return |
|
} |
|
|
|
// UpSubjectMaxLimit update maxlimit in dm subject. |
|
func (s *Service) UpSubjectMaxLimit(c context.Context, tp int32, oid, maxlimit int64) (err error) { |
|
_, err = s.dao.UpSubjectMaxlimit(c, tp, oid, maxlimit) |
|
return |
|
} |
|
|
|
// SubjectLog get subject log |
|
func (s *Service) SubjectLog(c context.Context, tp int32, oid int64) (data []*model.SubjectLog, err error) { |
|
data, err = s.dao.SearchSubjectLog(c, tp, oid) |
|
return |
|
}
|
|
|