168 lines
4.1 KiB
Go
168 lines
4.1 KiB
Go
|
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
|
||
|
}
|