You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.4 KiB
101 lines
2.4 KiB
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 |
|
}
|
|
|