From 3b73212b822773b902f7ef8e16b882f1cabba6c9 Mon Sep 17 00:00:00 2001 From: chenweijian <820961417@qq.com> Date: Wed, 26 Jul 2023 16:17:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cv/user_cv/user.go | 51 ++++++++++++++++++++++++++++++++++++ route/router.go | 1 + route/user_r/user.go | 62 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+) diff --git a/cv/user_cv/user.go b/cv/user_cv/user.go index 6dc2378..5aeee0c 100644 --- a/cv/user_cv/user.go +++ b/cv/user_cv/user.go @@ -1,6 +1,7 @@ package user_cv import ( + "encoding/json" "git.hilo.cn/hilo-common/_const/common" "git.hilo.cn/hilo-common/domain" "git.hilo.cn/hilo-common/mylogrus" @@ -493,6 +494,49 @@ type CvUserDetail struct { Cp *CvCp `json:"cp,omitempty"` // cp信息 } +//用户详细信息-在房间里面时需要的 +type CvUserDetailRoom struct { //不会有返回值 + //不会有返回值 + Id *mysql.ID `json:"id,omitempty"` + //头像,不存在为nil + Avatar *string `json:"avatar"` + //是否默认头像 true:是 false:不是 + DefaultAvatar *bool `json:"defaultAvatar"` + //用户对外ID + ExternalId *string `json:"externalId"` + //昵称,不存在为nil + Nick *string `json:"nick"` + //性别 1:男 2:女,不存在为nil + Sex *uint8 `json:"sex"` + //国家,不存在为nil + Country *string `json:"country"` + //国旗图标,不存在为nil + CountryIcon *string `json:"countryIcon"` + //邀请码 + Code *string `json:"code"` + IsPrettyCode bool `json:"isPrettyCode"` // 是否靓号 + //生日,如果是其它人用户信息,年龄则按照是否展示显示,如果是本人,年龄则按照是否存在展示 + Birthday *uint64 `json:"birthday"` + //是否展示年龄, 是本人才有数据,看其他用户均为nil + IsShowAge *uint8 `json:"isShowAge"` + //是否VIP用户 + IsVip bool `json:"isVip"` + Svip rpc.CvSvip `json:"svip"` // svip结构,等级+权限 + Medals []uint32 `json:"medals"` // 勋章列表 + Noble noble_cv.CvNoble `json:"noble"` // 当前的 + CountryManager *CVCountryManager `json:"countryManager,omitempty"` // 国家管理员 + Headwear *headwear_cv.CvHeadwear `json:"headwear"` // 当前使用的头饰 + WealthUserGrade uint32 `json:"wealthUserGrade"` //财富等级 + CharmUserGrade uint32 `json:"charmUserGrade"` //魅力等级 + ActivityUserGrade uint32 `json:"activityUserGrade"` //活跃等级 + GroupPower rpc.CvGroupPowerInfo `json:"groupPower"` // 家族 + //是否喜欢(本人没有数据,//20210205 已废弃nil,产品说:可以自己喜欢自己) + IsLike *bool `json:"isLike"` + //别人是否喜欢我,自己本人没有数据 (20210205 已废弃nil,产品说:可以自己喜欢自己) + IsLikeMe *bool `json:"isLikeMe"` + Cp *CvCp `json:"cp,omitempty"` // cp信息 +} + // cv国家管理人员 type CVCountryManager struct { Country string `json:"country"` // 国家name @@ -536,3 +580,10 @@ func UserBaseToUserLittle(base *CvUserBase) *CvUserLittle { Nick: base.Nick, } } + +func CvUserDetailToCvUserDetailRoom(info *CvUserDetail) *CvUserDetailRoom { + res := new(CvUserDetailRoom) + jData, _ := json.Marshal(info) + _ = json.Unmarshal(jData, &res) + return res +} diff --git a/route/router.go b/route/router.go index 81cfcb8..080a5d6 100644 --- a/route/router.go +++ b/route/router.go @@ -32,6 +32,7 @@ func InitRouter() *gin.Engine { user.GET("/bag/:resType", wrapper(user_r.UserBag)) user.GET("/detail", EncryptHandle, wrapper(user_r.UserDetail)) user.GET("/detail/:userExternalId", EncryptHandle, wrapper(user_r.UserDetailByExternalId)) + user.GET("/detail/room/:userExternalId", EncryptHandle, wrapper(user_r.GetUserDetailInRoom)) } cp := v2.Group("/cp") { diff --git a/route/user_r/user.go b/route/user_r/user.go index 87cf5cf..30c5fe2 100644 --- a/route/user_r/user.go +++ b/route/user_r/user.go @@ -7,6 +7,7 @@ import ( "git.hilo.cn/hilo-common/resource/redisCli" "github.com/gin-gonic/gin" "hilo-user/_const/redis_key/user_k" + "hilo-user/cv/user_cv" "hilo-user/domain/model/group_m" "hilo-user/domain/model/tim_m" "hilo-user/domain/service/user_s" @@ -106,3 +107,64 @@ func UserDetailByExternalId(c *gin.Context) (*mycontext.MyContext, error) { resp.ResponseOk(c, cvUserDetail) return myContext, nil } + +// @Tags 用户 +// @Summary 房间内获取用户信息 +// @Param userExternalId path string true "userExternalId" +// @Param groupId query string false "群组id,当传了该id,则返回该用户在该群组的身份" +// @Success 200 {object} user_cv.CvUserDetail +// @Router /v1/user/detail/room/{userExternalId} [get] +func GetUserDetailInRoom(c *gin.Context) (*mycontext.MyContext, error) { + myContext := mycontext.CreateMyContext(c.Keys) + userId, lang, err := req.GetUserIdLang(c, myContext) + if err != nil { + return myContext, err + } + otherUserId, err := req.ToUserId(myContext, mysql.Str(c.Param("userExternalId"))) + if err != nil { + return nil, err + } + model := domain.CreateModelContext(myContext) + + imGroupId := c.Query("groupId") + if imGroupId != "" { + imGroupId, err = group_m.ToImGroupId(model, imGroupId) + if err != nil { + return myContext, err + } + } + + cvUserDetail, err := user_s.NewUserService(myContext).GetUserDetail(otherUserId, userId, lang) + if err != nil { + return myContext, err + } + if imGroupId != "" { + cvUserDetail.GroupRole, err = group_m.GetGroupRoleById(model, imGroupId, otherUserId) + if err != nil { + return myContext, err + } + } + + if cvUserDetail != nil { + // 检查是否需要同步 + if n, err := redisCli.GetRedis().Exists(model, user_k.GetKeySyncTimHilo(userId)).Result(); err == nil { + if n == 0 { + // FIXME:转异步执行 + err = tim_m.FlushHiloInfo(*cvUserDetail.ExternalId, cvUserDetail.IsVip, cvUserDetail.IsPrettyCode, + cvUserDetail.Medals, cvUserDetail.MyGroupPowerName, cvUserDetail.Noble.Level) + if err == nil { + redisCli.GetRedis().Set(model, user_k.GetKeySyncTimHilo(userId), "1", time.Minute) + } else { + model.Log.Info("UserBaseByExternalId, FlushHiloInfo failed: ", err) + } + } else { + model.Log.Info("UserDetailByExternalId, no need to sync yet: ", userId) + } + } else { + model.Log.Info("UserDetailByExternalId, check KeySyncTimHilo failed", err) + } + } + + resp.ResponseOk(c, user_cv.CvUserDetailToCvUserDetailRoom(cvUserDetail)) + return myContext, nil +} -- 2.22.0