102 lines
2.4 KiB
Go
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
|
||
|
}
|