123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package logic
- import (
- "context"
- "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXBase/rpc/model"
- "log"
- "time"
- "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXBase/rpc/internal/svc"
- "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXBase/rpc/type/bxbase"
- "github.com/zeromicro/go-zero/core/logx"
- )
- type NewestBiddingLogic struct {
- ctx context.Context
- svcCtx *svc.ServiceContext
- logx.Logger
- }
- func NewNewestBiddingLogic(ctx context.Context, svcCtx *svc.ServiceContext) *NewestBiddingLogic {
- return &NewestBiddingLogic{
- ctx: ctx,
- svcCtx: svcCtx,
- Logger: logx.WithContext(ctx),
- }
- }
- // 首页最新招标信息
- func (l *NewestBiddingLogic) NewestBidding(in *bxbase.NewestBiddingReq) (*bxbase.NewsetBiddingResp, error) {
- t := time.Now()
- // status : 0 -不存缓存 1-未登录用户 2-用户自己的key 3-登录用户最新标讯
- r, n := func(in *bxbase.NewestBiddingReq) (*bxbase.NewsetBiddingResp, *model.NewSet) {
- var res = &bxbase.NewsetBiddingResp{
- Data: &bxbase.NewsetBidding{
- List: []*bxbase.NewestList{},
- },
- }
- /* 1. 未登录用户 查未登录缓存 返回 没有缓存 查最新标讯存未登录返回
- 2. 登录用户 查count count=1 查用户缓存 缓存没数据查用户推送
- count =0 查最新标讯缓存 缓存没数据查最新标讯存登录缓存 显示引导用户设置关键词
- */
- // 未登录用户
- if in.UserId == "" {
- // 没数据查最新数据返回
- //未登录用户访问全部信息类型 需要过滤掉 拟建和采购意向
- subtype := `"预告","公告","结果","其它"`
- query := model.NewestQuery("", "", subtype)
- res.Data.ShowTip = 1
- redisKeyModel := model.GetRedisKeyTimeout(model.StatusNoLogin, in.PositionId)
- list, err := model.GetNewsCache(redisKeyModel)
- if err == nil && list != nil && len(list) > 0 { // 缓存有数据可以直接返回
- res.Data.List = list
- res.Data.Count = int64(len(list))
- return res, &model.NewSet{Status: model.StatusCache, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusNoLogin, Query: query}
- }
- noLoginTime := time.Now()
- list = model.NewestES(query)
- res.Data.List = list
- res.Data.Count = int64(len(list))
- log.Println("未登录获es取数据耗时:", time.Since(noLoginTime).Seconds())
- return res, &model.NewSet{Status: model.StatusNoLogin, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusNoLogin, Query: query}
- }
- // 登录用户
- roleNewestInfo, flag := model.GetRoleNewestInfoService(in.AppId, in.MgoUserId, in.NewUserId, in.AccountId, in.EntId, in.EntUserId, in.PositionType, in.PositionId)
- roleNewestInfo.IsEnt = in.PositionType > 0 //是否是企业
- res.Data.SubFlag = flag
- // 查count判断
- existData := roleNewestInfo.GetPushHistoryCount()
- if existData > 0 { // 存在推送 查推送缓存 缓存没有数据则查 推送数据
- res.Data.ShowTip = 1 // count>0说明存在数据不用显示引导用户设置关键词
- // 查缓存
- redisKeyModel := model.GetRedisKeyTimeout(model.StatusLoginUser, in.PositionId)
- list, err := model.GetNewsCache(redisKeyModel)
- if err == nil && list != nil && len(list) > 0 {
- res.Data.List = list
- res.Data.Count = int64(len(list))
- return res, &model.NewSet{Status: model.StatusCache, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusLoginUser}
- }
- // 查推送
- subscribeTime := time.Now()
- list = roleNewestInfo.GetPushHistory()
- log.Println(in.PositionId, "---获取订阅数据耗时:", time.Since(subscribeTime).Seconds())
- if list != nil && len(list) > 0 {
- res.Data.List = list
- res.Data.Count = int64(len(list))
- return res, &model.NewSet{Status: model.StatusLoginUser, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusLoginUser}
- }
- }
- // 等0则说明推送里面没有数据 所以去查最新标讯信息缓存 返回 缓存没有则查最新标讯信息 存到缓存里面
- res.Data.ShowTip = 2 // 显示
- // 查最新标讯
- query := model.NewestQuery("", "", "")
- // 查缓存
- redisKeyModel := model.GetRedisKeyTimeout(model.StatusLogin, in.PositionId)
- list, err := model.GetNewsCache(redisKeyModel)
- if err == nil && list != nil && len(list) > 0 {
- res.Data.List = list
- res.Data.Count = int64(len(list))
- return res, &model.NewSet{Status: model.StatusCache, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusLogin, Query: query}
- }
- esTime := time.Now()
- list = model.NewestES(query)
- log.Println(in.PositionId, "---获取es数据耗时:", time.Since(esTime).Seconds())
- res.Data.List = list
- res.Data.Count = int64(len(list))
- return res, &model.NewSet{Status: model.StatusLogin, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusLogin, Query: query}
- }(in)
- if r.Data.Count == 0 {
- return r, nil
- }
- if n.Status != model.StatusCache {
- model.DataSortInRedis(r, n.Status, in.PositionId)
- } else {
- go model.ExtendNewListCache(n, in, r.Data.List)
- }
- model.MakeCollection(in.UserId, r.Data.List)
- log.Println(in.PositionId, "--接口耗时:", time.Since(t).Seconds())
- return r, nil
- }
|