@@ -0,0 +1,229 @@
|
||||
package laosijiser
|
||||
|
||||
import (
|
||||
"91porn-server/common"
|
||||
"91porn-server/common/laosiji"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/models/v/usermod"
|
||||
"91porn-server/models/v/vidmod"
|
||||
"91porn-server/web/service/vidser"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func PostSearch(ctx context.Context, param laosiji.PostSearchListReq) (resp laosiji.PostSearchListResp, err error) {
|
||||
postResp, err := laosiji.PostSearch(ctx, param)
|
||||
if err != nil {
|
||||
log.Error("MovieSearch", log.E(err))
|
||||
return
|
||||
}
|
||||
resp = laosiji.PostSearchListResp{
|
||||
Data: make([]laosiji.PostSearchInfo, 0),
|
||||
Total: postResp.Total,
|
||||
Current_page: postResp.Current_page,
|
||||
Page_size: postResp.Page_size,
|
||||
Last_page: postResp.Last_page,
|
||||
}
|
||||
|
||||
//是否导入
|
||||
taskIds := make([]string, 0)
|
||||
for _, v := range postResp.Data {
|
||||
taskIds = append(taskIds, v.Id)
|
||||
}
|
||||
postList, _ := vidmod.GetList(bson.M{"sourceID": bson.M{"$in": taskIds}})
|
||||
|
||||
// 处理域名
|
||||
for _, postInfo := range postResp.Data {
|
||||
//postInfo.Img = common.JoinUrlPath(laosiji.IMAGEYUAN, postInfo.Img)
|
||||
postInfo.Img = common.JoinUrlPath("laosiji", postInfo.Img)
|
||||
|
||||
for _, postIn := range postList {
|
||||
if postIn.SourceID == postInfo.Id {
|
||||
postInfo.IsAdd = true
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
resp.Data = append(resp.Data, postInfo)
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
func PostDetail(ctx context.Context, param laosiji.PostDetailReq) (resp laosiji.PostDetailResp, err error) {
|
||||
resp, err = laosiji.PostDetail(ctx, param)
|
||||
if err != nil {
|
||||
log.Error("MovieSearch", log.E(err))
|
||||
return
|
||||
}
|
||||
|
||||
// 处理域名
|
||||
//resp.Img = common.JoinUrlPath(laosiji.IMAGEYUAN, resp.Img)
|
||||
resp.Img = common.JoinUrlPath("laosiji", resp.Img)
|
||||
if resp.Files != nil && len(resp.Files) > 0 {
|
||||
for i, file := range resp.Files {
|
||||
if len(file.Image) > 0 {
|
||||
//resp.Files[i].Image = common.JoinUrlPath(laosiji.IMAGEYUAN, file.Image)
|
||||
resp.Files[i].Image = common.JoinUrlPath("laosiji", file.Image)
|
||||
}
|
||||
if len(file.Video_link) > 0 {
|
||||
resp.Files[i].Video_link = common.JoinUrlPath(laosiji.APIUrl+"/m3m", file.Video_link)
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func PostAddList(ctx context.Context, param laosiji.PostAddListReq, manager string) (hits []vidser.SensitiveHit, err error) {
|
||||
if param.Ids == nil || len(param.Ids) <= 0 {
|
||||
return
|
||||
}
|
||||
// 批量查询所有详情
|
||||
postDetails := make([]laosiji.PostDetailResp, 0)
|
||||
for _, id := range param.Ids {
|
||||
var postDetail laosiji.PostDetailResp
|
||||
req := laosiji.PostDetailReq{
|
||||
Id: id,
|
||||
}
|
||||
postDetail, err = laosiji.PostDetail(ctx, req)
|
||||
if err != nil {
|
||||
log.Warn("PostAddList laosiji.PostDetail failed", log.Any("id", id), log.E(err))
|
||||
continue
|
||||
}
|
||||
//postDetail.Img = common.JoinUrlPath(laosiji.IMAGEYUAN, postDetail.Img)
|
||||
postDetail.Img = common.JoinUrlPath("laosiji", postDetail.Img)
|
||||
if postDetail.Files != nil && len(postDetail.Files) > 0 {
|
||||
for i, file := range postDetail.Files {
|
||||
if len(file.Image) > 0 {
|
||||
postDetail.Files[i].Image = common.JoinUrlPath("laosiji", file.Image)
|
||||
}
|
||||
if len(file.Video_link) > 0 {
|
||||
postDetail.Files[i].Video_link = common.JoinUrlPath("laosiji/m3m/", file.Video_link)
|
||||
}
|
||||
}
|
||||
}
|
||||
postDetails = append(postDetails, postDetail)
|
||||
}
|
||||
if len(postDetails) <= 0 {
|
||||
log.Warn("PostAddList laosiji.PostDetailResp len is 0")
|
||||
err = errors.New("laosiji.PostDetailResp len is 0")
|
||||
return
|
||||
}
|
||||
|
||||
users, err := usermod.FindMany(bson.M{"uid": bson.M{"$gt": 300000}}, &options.FindOptions{}, 0, 300)
|
||||
if err != nil {
|
||||
log.Warn("PostAddList FindManyUser failed", log.E(err))
|
||||
return
|
||||
}
|
||||
terms := vidser.LoadEnabledSensitiveTerms()
|
||||
hits = make([]vidser.SensitiveHit, 0)
|
||||
failedIds := make([]string, 0)
|
||||
for _, postDetail := range postDetails {
|
||||
hit, oneErr := addOnePost(postDetail, nil, users, manager, terms)
|
||||
if oneErr != nil {
|
||||
log.Warn("PostAddList addOnePost failed", log.Any("id", postDetail.Id), log.E(oneErr))
|
||||
failedIds = append(failedIds, postDetail.Id)
|
||||
continue
|
||||
}
|
||||
if hit != nil {
|
||||
hits = append(hits, *hit)
|
||||
}
|
||||
}
|
||||
if len(failedIds) > 0 {
|
||||
err = errors.New(fmt.Sprintf("需要同步%d个帖子,失败%d,失败Id[%s]", len(param.Ids), len(failedIds), strings.Join(failedIds, ",")))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func addOnePost(postDetail laosiji.PostDetailResp, tagMaps map[string]primitive.ObjectID, upUsers []*usermod.User, manager string, terms []string) (*vidser.SensitiveHit, error) {
|
||||
//
|
||||
// 有的帖子是图文节点 前端格式不支持 这里屏蔽
|
||||
//
|
||||
if len(postDetail.Files) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
postList, err := vidmod.GetList(bson.M{"sourceID": bson.M{"$in": []string{postDetail.Id}}})
|
||||
if err != nil {
|
||||
log.Warn("addOnePost GetList failed", log.Any("id", postDetail.Id), log.E(err))
|
||||
return nil, err
|
||||
}
|
||||
if postList != nil && len(postList) > 0 {
|
||||
return nil, nil
|
||||
}
|
||||
postInfo := vidmod.VideoModel{
|
||||
ID: primitive.NewObjectID(),
|
||||
NewsType: vidmod.COVER,
|
||||
Title: postDetail.Title,
|
||||
Content: postDetail.Content,
|
||||
Tags: make([]primitive.ObjectID, 0),
|
||||
MimeType: "video/mp4",
|
||||
Cover: postDetail.Img,
|
||||
CoverThumb: postDetail.Img,
|
||||
SeriesCover: make([]string, 0),
|
||||
Via: "laosiji",
|
||||
Status: vidmod.CheckPass,
|
||||
Location: primitive.ObjectID{},
|
||||
NewUpdatedAt: "laosiji",
|
||||
ReviewAt: now,
|
||||
CreatedAt: now,
|
||||
UpdatedAt: now,
|
||||
ReviewAccount: manager,
|
||||
SourceID: postDetail.Id,
|
||||
VerticalCover: postDetail.Img,
|
||||
}
|
||||
postInfo.SeriesNum, _ = strconv.Atoi(postDetail.Img_count)
|
||||
postInfo.Coins, _ = strconv.ParseInt(postDetail.Money, 10, 64)
|
||||
uIndex := rand.Intn(len(upUsers))
|
||||
u := upUsers[uIndex]
|
||||
postInfo.PublisherID = u.UID
|
||||
//if postInfo.Coins > 0 {
|
||||
// postInfo.Permission = 1
|
||||
//} else {
|
||||
// postInfo.Permission = 2
|
||||
// postInfo.FreeArea = true
|
||||
// postInfo.FreeAreaDate = now
|
||||
//}
|
||||
//节点 处理
|
||||
if postDetail.Files != nil && len(postDetail.Files) > 0 {
|
||||
for _, file := range postDetail.Files {
|
||||
if file.Type == "image" {
|
||||
if len(file.Image) > 0 {
|
||||
postInfo.SeriesCover = append(postInfo.SeriesCover, file.Image)
|
||||
}
|
||||
}
|
||||
if file.Type == "video" {
|
||||
postInfo.SourceURL = file.Video_link
|
||||
postInfo.PlayTime = 1
|
||||
postInfo.Filename = file.Tips
|
||||
postInfo.SourceID = postDetail.Id
|
||||
}
|
||||
}
|
||||
}
|
||||
if postDetail.Rich_content != nil && len(postDetail.Rich_content) > 0 {
|
||||
for _, file := range postDetail.Rich_content {
|
||||
postInfo.RichText += fmt.Sprintf("%s\n", file)
|
||||
}
|
||||
}
|
||||
// 敏感词命中 → 强制为待审核(WaitingCheck=0),写库后由后台逐条告警
|
||||
hit := vidser.CheckTextHits(terms, postDetail.Id, postInfo.Title, postInfo.Content, postInfo.RichText)
|
||||
if hit != nil {
|
||||
postInfo.Status = vidmod.WaitingCheck
|
||||
log.Warn("addOnePost sensitive hit, forced offline",
|
||||
log.Any("sourceId", hit.SourceID),
|
||||
log.Any("title", hit.Title),
|
||||
log.Any("detail", hit.Detail))
|
||||
}
|
||||
if _, err = vidmod.InsertBase(postInfo); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return hit, nil
|
||||
}
|
||||
Reference in New Issue
Block a user