Commit 2afef13c authored by chenweijian's avatar chenweijian

cp信息

parent 929ac6dd
...@@ -14,6 +14,7 @@ import ( ...@@ -14,6 +14,7 @@ import (
type CvCpInfo struct { type CvCpInfo struct {
UserInfo *user_cv.UserTiny `json:"userInfo"` // 用户信息 UserInfo *user_cv.UserTiny `json:"userInfo"` // 用户信息
CpUserInfo *user_cv.UserTiny `json:"cpUserInfo,omitempty"` // cp用户信息 CpUserInfo *user_cv.UserTiny `json:"cpUserInfo,omitempty"` // cp用户信息
CreatedUnix int64 `json:"createdUnix"` // cp创建时间
CpDays int `json:"cpDays"` // cp天数 CpDays int `json:"cpDays"` // cp天数
VisitTimes int64 `json:"visitTimes"` // 空间访问量 VisitTimes int64 `json:"visitTimes"` // 空间访问量
ApplyToUnbind bool `json:"applyToUnbind"` // 是否申请撤销cp ApplyToUnbind bool `json:"applyToUnbind"` // 是否申请撤销cp
......
...@@ -42,6 +42,20 @@ func UserToTiny(user user_m.User) *UserTiny { ...@@ -42,6 +42,20 @@ func UserToTiny(user user_m.User) *UserTiny {
} }
} }
func UserTinyToCvTiny(user *user_m.UserTiny) *UserTiny {
return &UserTiny{
Id: user.ID,
ExternalId: user.ExternalId,
Avatar: user.Avatar,
Nick: user.Nick,
Sex: user.Sex,
Code: user.Code,
Country: user.Country,
CountryIcon: user.CountryIcon,
IsPrettyCode: user.IsPrettyCode,
}
}
//用户基本信息 //用户基本信息
type CvUserBase struct { type CvUserBase struct {
//不会有返回值 //不会有返回值
......
package user_c package user_c
import ( import (
"git.hilo.cn/hilo-common/_const/common"
"git.hilo.cn/hilo-common/domain" "git.hilo.cn/hilo-common/domain"
"git.hilo.cn/hilo-common/resource/mysql" "git.hilo.cn/hilo-common/resource/mysql"
"git.hilo.cn/hilo-common/utils"
redisV8 "github.com/go-redis/redis/v8" redisV8 "github.com/go-redis/redis/v8"
"github.com/jinzhu/copier" "github.com/jinzhu/copier"
"hilo-user/_const/redis_key/user_k" "hilo-user/_const/redis_key/user_k"
...@@ -10,6 +12,7 @@ import ( ...@@ -10,6 +12,7 @@ import (
"hilo-user/domain/model/user_m" "hilo-user/domain/model/user_m"
"hilo-user/myerr" "hilo-user/myerr"
"hilo-user/myerr/bizerr" "hilo-user/myerr/bizerr"
"time"
) )
// 获取用户简要信息 // 获取用户简要信息
...@@ -113,3 +116,89 @@ func cacheUserTiny(model *domain.Model, user *user_m.User) error { ...@@ -113,3 +116,89 @@ func cacheUserTiny(model *domain.Model, user *user_m.User) error {
} }
return nil return nil
} }
// 获取用户简要信息
// param userIds 用户id列表
func GetUserTinyMap(model *domain.Model, userIds []mysql.ID, isDefAvatar bool) (map[mysql.ID]*user_m.UserTiny, error) {
redisNoIds := make([]mysql.ID, 0)
res := make(map[mysql.ID]*user_m.UserTiny)
for _, id := range userIds {
userTiny := new(user_m.UserTiny)
key := user_k.GetUserTinyKey(id)
err := cache.GetJSON(model, key, userTiny)
if err != nil && err != redisV8.Nil {
return nil, err
}
if err == redisV8.Nil {
redisNoIds = append(redisNoIds, id)
} else if userTiny.ID > 0 {
res[id] = userTiny
}
}
// 从db中读
users, err := user_m.GetUsers(model, redisNoIds)
if err != nil {
return nil, err
}
for _, u := range users {
userTiny := ToUserTinyBy(u)
err = cacheUserTiny(model, u)
if err != nil {
return nil, err
}
res[userTiny.ID] = userTiny
}
if isDefAvatar {
for _, v := range res {
if len(v.Avatar) <= 0 {
if v.Sex == mysql.MAN {
v.Avatar = utils.MakeFullUrl(common.DefaultAvatarMan)
} else if v.Sex == mysql.WOMAN {
v.Avatar = utils.MakeFullUrl(common.DefaultAvatarWoman)
}
}
}
}
return res, nil
}
func ToUserTinyBy(user *user_m.User) *user_m.UserTiny {
return &user_m.UserTiny{
ID: user.ID,
Avatar: IfLogoutStr(IfLogout(user.LogoutTime), "", user.Avatar),
ExternalId: user.ExternalId,
Nick: IfLogoutNick(IfLogout(user.LogoutTime), user.Code, user.Nick),
Sex: user.Sex,
Code: user.Code,
Country: user.Country,
CountryIcon: user.CountryIcon,
IsPrettyCode: user.IsPrettyCode(),
IsLogout: IfLogout(user.LogoutTime),
Birthday: BirthdayToUint64(&user.Birthday),
}
}
func IfLogout(logoutTime int64) bool {
return logoutTime > 0 && time.Now().Unix() > logoutTime
}
func BirthdayToUint64(birthday *mysql.Timestamp) *uint64 {
if *birthday == 0 {
return nil
}
return (*uint64)(birthday)
}
func IfLogoutStr(condition bool, trueVal, falseVal string) string {
if condition {
return trueVal
}
return falseVal
}
func IfLogoutNick(condition bool, code string, nick string) string {
if condition {
return "Hilo No." + code
}
return nick
}
...@@ -135,3 +135,12 @@ func BirthdayToUint64(birthday *mysql.Timestamp) *uint64 { ...@@ -135,3 +135,12 @@ func BirthdayToUint64(birthday *mysql.Timestamp) *uint64 {
} }
return (*uint64)(birthday) return (*uint64)(birthday)
} }
//获取用户
func GetUsers(model *domain.Model, ids []mysql.ID) ([]*User, error) {
res := make([]*User, 0)
if err := model.Db.WithContext(model.Context).Where("id in (?)", ids).Find(&res).Error; err != nil {
return nil, myerr.WrapErr(err)
}
return res, nil
}
...@@ -9,9 +9,11 @@ import ( ...@@ -9,9 +9,11 @@ import (
"git.hilo.cn/hilo-common/myerr/comerr" "git.hilo.cn/hilo-common/myerr/comerr"
"git.hilo.cn/hilo-common/sdk/tencentyun" "git.hilo.cn/hilo-common/sdk/tencentyun"
"git.hilo.cn/hilo-common/txop/msg" "git.hilo.cn/hilo-common/txop/msg"
"git.hilo.cn/hilo-common/utils"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"hilo-user/_const/enum/cp_e" "hilo-user/_const/enum/cp_e"
"hilo-user/cv/cp_cv" "hilo-user/cv/cp_cv"
"hilo-user/cv/user_cv"
"hilo-user/domain/cache/user_c" "hilo-user/domain/cache/user_c"
"hilo-user/domain/model/cp_m" "hilo-user/domain/model/cp_m"
"hilo-user/domain/model/diamond_m" "hilo-user/domain/model/diamond_m"
...@@ -21,6 +23,7 @@ import ( ...@@ -21,6 +23,7 @@ import (
"hilo-user/req" "hilo-user/req"
"hilo-user/resp" "hilo-user/resp"
"strconv" "strconv"
"time"
) )
// @Tags cp关系 // @Tags cp关系
...@@ -329,13 +332,8 @@ func ReplyCpCancel(c *gin.Context) (*mycontext.MyContext, error) { ...@@ -329,13 +332,8 @@ func ReplyCpCancel(c *gin.Context) (*mycontext.MyContext, error) {
} }
type CpDetail struct { type CpDetail struct {
Avatar1 string `json:"avatar1"` CpInfo cp_cv.CvCpInfo `json:"cpInfo"` // cp信息
Avatar2 string `json:"avatar2"` CpLevel cp_cv.CvCpLevel `json:"cpLevel"` // cp等级
Nick1 string `json:"nick1"`
Nick2 string `json:"nick2"`
Grade int `json:"grade"` // 等级
GradeName string `json:"gradeName"` // 等级称号
CreatedTime int64 `json:"createdTime"` // cp创建时间
} }
// @Tags cp关系 // @Tags cp关系
...@@ -360,18 +358,30 @@ func CpDetailPage(c *gin.Context) (*mycontext.MyContext, error) { ...@@ -360,18 +358,30 @@ func CpDetailPage(c *gin.Context) (*mycontext.MyContext, error) {
var res *CpDetail var res *CpDetail
if cp.Id > 0 { if cp.Id > 0 {
res = new(CpDetail) userIds := []uint64{cp.UserId1, cp.UserId2}
if cp.UserId1 == user.ID { userMap, err := user_c.GetUserTinyMap(model, userIds, false)
res.Avatar1 = user.Avatar if err != nil {
res.Nick1 = user.Nick return myCtx, err
user2, err := user_c.GetUserTinyById(model, cp.UserId2) }
if err != nil {
return myCtx, err
}
res.Avatar2 = user2.Avatar
res.Nick2 = user2.Nick
res.CreatedTime = cp.CreatedTime.Unix() res = new(CpDetail)
// 返回值
level := cp_m.GetCpLevel(model, cp.Id)
res.CpLevel = cp_cv.CvCpLevel{
Level: level.Level,
Points: cp_e.CpLevelPoints[level.Level] + level.Points,
StartPoints: cp_e.CpLevelPoints[level.Level],
ExpireAtUnix: level.ExpireAt.Unix(),
SettlementDate: level.ExpireAt.Format(utils.DATE_FORMAT),
}
if res.CpLevel.Level != cp_e.CpLevelMax {
res.CpLevel.EndPoints = cp_e.CpLevelPoints[res.CpLevel.Level+1]
}
res.CpInfo = cp_cv.CvCpInfo{
UserInfo: user_cv.UserTinyToCvTiny(userMap[cp.UserId1]),
CpUserInfo: user_cv.UserTinyToCvTiny(userMap[cp.UserId1]),
CpDays: int(time.Now().Sub(cp.CreatedTime).Hours()/24) + 1,
CreatedUnix: cp.CreatedTime.Unix(),
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment