Commit c06b5b7d by xuzhenhao

修改了排行榜个人排行以及前后数据返回

1 parent 47bb6f9c
......@@ -383,19 +383,22 @@ func IceGameTopRedisGetSingleUserRangeRankInfo(uid string, gtid string, gid stri
return nil, resIndex, err
}
// 获取当前用户排名
rank, err := RedisZRank(redisConn, "sortset:gtid:"+gtid+":gid:"+gid+":toptype:"+toptype, "ice_gametop:uid:"+uid+":gtid:"+gtid+":gid:"+gid+":toptype:"+toptype+":mykey")
rank, err := GetSingleUserRank("sortset:gtid:"+gtid+":gid:"+gid+":toptype:"+toptype, "ice_gametop:uid:"+uid+":gtid:"+gtid+":gid:"+gid+":toptype:"+toptype+":mykey")
if err != nil {
return nil, rank.(string), err
}
rankIndex := rank.(int)
//获取当前用户分数
score, err := RedisZScore(redisConn, "sortset:gtid:"+gtid+":gid:"+gid+":toptype:"+toptype, "ice_gametop:uid:"+uid+":gtid:"+gtid+":gid:"+gid+":toptype:"+toptype+":mykey")
if err != nil {
resIndex = "105202"
return nil, resIndex, err
}
if rank == nil {
if score == nil {
err = errors.New("用户未提交分数")
return nil, "105201", err
}
log.Println("key:", "ice_gametop:uid:"+uid+":gtid:"+gtid+":gid:"+gid+":toptype:"+toptype+":mykey")
log.Println("rank:", rank)
rankIndex := int(rank.(int64))
scoreString := "(" + score.(string)
// 获取当前用户前x位和后x位的排名数据
var prerankIndex int
var nextrankIndex int
......@@ -427,11 +430,67 @@ func IceGameTopRedisGetSingleUserRangeRankInfo(uid string, gtid string, gid stri
nextrankIndex = rankIndex + nextrankIndex
// 排序
var strList []string
var strList, strList1, strList2 []string
if sorceorder == "1" {
strList, err = RedisSort(redisConn, "sortset:gtid:"+gtid+":gid:"+gid+":toptype:"+toptype, prerankIndex, nextrankIndex)
if nextrankIndex != 0 {
strList1, err = RedisZRangeByScore(redisConn, "sortset:gtid:"+gtid+":gid:"+gid+":toptype:"+toptype, score, "+inf", "true", 0, nextrankIndex)
}
if prerankIndex != 0 {
strList2, err = RedisZRevRangeByScore(redisConn, "sortset:gtid:"+gtid+":gid:"+gid+":toptype:"+toptype, score, "-inf", "true", 0, prerankIndex)
//将结果倒序
var tempList []string
for i := len(strList2); i < 0; i -= 2 {
tempList = append(tempList, strList2[i-1])
tempList = append(tempList, strList2[i])
}
strList2 = tempList
}
if len(strList2) == 0 {
strList = append(strList, "ice_gametop:uid:"+uid+":gtid:"+gtid+":gid:"+gid+":toptype:"+toptype+":mykey")
strList = append(strList, score.(string))
if len(strList1) != 0 {
strList = append(strList, strList1...)
}
} else {
strList = append(strList, strList2...)
strList = append(strList, "ice_gametop:uid:"+uid+":gtid:"+gtid+":gid:"+gid+":toptype:"+toptype+":mykey")
strList = append(strList, score.(string))
if len(strList1) != 0 {
strList = append(strList, strList1...)
}
}
} else if sorceorder == "0" {
strList, err = RedisReverseSort(redisConn, "sortset:gtid:"+gtid+":gid:"+gid+":toptype:"+toptype, prerankIndex, nextrankIndex)
if nextrankIndex != 0 {
strList1, err = RedisZRangeByScore(redisConn, "sortset:gtid:"+gtid+":gid:"+gid+":toptype:"+toptype, score, "+inf", "true", 0, prerankIndex)
//将结果倒序
var tempList []string
for i := len(strList1); i < 0; i -= 2 {
tempList = append(tempList, strList1[i-1])
tempList = append(tempList, strList1[i])
}
strList1 = tempList
}
if prerankIndex != 0 {
strList2, err = RedisZRevRangeByScore(redisConn, "sortset:gtid:"+gtid+":gid:"+gid+":toptype:"+toptype, score, "-inf", "true", 0, nextrankIndex)
}
if len(strList1) == 0 {
strList = append(strList, "ice_gametop:uid:"+uid+":gtid:"+gtid+":gid:"+gid+":toptype:"+toptype+":mykey")
strList = append(strList, score.(string))
if len(strList2) != 0 {
strList = append(strList, strList2...)
}
} else {
strList = append(strList, strList1...)
strList = append(strList, "ice_gametop:uid:"+uid+":gtid:"+gtid+":gid:"+gid+":toptype:"+toptype+":mykey")
strList = append(strList, score.(string))
if len(strList2) != 0 {
strList = append(strList, strList2...)
}
}
}
if err != nil {
resIndex = "105203"
......@@ -446,7 +505,6 @@ func IceGameTopRedisGetSingleUserRangeRankInfo(uid string, gtid string, gid stri
igt := make([]IGT, len(strList)/2)
log.Println(igt)
log.Println(len(igt))
index := 0
var resultstr string
var valuecount = 2
_, err = RedisDBSelect(redisConn, 4)
......@@ -466,7 +524,11 @@ func IceGameTopRedisGetSingleUserRangeRankInfo(uid string, gtid string, gid stri
s = i / 2
}
igt[s].UID = currUID
igt[s].RankIndex = prerankIndex + index + 1
rank, err := GetSingleUserRank("sortset:gtid:"+gtid+":gid:"+gid+":toptype:"+toptype, "ice_gametop:uid:"+uid+":gtid:"+gtid+":gid:"+gid+":toptype:"+toptype+":mykey")
if err != nil {
return nil, rank.(string), err
}
igt[s].RankIndex = rank.(int)
igt[s].MyKey = strList[i+1]
//查询储存昵称以及头像url的redis
resultstr, err = RedisGetKV(redisConn, "GUID:"+igt[s].UID)
......@@ -493,8 +555,6 @@ func IceGameTopRedisGetSingleUserRangeRankInfo(uid string, gtid string, gid stri
igt[s].NickName = result[0] //第一个为昵称
igt[s].HeadPortraitURL = result[1] //第二个为头像url
}
index++
}
_, err = RedisDBSelect(redisConn, 2)
if err != nil {
......@@ -536,3 +596,21 @@ func IceGameTopRedisCreateRank(gtid string, gid string, toptype string, gtname s
return nil
}
//获取单个用户的排名
func GetSingleUserRank(key string, member string) (rankIndex interface{}, err error) {
redisConn := RedisClient.GetConn()
defer RedisClose(redisConn)
rank, err := RedisZRank(redisConn, key, member)
if err != nil {
resIndex = "105202"
return resIndex, err
}
if rank == nil {
err = errors.New("用户未提交分数")
return "105201", err
}
log.Println("key:", key)
log.Println("rank:", rank)
rankIndex = int(rank.(int64))
}
......@@ -223,3 +223,23 @@ func RedisIncrBy(conn redis.Conn, key string, num int64) (reply interface{}, err
func RedisZRank(conn redis.Conn, key string, member string) (reply interface{}, err error) {
return RedisCommand(conn, "zrank", key, member)
}
/*
* zrangebyscore
*/
func RedisZRangeByScore(conn redis.Conn, key string, startScore string, endScore string, limit string, limitStart int, limitEnd int) (reply interface{}, err error) {
if limit == "true" {
return RedisCommand(conn, "zrangebyscore", key, startScore, endScore, "withscore", "limit", limitStart, limitEnd)
}
return RedisCommand(conn, "zrangebyscore", key, startScore, endScore, "withscore")
}
/*
* zrevrangebyscore
*/
func RedisZRevRangeByScore(conn redis.Conn, key string, startScore string, endScore string, limit string, limitStart int, limitEnd int) (reply interface{}, err error) {
if limit == "true" {
return RedisCommand(conn, "zrevrangebyscore", key, startScore, endScore, "withscore", "limit", limitStart, limitEnd)
}
return RedisCommand(conn, "zrevrangebyscore", key, startScore, endScore, "withscore")
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!