go-common/app/interface/live/web-room/dao/roomAdmin.go
2019-04-22 18:49:16 +08:00

102 lines
2.4 KiB
Go

package dao
import (
"context"
v1pb "go-common/app/interface/live/web-room/api/http/v1"
"go-common/app/service/live/xuser/api/grpc/v1"
account "go-common/app/service/main/account/model"
"go-common/library/log"
"math"
)
// GetByRoomIDPage get roomadmin list by roomid.
func (d *Dao) GetByRoomIDPage(c context.Context, roomID int64, page int64, pageSize int64) (resp *v1pb.RoomAdminGetByRoomResp, err error) {
resp = &v1pb.RoomAdminGetByRoomResp{}
resp.Page = &v1pb.RoomAdminGetByRoomResp_Page{
Page: page,
PageSize: pageSize,
TotalPage: 1,
TotalCount: 0,
}
ret, err := d.RoomAdminAPI.GetByRoom(c, &v1.RoomAdminGetByRoomReq{
Roomid: roomID,
})
log.Info("call GetByAnchor mid(%v) page (%v) ret(%v)", roomID, page, ret)
if err != nil {
log.Error("call GetByAnchor mid(%v) page (%v) error(%v)", roomID, page, err)
return
}
if ret == nil || ret.Data == nil {
return
}
mids, _ := d.getUidsFromAdmins(c, ret.Data)
dataLen := int64(len(mids))
d.setPager(dataLen, pageSize, page, resp.Page)
begin, end := d.getRange(pageSize, page, dataLen)
args := &account.ArgMids{Mids: mids[begin:end]}
accData, err := d.acc.Infos3(c, args)
if err != nil {
log.Error("call account.Infos3(%v) error(%v)", args, err)
return resp, err
}
for _, v := range ret.Data[begin:end] {
item := &v1pb.RoomAdminGetByRoomResp_Data{
Uid: v.Uid,
Ctime: v.Ctime,
}
if _, ok := accData[item.Uid]; ok {
item.Face = accData[item.Uid].Face
item.Uname = accData[item.Uid].Name
} else {
log.Error("没有这个人的用户信息 uid(%v) data(%v)", item.Uid, accData)
}
resp.Data = append(resp.Data, item)
}
return
}
// getAnchorUidsFromAdmins .
// 根据批量房管获取对应主播的房间号和UID
func (d *Dao) getUidsFromAdmins(c context.Context, admins []*v1.RoomAdminGetByRoomResp_Data) (uids []int64, err error) {
if len(admins) == 0 {
return
}
for _, r := range admins {
uids = append(uids, r.Uid)
}
return
}
// pageSize, page, dataLen
func (d *Dao) getRange(pageSize int64, page int64, dataLen int64) (begin int64, end int64) {
begin = (page - 1) * pageSize
end = page * pageSize
if end > dataLen {
end = dataLen
}
if begin > end {
begin = end
}
return
}
func (d *Dao) setPager(dataLen int64, pageSize int64, page int64, pager *v1pb.RoomAdminGetByRoomResp_Page) {
pager.Page = page
pager.TotalCount = dataLen
pager.TotalPage = int64(math.Ceil(float64(dataLen) / float64(pageSize)))
pager.PageSize = pageSize
}