|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- package svc
-
- import (
- "applet/app/db"
- "applet/app/db/im/model"
- "applet/app/md/friend_circles"
- "applet/app/svc"
- "applet/app/utils/logx"
- "code.fnuoos.com/EggPlanet/egg_models.git/src/implement"
- "code.fnuoos.com/EggPlanet/egg_system_rules.git/md"
- md2 "code.fnuoos.com/EggPlanet/egg_system_rules.git/rule/egg_energy/md"
- svc3 "code.fnuoos.com/EggPlanet/egg_system_rules.git/svc"
- "code.fnuoos.com/go_rely_warehouse/zyos_go_es.git/es"
- "code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit"
- "context"
- "encoding/json"
- "errors"
- "github.com/gin-gonic/gin"
- "github.com/olivere/elastic/v7"
- "time"
- )
-
- func IsCanPublish(c *gin.Context) (isCan bool, err error) {
- user := svc.GetUser(c)
- //1、检测是否已实名
- eggFriendCircleBasicDb := implement.NewEggFriendCircleBasicDb(db.Db)
- eggFriendCircleBasic, err := eggFriendCircleBasicDb.EggFriendCircleBasicGet()
- if err != nil {
- return
- }
- if eggFriendCircleBasic.PublishIsRealName == 1 && user.IsRealName == 0 {
- err = errors.New("当前未实名~")
- return
- }
-
- //2、检测是否在黑名单中
- eggFriendCircleUserBlackListDb := implement.NewEggFriendCircleUserBlackListDb(db.Db)
- eggFriendCircleUserBlackList, err := eggFriendCircleUserBlackListDb.EggFriendCircleUserBlackListGet(user.Id)
- if err != nil {
- return
- }
- if eggFriendCircleUserBlackList != nil {
- err = errors.New("已被拉入黑名单~")
- return
- }
-
- //3、检测是否已达次数
- now := time.Now()
- startOfDay := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()).Format("2006-01-02 15:04:05")
- endOfDay := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()).Add(24 * time.Hour).Format("2006-01-02 15:04:05")
- query := elastic.NewBoolQuery().
- Must(
- elastic.NewTermQuery("uid", user.Id),
- elastic.NewRangeQuery("created_at").Gte(startOfDay).Lt(endOfDay), // 根据你的索引结构调整字段名
- )
- searchResult, err := es.EsClient.Search().Index(md.EggFriendCircleEsIndex).
- Query(query).
- Size(0). // 只关心总数,不实际返回文档
- Do(context.Background())
- if err != nil {
- return
- }
- total := searchResult.TotalHits()
- if int(total) >= eggFriendCircleBasic.PublishNumsEveryDay {
- err = errors.New("今日朋友圈发布数量已达上限~")
- return
- }
- return
- }
-
- func MySelfList(c *gin.Context, req friend_circles.MySelfListReq) (resp friend_circles.MySelfListResp, err error) {
- user := svc.GetUser(c)
-
- //获取当前用户在im中的user_id
- var friends []*model.Friend
- err = db.DbIm.Where("`user_id`=?", user.Id).Limit(5000).Find(&friends)
- if err != nil {
- return
- }
- var friendIDs []interface{}
- for _, v := range friends {
- friendIDs = append(friendIDs, v.FriendId)
- }
- // 分页参数
- from := (req.Page - 1) * req.PageSize
-
- // 构建查询
- query := elastic.NewBoolQuery()
- query.Must(elastic.NewTermsQuery("im_uid", friendIDs...))
- query.Must(elastic.NewTermQuery("state", "1"))
-
- searchResult, err := es.EsClient.Search().
- Index(md.EggFriendCircleEsIndex). // 替换为你的索引名称
- Query(query).
- Sort("created_at", false). // 按时间倒排
- From(from).
- Size(req.PageSize).
- Pretty(true).
- Do(context.Background())
- if err != nil {
- logx.Fatalf("Error searching for documents: %v", err)
- return
- }
-
- // 检查是否有结果
- if searchResult.Hits.TotalHits.Value == 0 {
- return
- }
-
- // 解析结果
- for _, hit := range searchResult.Hits.Hits {
- var doc friend_circles.EggFriendCircleEsStruct
- err = json.Unmarshal(hit.Source, &doc)
- if err != nil {
- return
- }
- doc.CircleIndexId = hit.Id
- likeId := svc3.GetEggFriendCircleLikeEsIndexId(user.Id, hit.Index)
- likeDoc, _ := es.FirstDoc(md.EggFriendCircleLikeEsAlias, likeId)
- if likeDoc.Found { // 表示已点赞
- doc.IsLike = true
- }
- resp.List = append(resp.List, doc)
- }
-
- resp.Total = searchResult.TotalHits()
- return
- }
-
- func GetRecommendList(req friend_circles.RecommendListReq) (resp friend_circles.RecommendListResp, err error) {
- // 分页参数
- from := (req.Page - 1) * req.PageSize
-
- // 构建查询
- query := elastic.NewBoolQuery()
- query.Must(elastic.NewTermQuery("state", 1))
- query.Should(elastic.NewTermQuery("is_top_up", 1))
- searchResult, err := es.EsClient.Search().
- Index(md.EggFriendCircleEsAlias). // 替换为你的索引名称
- Query(query).
- Sort("created_at", false). // 按时间倒排
- From(from).
- Size(req.PageSize).
- Pretty(true).
- Do(context.Background())
- if err != nil {
- return
- }
-
- // 检查是否有结果
- if searchResult.Hits.TotalHits.Value == 0 {
- return
- }
-
- // 解析结果
- for _, hit := range searchResult.Hits.Hits {
- var doc friend_circles.EggFriendCircleEsStruct
- err = json.Unmarshal(hit.Source, &doc)
- if err != nil {
- return
- }
- doc.CircleIndexId = hit.Id
- resp.List = append(resp.List, doc)
- }
-
- resp.Total = searchResult.TotalHits()
- return
- }
-
- func CommentList(req friend_circles.CommentListReq) (resp friend_circles.CommentListResp, err error) {
- // 分页参数
- from := (req.Page - 1) * req.PageSize
-
- // 查询所有评论
- query := elastic.NewBoolQuery()
- query.Must(elastic.NewTermQuery("circle_id", req.CircleIndexId))
- query.Must(elastic.NewTermQuery("state", "1"))
-
- searchResult, err := es.EsClient.Search().
- Index(md.EggFriendCircleCommentEsAlias). // 替换为你的索引名称
- Query(query).
- Sort("create_at", false). // 按时间倒排
- From(from).
- Size(req.PageSize).
- Pretty(true).
- Do(context.Background())
- if err != nil {
- logx.Fatalf("Error searching for documents: %v", err)
- return
- }
-
- // 检查是否有结果
- if searchResult.Hits.TotalHits.Value == 0 {
- return
- }
-
- // 解析结果
- for _, hit := range searchResult.Hits.Hits {
- var doc friend_circles.EggFriendCircleCommentEsStruct
- err = json.Unmarshal(hit.Source, &doc)
- if err != nil {
- return
- }
- user, err1 := svc.GetImUser(doc.ImUid, "")
- if err1 != nil {
- return friend_circles.CommentListResp{}, err1
- }
- doc.NickName = user.Nickname
- doc.AvatarUrl = user.AvatarUrl
- doc.CommentIndexId = hit.Id
- isLike, _ := GetUserWithCommentLike(hit.Index, doc.Uid)
- doc.IsLike = isLike
- resp.List = append(resp.List, doc)
- }
-
- resp.Total = searchResult.TotalHits()
- return
- }
-
- func CommentDetail(req friend_circles.CommentDetailReq) (resp friend_circles.CommentDetailResp, err error) {
- // 分页参数
- from := (req.Page - 1) * req.PageSize
-
- // 查询所有评论
- query := elastic.NewBoolQuery()
- query.Must(elastic.NewTermQuery("comment_id", req.CommentIndexId))
- query.Must(elastic.NewTermQuery("state", "1"))
-
- searchResult, err := es.EsClient.Search().
- Index(md.EggFriendCircleCommentEsAlias). // 替换为你的索引名称
- Query(query).
- Sort("create_at", false). // 按时间倒排
- From(from).
- Size(req.PageSize).
- Pretty(true).
- Do(context.Background())
- if err != nil {
- logx.Fatalf("Error searching for documents: %v", err)
- return
- }
-
- // 检查是否有结果
- if searchResult.Hits.TotalHits.Value == 0 {
- return
- }
-
- // 解析结果
- for _, hit := range searchResult.Hits.Hits {
- var doc friend_circles.EggFriendCircleCommentEsStruct
- err = json.Unmarshal(hit.Source, &doc)
- if err != nil {
- return
- }
- user, err1 := svc.GetImUser(doc.ImUid, "")
- if err1 != nil {
- return friend_circles.CommentDetailResp{}, err1
- }
-
- doc.NickName = user.Nickname
- doc.AvatarUrl = user.AvatarUrl
-
- if doc.ReplyCommentId != "" {
- replyUser, err2 := svc.GetImUser(doc.ReplyCommentImUid, "")
- if err2 != nil {
- return friend_circles.CommentDetailResp{}, err2
- }
- doc.ReplyCommentUserNickname = replyUser.Nickname
- }
- doc.CommentIndexId = hit.Id
- resp.List = append(resp.List, doc)
- }
-
- resp.Total = searchResult.TotalHits()
- return
- }
-
- func DelFriendCircleComment(circleId string) (err error) {
- ch, err := rabbit.Cfg.Pool.GetChannel()
- if err != nil {
- return
- }
- defer ch.Release()
-
- page := 1
- limit := 100
-
- for {
- from := (page - 1) * limit
- query := elastic.NewBoolQuery()
- query.Must(elastic.NewTermQuery("circle_id", circleId))
- query.Must(elastic.NewTermQuery("state", "1"))
- var searchResult *elastic.SearchResult
- searchResult, err = es.EsClient.Search().
- Index(md.EggFriendCircleCommentEsAlias). // 替换为你的索引名称
- Query(query).
- Sort("create_at", true).
- From(from).
- Size(limit).
- Pretty(true).
- Do(context.Background())
- if err != nil {
- logx.Fatalf("Error searching for documents: %v", err)
- return
- }
-
- // 检查是否有结果
- if searchResult.Hits.TotalHits.Value == 0 {
- return
- }
-
- // 推入mq
- for _, hit := range searchResult.Hits.Hits {
- data := md2.IMEggEnergyStructForDelFriendCircleCommentData{
- CommentIndexId: hit.Id,
- }
- ch.Publish(md2.IMEggEnergyExchange, data, md2.IMEggEnergyRoutKeyForDelFriendCircleCommentData)
- }
-
- if searchResult.Hits.TotalHits.Value < int64(limit) {
- break
- }
- page++
- }
- return
- }
|