123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- package service
- import (
- "context"
- "errors"
- "fmt"
- "go-common/app/job/live/push-search/dao"
- "go-common/app/job/live/push-search/model"
- relationV1 "go-common/app/service/live/relation/api/liverpc/v1"
- roomV1 "go-common/app/service/live/room/api/liverpc/v1"
- roomV2 "go-common/app/service/live/room/api/liverpc/v2"
- userV3 "go-common/app/service/live/user/api/liverpc/v3"
- accountApi "go-common/app/service/main/account/api"
- "go-common/library/log"
- rpccontext "go-common/library/net/rpc/liverpc/context"
- "strconv"
- "time"
- )
- var (
- hbaseTable = "live:PushSearch"
- hbaseFamily = "search"
- fields = []string{
- "roomid",
- "short_id",
- "uid",
- "uname",
- "area",
- "title",
- "tags",
- "try_time",
- "cover",
- "user_cover",
- "lock_status",
- "hidden_status",
- "attentions",
- "online",
- "live_time",
- "area_v2_id",
- "area_v2_parent_id",
- "virtual",
- "round_status",
- "on_flag",
- "area_v2_name",
- "ctime",
- "mtime",
- }
- )
- func (s *Service) getBaseRoomInfo(uid int64) (roomInfo *roomV2.RoomGetByIdsResp_RoomInfo, err error) {
- roomIdResp, err := dao.RoomApi.V2Room.RoomIdByUid(rpccontext.WithTimeout(context.TODO(), 50*time.Millisecond), &roomV2.RoomRoomIdByUidReq{
- Uid: uid,
- })
- if err != nil {
- log.Error("[getBaseRoomInfo]RoomIdByUid rpc error, error:%+v", err)
- return
- }
- if roomIdResp.Code != 0 {
- log.Error("[getBaseRoomInfo]RoomIdByUid return error, code:%d, msg:%s", roomIdResp.Code, roomIdResp.Msg)
- err = errors.New("getRoomId return error")
- return
- }
- if roomIdResp.Data == nil {
- log.Error("[getBaseRoomInfo]GetMultiple empty data")
- err = errors.New("getRoomId empty error")
- return
- }
- if roomIdResp.Data.RoomId == 0 {
- log.Error("[getBaseRoomInfo]GetMultiple empty data")
- err = errors.New("roomId not found error")
- return
- }
- roomInfoResp := &roomV2.RoomGetByIdsResp{}
- roomInfoResp, err = dao.RoomApi.V2Room.GetByIds(rpccontext.WithTimeout(context.TODO(), 50*time.Millisecond), &roomV2.RoomGetByIdsReq{
- Ids: []int64{roomIdResp.Data.RoomId},
- From: "push-search",
- Fields: fields,
- })
- if err != nil {
- log.Error("[getBaseRoomInfo]GetByIds rpc error, error:%+v", err)
- return
- }
- if roomInfoResp.Code != 0 {
- log.Error("[getBaseRoomInfo]GetByIds return error, code:%d, msg:%s", roomInfoResp.Code, roomInfoResp.Msg)
- err = errors.New("GetByIds return error")
- return
- }
- if roomInfoResp.Data == nil {
- log.Error("[getBaseRoomInfo]GetByIds empty data")
- err = errors.New("GetByIds empty error")
- return
- }
- info, ok := roomInfoResp.Data[roomIdResp.Data.RoomId]
- if !ok {
- log.Error("[getBaseRoomInfo]GetByIds not found")
- err = errors.New("roomId not found error")
- return
- }
- roomInfo = info
- return
- }
- func (s *Service) getMultiUserInfo(uid int64) (userInfo *userV3.UserGetMultipleResp_Info, err error) {
- userInfo = &userV3.UserGetMultipleResp_Info{}
- pr, err := s.AccountClient.Profile3(context.TODO(), &accountApi.MidReq{Mid: uid})
- if err != nil {
- log.Error("[getMultiUserInfo]Profile3 rpc error, error:%+v", err)
- return
- }
- if pr == nil {
- log.Error("[getMultiUserInfo]Profile3 empty data")
- err = errors.New("user empty error")
- return
- }
- userInfo.Uid = uid
- userInfo.Uname = pr.GetProfile().GetName()
- userInfo.Face = pr.GetProfile().GetFace()
- if userInfo.Uname != "" {
- return
- }
- err = errors.New("user not found")
- log.Error("[getMultiUserInfo]GetMultiple no user, data:%+v", userInfo)
- return
- }
- func (s *Service) getFc(uid int64) (fc int, err error) {
- fcResp := &relationV1.FeedGetUserFcResp{}
- fcResp, err = dao.RelationApi.V1Feed.GetUserFc(rpccontext.WithTimeout(context.TODO(), 50*time.Millisecond), &relationV1.FeedGetUserFcReq{
- Follow: uid,
- })
- if err != nil {
- log.Error("[getFc]GetFc rpc error, error:%+v", err)
- return
- }
- if fcResp.Code != 0 {
- log.Error("[getFc]GetFc return error, code:%d, msg:%s", fcResp.Code, fcResp.Msg)
- err = errors.New("fc return error")
- return
- }
- if fcResp.Data == nil {
- log.Error("[getFc]GetFc empty data")
- err = errors.New("fc empty error")
- return
- }
- fc = int(fcResp.Data.Fc)
- return
- }
- func (s *Service) saveHBase(c context.Context, key string, columnInfo map[string][]byte) (err error) {
- var ctx, cancel = context.WithTimeout(c, time.Duration(s.c.SearchHBase.WriteTimeout)*time.Millisecond)
- defer cancel()
- values := map[string]map[string][]byte{hbaseFamily: columnInfo}
- if _, err = s.dao.SearchHBase.PutStr(ctx, hbaseTable, key, values); err != nil {
- log.Error("SearchHBase.PutStr error(%v), table(%s), values(%+v)", err, hbaseTable, values)
- }
- return
- }
- func (s *Service) getLockStatus(lockStatus string) int {
- status := 0
- if lockStatus != "0000-00-00 00:00:00" {
- status = 1
- }
- return status
- }
- func (s *Service) getHiddenStatus(HiddenStatus string) int {
- status := 0
- if HiddenStatus != "0000-00-00 00:00:00" {
- status = 1
- }
- return status
- }
- //hbase key roomID md5
- func (s *Service) rowKey(roomId int) string {
- key := fmt.Sprintf("%d_%d", roomId%10, roomId)
- return key
- }
- func (s *Service) generateSearchInfo(action string, table string, new *model.TableField, old *model.TableField) (ret map[string]interface{}, retByte map[string][]byte) {
- ret = make(map[string]interface{})
- ret["action"] = action
- ret["table"] = table
- //搜索字段转换
- newMap := make(map[string]interface{})
- newMap["id"] = new.RoomId
- newMap["short_id"] = new.ShortId
- newMap["uid"] = new.Uid
- newMap["uname"] = new.UName
- newMap["category"] = new.Area
- newMap["title"] = new.Title
- newMap["tag"] = new.Tag
- newMap["try_time"] = new.TryTime
- newMap["cover"] = new.Cover
- newMap["user_cover"] = new.UserCover
- newMap["lock_status"] = s.getLockStatus(new.LockStatus)
- newMap["hidden_status"] = s.getHiddenStatus(new.HiddenStatus)
- newMap["attentions"] = new.Attentions
- newMap["attention"] = new.Attentions
- newMap["online"] = new.Online
- newMap["live_time"] = new.LiveTime
- newMap["area_v2_id"] = new.AreaV2Id
- newMap["ord"] = new.AreaV2ParentId
- newMap["arcrank"] = new.Virtual
- newMap["lastupdate"] = s.getLastUpdate(new)
- newMap["is_live"] = s.getLiveStatus(new)
- newMap["s_category"] = new.AreaV2Name
- ret["new"] = newMap
- oldMap := make(map[string]interface{})
- if old != nil {
- oldMap["id"] = old.RoomId
- oldMap["short_id"] = old.ShortId
- oldMap["uid"] = old.Uid
- oldMap["uname"] = old.UName
- oldMap["category"] = old.Area
- oldMap["title"] = old.Title
- oldMap["tag"] = old.Tag
- oldMap["try_time"] = old.TryTime
- oldMap["cover"] = old.Cover
- oldMap["user_cover"] = old.UserCover
- oldMap["lock_status"] = s.getLockStatus(old.LockStatus)
- oldMap["hidden_status"] = s.getHiddenStatus(old.HiddenStatus)
- oldMap["attentions"] = old.Attentions
- oldMap["attention"] = old.Attentions
- oldMap["online"] = old.Online
- oldMap["live_time"] = old.LiveTime
- oldMap["area_v2_id"] = old.AreaV2Id
- oldMap["area_v2_name"] = old.AreaV2Name
- oldMap["ord"] = old.AreaV2ParentId
- oldMap["arcrank"] = old.Virtual
- oldMap["lastupdate"] = s.getLastUpdate(old)
- oldMap["is_live"] = s.getLiveStatus(old)
- }
- if action != "insert" && old == nil {
- oldMap["id"] = new.RoomId
- oldMap["short_id"] = new.ShortId
- oldMap["uid"] = new.Uid
- oldMap["uname"] = new.UName
- oldMap["category"] = new.Area
- oldMap["title"] = new.Title
- oldMap["tag"] = new.Tag
- oldMap["try_time"] = new.TryTime
- oldMap["cover"] = new.Cover
- oldMap["user_cover"] = new.UserCover
- oldMap["lock_status"] = s.getLockStatus(new.LockStatus)
- oldMap["hidden_status"] = s.getHiddenStatus(new.HiddenStatus)
- oldMap["attentions"] = new.Attentions
- oldMap["attention"] = new.Attentions
- oldMap["online"] = new.Online
- oldMap["live_time"] = new.LiveTime
- oldMap["area_v2_id"] = new.AreaV2Id
- oldMap["area_v2_name"] = new.AreaV2Name
- oldMap["ord"] = new.AreaV2ParentId
- oldMap["arcrank"] = new.Virtual
- oldMap["lastupdate"] = s.getLastUpdate(new)
- oldMap["is_live"] = s.getLiveStatus(new)
- }
- ret["old"] = oldMap
- newByteMap := make(map[string][]byte)
- newByteMap["id"] = []byte(strconv.Itoa(new.RoomId))
- newByteMap["short_id"] = []byte(strconv.Itoa(new.ShortId))
- newByteMap["uid"] = []byte(strconv.FormatInt(new.Uid, 10))
- newByteMap["uname"] = []byte(new.UName)
- newByteMap["category"] = []byte(strconv.Itoa(new.Area))
- newByteMap["title"] = []byte(new.Title)
- newByteMap["tag"] = []byte(new.Tag)
- newByteMap["try_time"] = []byte(new.TryTime)
- newByteMap["cover"] = []byte(new.Cover)
- newByteMap["user_cover"] = []byte(new.UserCover)
- newByteMap["lock_status"] = []byte(strconv.Itoa(s.getLockStatus(new.LockStatus)))
- newByteMap["hidden_status"] = []byte(strconv.Itoa(s.getHiddenStatus(new.HiddenStatus)))
- newByteMap["attentions"] = []byte(strconv.Itoa(new.Attentions))
- newByteMap["attention"] = []byte(strconv.Itoa(new.Attentions))
- newByteMap["online"] = []byte(strconv.Itoa(new.Online))
- newByteMap["live_time"] = []byte(new.LiveTime)
- newByteMap["area_v2_id"] = []byte(strconv.Itoa(new.AreaV2Id))
- newByteMap["ord"] = []byte(strconv.Itoa(new.AreaV2ParentId))
- newByteMap["arcrank"] = []byte(strconv.Itoa(new.Virtual))
- newByteMap["lastupdate"] = []byte(s.getLastUpdate(new))
- newByteMap["is_live"] = []byte(strconv.Itoa(s.getLiveStatus(new)))
- newByteMap["s_category"] = []byte(new.AreaV2Name)
- return ret, newByteMap
- }
- //获取直播状态
- func (s *Service) getLiveStatus(roomInfo *model.TableField) int {
- if roomInfo.LiveTime != "0000-00-00 00:00:00" {
- return 1
- }
- if roomInfo.RoundStatus == 1 && roomInfo.OnFlag == 1 {
- return 2
- }
- return 0
- }
- //获取房间最后更新时间
- func (s *Service) getLastUpdate(roomInfo *model.TableField) string {
- if roomInfo.MTime != "0000-00-00 00:00:00" {
- return roomInfo.MTime
- }
- return roomInfo.CTime
- }
- func (s *Service) getAreaV2Detail(areaV2Id int) (areaInfo *roomV1.AreaGetDetailResp_AreaInfo, err error) {
- areaResp, err := dao.RoomApi.V1Area.GetDetail(rpccontext.WithTimeout(context.TODO(), 50*time.Millisecond), &roomV1.AreaGetDetailReq{
- Id: int64(areaV2Id),
- })
- if err != nil {
- log.Error("[getAreaV2Detail]GetMultiple rpc error, error:%+v", err)
- return
- }
- if areaResp.Code != 0 {
- log.Error("[getAreaV2Detail]GetMultiple return error, code:%d, msg:%s", areaResp.Code, areaResp.Msg)
- err = errors.New("user return error")
- return
- }
- if areaResp.Data == nil {
- log.Error("[getAreaV2Detail]GetMultiple empty data")
- err = errors.New("area detail empty error")
- return
- }
- return areaResp.Data, err
- }
|