mobilehotwordlogic.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package logic
  2. import (
  3. MC "app.yhyue.com/moapp/jybase/common"
  4. "app.yhyue.com/moapp/jybase/redis"
  5. IC "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXCore/api/init"
  6. "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXCore/api/internal/svc"
  7. "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXCore/api/internal/types"
  8. "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXCore/api/internal/util"
  9. "context"
  10. "fmt"
  11. "github.com/zeromicro/go-zero/core/logx"
  12. "strings"
  13. )
  14. type MobileHotWordLogic struct {
  15. logx.Logger
  16. ctx context.Context
  17. svcCtx *svc.ServiceContext
  18. }
  19. func NewMobileHotWordLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MobileHotWordLogic {
  20. return &MobileHotWordLogic{
  21. Logger: logx.WithContext(ctx),
  22. ctx: ctx,
  23. svcCtx: svcCtx,
  24. }
  25. }
  26. func (l *MobileHotWordLogic) MobileHotWord(req *types.MobileHotWordReq) (resp *types.CommonResp, err error) {
  27. var rsData []string
  28. if req.Refresh == 0 { //非刷新动作 自动获取默认缓存热词 5分钟更新一次
  29. rsData = MC.If(req.UserId == "", IC.HotKeyArrUnLogin, IC.HotKeyArrLoginEd).([]string)
  30. } else { // 刷新热词 需过滤已经看过的热词
  31. var reqWord []string
  32. if req.Word != "" {
  33. reqWord = strings.Split(req.Word, ",")
  34. }
  35. redisKey := MC.If(req.UserId == "", "mobileHotWordUnLogin", fmt.Sprintf("mobileHotWordLogin_%s", req.UserId)).(string)
  36. rData, _ := redis.Get("newother", redisKey).([]interface{})
  37. redisWord := MC.ObjArrToStringArr(rData) //已浏览热词
  38. if redisWord != nil {
  39. reqWord = append(reqWord, redisWord...)
  40. }
  41. aData := MC.If(req.UserId == "", IC.C.MobileIndexHotKeyUnLogin, IC.C.MobileIndexHotKey).([]string)
  42. rsData = util.FilterWord(aData, reqWord, int(IC.C.MobileIndexHotKeyLimit))
  43. if len(reqWord) >= len(aData)-int(IC.C.MobileIndexHotKeyLimit) { //剩余热词已经不足 重新获取
  44. redis.Put("newother", redisKey, nil, 60*60*2) //剩余热词不足 重置
  45. } else {
  46. redis.Put("newother", redisKey, reqWord, 60*60*2)
  47. }
  48. }
  49. var rDataArr []map[string]interface{}
  50. for _, datum := range rsData {
  51. rDataArr = append(rDataArr, map[string]interface{}{
  52. "keyword": datum,
  53. })
  54. }
  55. return &types.CommonResp{
  56. Data: rDataArr,
  57. }, nil
  58. }