|
@@ -1,12 +1,9 @@
|
|
|
package logic
|
|
|
|
|
|
import (
|
|
|
- "app.yhyue.com/moapp/jybase/redis"
|
|
|
"context"
|
|
|
- IC "jyBXBase/rpc/init"
|
|
|
"jyBXBase/rpc/model"
|
|
|
"log"
|
|
|
- "sort"
|
|
|
"time"
|
|
|
|
|
|
"jyBXBase/rpc/internal/svc"
|
|
@@ -29,18 +26,11 @@ func NewNewestBiddingLogic(ctx context.Context, svcCtx *svc.ServiceContext) *New
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-type newSet struct {
|
|
|
- status int
|
|
|
- redisKey string
|
|
|
- redisStatus int
|
|
|
- query string
|
|
|
-}
|
|
|
-
|
|
|
// 首页最新招标信息
|
|
|
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, *newSet) {
|
|
|
+ r, n := func(in *bxbase.NewestBiddingReq) (*bxbase.NewsetBiddingResp, *model.NewSet) {
|
|
|
var res = &bxbase.NewsetBiddingResp{
|
|
|
Data: &bxbase.NewsetBidding{
|
|
|
List: []*bxbase.NewestList{},
|
|
@@ -57,35 +47,35 @@ func (l *NewestBiddingLogic) NewestBidding(in *bxbase.NewestBiddingReq) (*bxbase
|
|
|
subtype := `"预告","公告","结果","其它"`
|
|
|
query := model.NewestQuery("", "", subtype)
|
|
|
res.Data.ShowTip = 1
|
|
|
- redisKey, _ := model.GetRedisKeyTimeout(model.StatusNoLogin, in.PositionId)
|
|
|
- list, err := model.GetNewsCache(redisKey)
|
|
|
+ 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, &newSet{model.StatusCache, redisKey, model.StatusNoLogin, query}
|
|
|
+ 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, &newSet{model.StatusNoLogin, redisKey, model.StatusNoLogin, query}
|
|
|
+ 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说明存在数据不用显示引导用户设置关键词
|
|
|
// 查缓存
|
|
|
- redisKey, _ := model.GetRedisKeyTimeout(model.StatusLoginUser, in.PositionId)
|
|
|
- list, err := model.GetNewsCache(redisKey)
|
|
|
+ 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, &newSet{model.StatusCache, redisKey, model.StatusLoginUser, ""}
|
|
|
+ return res, &model.NewSet{Status: model.StatusCache, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusLoginUser}
|
|
|
}
|
|
|
// 查推送
|
|
|
subscribeTime := time.Now()
|
|
@@ -94,7 +84,7 @@ func (l *NewestBiddingLogic) NewestBidding(in *bxbase.NewestBiddingReq) (*bxbase
|
|
|
if list != nil && len(list) > 0 {
|
|
|
res.Data.List = list
|
|
|
res.Data.Count = int64(len(list))
|
|
|
- return res, &newSet{model.StatusLoginUser, redisKey, model.StatusLoginUser, ""}
|
|
|
+ return res, &model.NewSet{Status: model.StatusLoginUser, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusLoginUser}
|
|
|
}
|
|
|
}
|
|
|
// 等0则说明推送里面没有数据 所以去查最新标讯信息缓存 返回 缓存没有则查最新标讯信息 存到缓存里面
|
|
@@ -102,60 +92,28 @@ func (l *NewestBiddingLogic) NewestBidding(in *bxbase.NewestBiddingReq) (*bxbase
|
|
|
// 查最新标讯
|
|
|
query := model.NewestQuery("", "", "")
|
|
|
// 查缓存
|
|
|
- redisKey, _ := model.GetRedisKeyTimeout(model.StatusLogin, in.PositionId)
|
|
|
- list, err := model.GetNewsCache(redisKey)
|
|
|
+ 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, &newSet{model.StatusCache, redisKey, model.StatusLogin, query}
|
|
|
+ return res, &model.NewSet{Status: model.StatusCache, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusLogin, Query: query}
|
|
|
}
|
|
|
esTime := time.Now()
|
|
|
list = model.NewestES(query)
|
|
|
log.Println("获取es数据耗时:", time.Since(esTime).Seconds())
|
|
|
res.Data.List = list
|
|
|
res.Data.Count = int64(len(list))
|
|
|
- return res, &newSet{model.StatusLogin, redisKey, model.StatusLogin, query}
|
|
|
+ return res, &model.NewSet{Status: model.StatusLogin, RedisKeyModel: redisKeyModel, RedisStatus: model.StatusLogin, Query: query}
|
|
|
}(in)
|
|
|
if r.Data.Count == 0 {
|
|
|
return r, nil
|
|
|
}
|
|
|
- // status : 0 -拿到的是缓存 不用再处理也不用存缓存 1-存到未登录用户 2-存到用户自己的key 3-存到登录用户最新标讯
|
|
|
- var sortRedis = func(r *bxbase.NewsetBiddingResp, status int, positionId int64) {
|
|
|
- //排序
|
|
|
- sort.Slice(r.Data.List, func(i, j int) bool {
|
|
|
- return r.Data.List[i].PublishTime > r.Data.List[j].PublishTime
|
|
|
- })
|
|
|
- redisKey, timeout := model.GetRedisKeyTimeout(status, positionId)
|
|
|
- go model.PutNewsCache(redisKey, timeout, r.Data.List)
|
|
|
- }
|
|
|
- if n.status != model.StatusCache {
|
|
|
- go sortRedis(r, n.status, in.PositionId)
|
|
|
+ if n.Status != model.StatusCache {
|
|
|
+ model.DataSortInRedis(r, n.Status, in.PositionId)
|
|
|
} else {
|
|
|
- //获取最新数据 -- 延长缓存时间
|
|
|
- go func(n *newSet, in *bxbase.NewestBiddingReq) {
|
|
|
- if n.redisKey != "" {
|
|
|
- //剩余时间 在 IC.C.NewsTimeOut 之内
|
|
|
- if ttl := redis.GetTTL("new", n.redisKey); ttl-IC.C.NewsTimeOut < 0 {
|
|
|
- var res = &bxbase.NewsetBiddingResp{
|
|
|
- Data: &bxbase.NewsetBidding{
|
|
|
- List: []*bxbase.NewestList{},
|
|
|
- },
|
|
|
- }
|
|
|
- switch n.redisStatus {
|
|
|
- case model.StatusLoginUser:
|
|
|
- // 登录用户
|
|
|
- roleNewestInfo, _ := model.GetRoleNewestInfoService(in.AppId, in.MgoUserId, in.NewUserId, in.AccountId, in.EntId, in.EntUserId, in.PositionType, in.PositionId)
|
|
|
- // 查推送
|
|
|
- res.Data.List = roleNewestInfo.GetPushHistory()
|
|
|
- default:
|
|
|
- res.Data.List = model.NewestES(n.query)
|
|
|
- }
|
|
|
- go sortRedis(res, n.redisStatus, in.PositionId)
|
|
|
- }
|
|
|
- }
|
|
|
- }(n, in)
|
|
|
+ go model.ExtendNewListCache(n, in, r.Data.List)
|
|
|
}
|
|
|
-
|
|
|
model.MakeCollection(in.UserId, r.Data.List)
|
|
|
log.Println("接口耗时:", time.Since(t).Seconds())
|
|
|
return r, nil
|