package logic import ( MC "app.yhyue.com/moapp/jybase/common" "app.yhyue.com/moapp/jybase/redis" "context" "encoding/json" "fmt" IC "jyBXBase/rpc/init" "jyBXBase/rpc/model" "log" "strings" "time" "jyBXBase/rpc/internal/svc" "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() r := func(in *bxbase.NewestBiddingReq) *bxbase.NewsetBiddingResp { var res = &bxbase.NewsetBiddingResp{ Data: &bxbase.NewsetBidding{ List: []*bxbase.NewestList{}, }, } rks := MC.If(in.UserId != "", in.UserId, in.City).(string) redisByte, err := redis.GetBytes("other", "p1_indexMessage_new_"+rks) if err == nil && redisByte != nil && len(*redisByte) > 0 { err := json.Unmarshal(*redisByte, res.Data) if err != nil { res.ErrCode = -1 res.ErrMsg = fmt.Sprintf("读取缓存 序列化异常,err:%s", err.Error()) } return res } //登录用户 if in.UserId != "" { //获取订阅信息 userMap, ok := IC.Mgo.FindById("user", rks, `{"o_jy":1,"o_vipjy":1,"i_vip_status":1,"o_member_jy":1,"i_member_status":1}`) if !ok || userMap == nil || len(*userMap) == 0 { //查询出错 res.ErrCode = -1 res.ErrMsg = fmt.Errorf("未查询到用户信息").Error() return res } vipStatus := MC.IntAll((*userMap)["i_vip_status"]) //vip用户 if vipStatus > 0 { o_msgset := MC.ObjToMap((*userMap)["o_vipjy"]) vip_items, ok := (*o_msgset)["a_items"].([]interface{}) //vip查询推送历史 result := model.GetPushHistory(rks) res.Data.IsVip = true res.Data.HasSubKeys = ok && len(vip_items) > 0 res.Data.Count = int64(len(result)) res.Data.List = result return res } //普通用户用户- 有关键词 o_msgset := MC.ObjToMap((*userMap)["o_jy"]) items, ok := (*o_msgset)["a_key"].([]interface{}) if ok && len(items) > 0 { //普通用户查询推送历史 result := model.GetPushHistory(rks) res.Data.IsVip = false res.Data.HasSubKeys = ok && len(items) > 0 res.Data.Count = int64(len(result)) res.Data.List = result return res } //搜索历史-关键词 hKeys := redis.GetStr("other", fmt.Sprintf("s_%", in.UserId, in.UserId)) if hKeys != "" && len(strings.Split(hKeys, ",")) > 0 { //历史搜索 res.Data.History = strings.Split(hKeys, ",") //根据订阅词获取查询语句 query := model.NewestQuery("", hKeys) result := model.NewestES(query) res.Data.IsVip = false res.Data.HasSubKeys = false res.Data.Count = int64(len(result)) res.Data.List = result return res } } if in.IsSearch == 2 { //定位查询 query := model.NewestQuery(rks, "") result := model.NewestES(query) res.Data.IsVip = false res.Data.HasSubKeys = false res.Data.Count = int64(len(result)) res.Data.List = result return res } return res }(in) if r.Data.Count > 0 { rks := MC.If(in.UserId != "", in.UserId, in.City).(string) b, err := json.Marshal(r.Data) if err != nil { r.ErrCode = -1 r.ErrMsg = fmt.Sprintf("保存缓存 序列化异常,err:%s", err.Error()) } else { if err := redis.PutBytes("other", "p1_indexMessage_new_"+rks, &b, 2*60*60); err != nil { r.ErrCode = -1 r.ErrMsg = fmt.Sprintf("保存缓存 redis 异常,err:%s", err.Error()) } } } model.MakeCollection(in.UserId, r.Data.List) log.Println("接口耗时:", time.Since(t).Seconds()) return r, nil }