146 lines
4.4 KiB
Go
146 lines
4.4 KiB
Go
|
package member
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
|
||
|
"go-common/app/interface/main/account/model"
|
||
|
artMdl "go-common/app/interface/openplatform/article/model"
|
||
|
"go-common/app/service/main/archive/api"
|
||
|
arcMdl "go-common/app/service/main/archive/model/archive"
|
||
|
"go-common/library/log"
|
||
|
"go-common/library/net/metadata"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
_typeToURL = map[int64]string{
|
||
|
1: "https://www.bilibili.com/video/av%d/", // 稿件
|
||
|
2: "https://www.bilibili.com/topic/%d.html", // 话题
|
||
|
3: "https://h.bilibili.com/dy%d", // 画站
|
||
|
5: "https://vc.bilibili.com/video/%d", // 直播小视频
|
||
|
6: "https://www.bilibili.com/blackroom/ban/%d", // 封禁信息
|
||
|
7: "https://www.bilibili.com/blackroom/notice/%d", // 公告信息
|
||
|
10: "https://link.bilibili.com/p/eden/news#/newsdetail?id=%d", // 直播公告
|
||
|
11: "https://h.bilibili.com/%d", // 直播有文画
|
||
|
12: "https://www.bilibili.com/read/cv%d", // 专栏
|
||
|
13: "https://show.bilibili.com/platform/detail.html?id=%d", // 票务
|
||
|
15: "https://www.bilibili.com/judgement/case/%d", // 风纪委
|
||
|
}
|
||
|
)
|
||
|
|
||
|
// ReplyHistoryList reply history list
|
||
|
func (s *Service) ReplyHistoryList(c context.Context, mid int64, stime, etime, order, sort string, pn, ps int64, accessKey, cookie string) (rhl *model.ReplyHistory, err error) {
|
||
|
ip := metadata.String(c, metadata.RemoteIP)
|
||
|
if rhl, err = s.replyDao.ReplyHistoryList(c, mid, stime, etime, order, sort, pn, ps, accessKey, cookie, ip); err != nil {
|
||
|
log.Error("s.replyDao.ReplyHistoryList error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
idsMap := make(map[int64][]int64) // type -> ids
|
||
|
unique := make(map[int64]struct{})
|
||
|
for _, v := range rhl.Records {
|
||
|
if _, ok := unique[v.Oid]; !ok {
|
||
|
idsMap[v.Type] = append(idsMap[v.Type], v.Oid)
|
||
|
unique[v.Oid] = struct{}{}
|
||
|
}
|
||
|
}
|
||
|
rhlt, _ := s.fetchData(c, mid, idsMap, accessKey, cookie, ip)
|
||
|
for _, v := range rhl.Records {
|
||
|
if t, ok := rhlt[v.Type]; ok {
|
||
|
for _, b := range t {
|
||
|
if o, ok := b[v.Oid]; ok {
|
||
|
v.Title = o.Title
|
||
|
v.URL = o.URL
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// fetchData
|
||
|
func (s *Service) fetchData(c context.Context, mid int64, idsMap map[int64][]int64, accessKey, cookie, ip string) (rhlt map[int64][]map[int64]*model.RecordAppend, err error) {
|
||
|
rhlt = make(map[int64][]map[int64]*model.RecordAppend) // type -> oid -> title/url
|
||
|
for t, v := range idsMap {
|
||
|
switch t {
|
||
|
case 1:
|
||
|
// 稿件
|
||
|
if len(v) > 0 {
|
||
|
var arcs map[int64]*api.Arc
|
||
|
arcArg := &arcMdl.ArgAids2{Aids: v, RealIP: ip}
|
||
|
if arcs, err = s.arcRPC.Archives3(c, arcArg); err != nil {
|
||
|
log.Error("s.arcRPC.Archives3 error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
for _, vv := range v {
|
||
|
if arc, ok := arcs[vv]; ok {
|
||
|
itu := &model.RecordAppend{
|
||
|
Title: arc.Title,
|
||
|
}
|
||
|
if arc.RedirectURL != "" {
|
||
|
itu.URL = arc.RedirectURL
|
||
|
} else {
|
||
|
itu.URL = fmt.Sprintf(_typeToURL[t], arc.Aid)
|
||
|
}
|
||
|
vitu := make(map[int64]*model.RecordAppend)
|
||
|
vitu[vv] = itu
|
||
|
rhlt[t] = append(rhlt[t], vitu)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
case 4:
|
||
|
// 活动
|
||
|
if len(v) > 0 {
|
||
|
var aps map[int64]*model.RecordAppend
|
||
|
if aps, err = s.replyDao.ActivityPages(c, mid, v, accessKey, cookie, ip); err != nil {
|
||
|
log.Error("s.replyDao.ActivityPages error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
for _, vv := range v {
|
||
|
if ap, ok := aps[vv]; ok {
|
||
|
vitu := make(map[int64]*model.RecordAppend)
|
||
|
vitu[vv] = ap
|
||
|
rhlt[t] = append(rhlt[t], vitu)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
case 12:
|
||
|
// 专栏
|
||
|
if len(v) > 0 {
|
||
|
var arts map[int64]*artMdl.Meta
|
||
|
artArg := &artMdl.ArgAids{Aids: v}
|
||
|
if arts, err = s.artRPC.ArticleMetas(c, artArg); err != nil {
|
||
|
log.Error("s.artRPC.ArticleMetas error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
for _, vv := range v {
|
||
|
if ap, ok := arts[vv]; ok {
|
||
|
itu := &model.RecordAppend{
|
||
|
Title: ap.Title,
|
||
|
URL: fmt.Sprintf(_typeToURL[t], ap.ID),
|
||
|
}
|
||
|
vitu := make(map[int64]*model.RecordAppend)
|
||
|
vitu[vv] = itu
|
||
|
rhlt[t] = append(rhlt[t], vitu)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
default:
|
||
|
if len(v) > 0 {
|
||
|
for _, vv := range v {
|
||
|
itu := &model.RecordAppend{
|
||
|
Title: "",
|
||
|
URL: "",
|
||
|
}
|
||
|
if _, ok := _typeToURL[t]; ok {
|
||
|
itu.URL = fmt.Sprintf(_typeToURL[t], vv)
|
||
|
}
|
||
|
vitu := make(map[int64]*model.RecordAppend)
|
||
|
vitu[vv] = itu
|
||
|
rhlt[t] = append(rhlt[t], vitu)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|