newestbiddinglogic.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package logic
  2. import (
  3. "context"
  4. "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXBase/rpc/model"
  5. "log"
  6. "time"
  7. "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXBase/rpc/internal/svc"
  8. "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXBase/rpc/type/bxbase"
  9. "github.com/zeromicro/go-zero/core/logx"
  10. )
  11. type NewestBiddingLogic struct {
  12. ctx context.Context
  13. svcCtx *svc.ServiceContext
  14. logx.Logger
  15. }
  16. func NewNewestBiddingLogic(ctx context.Context, svcCtx *svc.ServiceContext) *NewestBiddingLogic {
  17. return &NewestBiddingLogic{
  18. ctx: ctx,
  19. svcCtx: svcCtx,
  20. Logger: logx.WithContext(ctx),
  21. }
  22. }
  23. // 首页最新招标信息
  24. func (l *NewestBiddingLogic) NewestBidding(in *bxbase.NewestBiddingReq) (*bxbase.NewsetBiddingResp, error) {
  25. t := time.Now()
  26. // status : 0 -不存缓存 1-未登录用户 2-用户自己的key 3-登录用户最新标讯
  27. r, n := func(in *bxbase.NewestBiddingReq) (*bxbase.NewsetBiddingResp, *model.NewSet) {
  28. var res = &bxbase.NewsetBiddingResp{
  29. Data: &bxbase.NewsetBidding{
  30. List: []*bxbase.NewestList{},
  31. },
  32. }
  33. /* 1. 未登录用户 查未登录缓存 返回 没有缓存 查最新标讯存未登录返回
  34. 2. 登录用户 查count count=1 查用户缓存 缓存没数据查用户推送
  35. count =0 查最新标讯缓存 缓存没数据查最新标讯存登录缓存 显示引导用户设置关键词
  36. */
  37. // 未登录用户
  38. if in.UserId == "" {
  39. // 没数据查最新数据返回
  40. //未登录用户访问全部信息类型 需要过滤掉 拟建和采购意向
  41. subtype := `"预告","公告","结果","其它"`
  42. query := model.NewestQuery("", "", subtype)
  43. res.Data.ShowTip = 1
  44. redisKeyModel := model.GetRedisKeyTimeout(model.StatusNoLogin, in.PositionId)
  45. list, err := model.GetNewsCache(redisKeyModel)
  46. if err == nil && list != nil && len(list) > 0 { // 缓存有数据可以直接返回
  47. res.Data.List = list
  48. res.Data.Count = int64(len(list))
  49. return res, &model.NewSet{Status: model.StatusCache, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusNoLogin, Query: query}
  50. }
  51. noLoginTime := time.Now()
  52. list = model.NewestES(query)
  53. res.Data.List = list
  54. res.Data.Count = int64(len(list))
  55. log.Println("未登录获es取数据耗时:", time.Since(noLoginTime).Seconds())
  56. return res, &model.NewSet{Status: model.StatusNoLogin, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusNoLogin, Query: query}
  57. }
  58. // 登录用户
  59. roleNewestInfo, flag := model.GetRoleNewestInfoService(in.AppId, in.MgoUserId, in.NewUserId, in.AccountId, in.EntId, in.EntUserId, in.PositionType, in.PositionId)
  60. roleNewestInfo.IsEnt = in.PositionType > 0 //是否是企业
  61. res.Data.SubFlag = flag
  62. // 查count判断
  63. existData := roleNewestInfo.GetPushHistoryCount()
  64. if existData > 0 { // 存在推送 查推送缓存 缓存没有数据则查 推送数据
  65. res.Data.ShowTip = 1 // count>0说明存在数据不用显示引导用户设置关键词
  66. // 查缓存
  67. redisKeyModel := model.GetRedisKeyTimeout(model.StatusLoginUser, in.PositionId)
  68. list, err := model.GetNewsCache(redisKeyModel)
  69. if err == nil && list != nil && len(list) > 0 {
  70. res.Data.List = list
  71. res.Data.Count = int64(len(list))
  72. return res, &model.NewSet{Status: model.StatusCache, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusLoginUser}
  73. }
  74. // 查推送
  75. subscribeTime := time.Now()
  76. list = roleNewestInfo.GetPushHistory()
  77. log.Println(in.PositionId, "---获取订阅数据耗时:", time.Since(subscribeTime).Seconds())
  78. if list != nil && len(list) > 0 {
  79. res.Data.List = list
  80. res.Data.Count = int64(len(list))
  81. return res, &model.NewSet{Status: model.StatusLoginUser, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusLoginUser}
  82. }
  83. }
  84. // 等0则说明推送里面没有数据 所以去查最新标讯信息缓存 返回 缓存没有则查最新标讯信息 存到缓存里面
  85. res.Data.ShowTip = 2 // 显示
  86. // 查最新标讯
  87. query := model.NewestQuery("", "", "")
  88. // 查缓存
  89. redisKeyModel := model.GetRedisKeyTimeout(model.StatusLogin, in.PositionId)
  90. list, err := model.GetNewsCache(redisKeyModel)
  91. if err == nil && list != nil && len(list) > 0 {
  92. res.Data.List = list
  93. res.Data.Count = int64(len(list))
  94. return res, &model.NewSet{Status: model.StatusCache, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusLogin, Query: query}
  95. }
  96. esTime := time.Now()
  97. list = model.NewestES(query)
  98. log.Println(in.PositionId, "---获取es数据耗时:", time.Since(esTime).Seconds())
  99. res.Data.List = list
  100. res.Data.Count = int64(len(list))
  101. return res, &model.NewSet{Status: model.StatusLogin, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusLogin, Query: query}
  102. }(in)
  103. if r.Data.Count == 0 {
  104. return r, nil
  105. }
  106. if n.Status != model.StatusCache {
  107. model.DataSortInRedis(r, n.Status, in.PositionId)
  108. } else {
  109. go model.ExtendNewListCache(n, in, r.Data.List)
  110. }
  111. model.MakeCollection(in.UserId, r.Data.List)
  112. log.Println(in.PositionId, "--接口耗时:", time.Since(t).Seconds())
  113. return r, nil
  114. }