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" "sort" "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 != "" { //优先级 由测试确认 大会员 》 商机管理 》 VIP 》 普通用户 》 搜索历史 //获取订阅信息 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,"s_m_phone":1,"s_phone":1}`) if !ok || userMap == nil || len(*userMap) == 0 { //查询出错 res.ErrCode = -1 res.ErrMsg = fmt.Errorf("未查询到用户信息").Error() return res } var isPayUser bool = false //vip用户 vipStatus := MC.IntAll((*userMap)["i_vip_status"]) //大会员用户 bigStatus := MC.Int64All((*userMap)["i_member_status"]) if bigStatus > 0 { isPayUser = true o_msgset := MC.ObjToMap((*userMap)["o_member_jy"]) big_items, ok := (*o_msgset)["a_items"].([]interface{}) //大会员推送历史 result := model.GetNewestInfo(rks, "m",in.NewUserId).GetPushHistory() res.Data.Count = int64(len(result)) if res.Data.Count > 0 { res.Data.HasSubKeys = ok && len(big_items) > 0 res.Data.List = result res.Data.SubFlag = "m" } } else if phone := MC.If((*userMap)["s_phone"] != nil, MC.ObjToString((*userMap)["s_phone"]), MC.ObjToString((*userMap)["s_m_phone"])).(string); phone != "" && in.EntUserId != "" { //商机管理 if count := IC.MainMysql.CountBySql(`SELECT count(1) FROM entniche_user u LEFT JOIN entniche_info i ON u.ent_id=i.id WHERE u.phone=? and u.power=1 and i.status=1`, phone); count > 0 { //商机管理推送历史 isPayUser = true result := model.GetNewestInfo(in.EntUserId, "e",in.NewUserId).GetPushHistory() res.Data.Count = int64(len(result)) if res.Data.Count > 0 { res.Data.List = result res.Data.SubFlag = "e" } } } else if vipStatus > 0 { isPayUser = true o_msgset := MC.ObjToMap((*userMap)["o_vipjy"]) vip_items, ok := (*o_msgset)["a_items"].([]interface{}) //vip查询推送历史 result := model.GetNewestInfo(rks, "v",in.NewUserId).GetPushHistory() res.Data.IsVip = true res.Data.HasSubKeys = ok && len(vip_items) > 0 res.Data.Count = int64(len(result)) res.Data.List = result res.Data.SubFlag = "v" } //付费用户如果没有数据 直接返回 需求来源:测试 if isPayUser { return res } //普通用户用户- 有关键词 o_msgset := MC.ObjToMap((*userMap)["o_jy"]) items, ok := (*o_msgset)["a_key"].([]interface{}) if ok && len(items) > 0 { //普通用户查询推送历史 result := model.GetNewestInfo(rks, "f",in.NewUserId).GetPushHistory() res.Data.IsVip = false res.Data.HasSubKeys = ok && len(items) > 0 res.Data.Count = int64(len(result)) res.Data.List = result res.Data.SubFlag = "f" return res } //搜索历史-关键词 hKeys := redis.GetStr("other", fmt.Sprintf("s_%s", 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 { //排序 sort.Slice(r.Data.List, func(i, j int) bool { return r.Data.List[i].PublishTime > r.Data.List[j].PublishTime }) // 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 }