@@ -0,0 +1,85 @@
|
||||
package userser
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"91porn-server/common/pageopt"
|
||||
"91porn-server/models/l/visitlogmod"
|
||||
"91porn-server/models/v/usermod"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
)
|
||||
|
||||
type UserInfo struct {
|
||||
ID *ObjectID `json:"id,omitempty"`
|
||||
UID *uint64 `json:"uid,omitempty"` //uid
|
||||
CreatedAt *time.Time `json:"createdAt,omitempty"` //用户创建时间
|
||||
HasLocked *bool `json:"hasLocked,omitempty"` //已禁止登陆
|
||||
HasBanned *bool `json:"hasBanned,omitempty"` //已禁言
|
||||
}
|
||||
|
||||
type LoginInfoRecord struct {
|
||||
User UserInfo `json:"user,omitempty"`
|
||||
DevID *string `json:"devID,omitempty"` //设备id
|
||||
DevType *string `json:"devType,omitempty"` //设备类型
|
||||
SysType *string `json:"sysType,omitempty"` //操作系统类型 安卓 IOS
|
||||
BuildID *string `json:"buildID,omitempty"` //包ID
|
||||
Ver *string `json:"ver,omitempty"` //APP版本号
|
||||
IP *string `json:"ip,omitempty"` //最后登陆IP
|
||||
LoginTime *time.Time `json:"loginTime,omitempty"` //用户登陆时间
|
||||
}
|
||||
|
||||
type LoginInfoPage struct {
|
||||
Total int64 `json:"total" bson:"total"`
|
||||
List []LoginInfoRecord `json:"list" bson:"list"`
|
||||
}
|
||||
|
||||
func LoginInfoPages(skip int64, limit int64, createdAtGTEAndLTMatch pageopt.CreatedAtGTEAndLTMatch, uidMatch pageopt.UIDMatch) (page LoginInfoPage, err error) {
|
||||
//默认排序条件
|
||||
sort := bson.D{{Key: "createdAt", Value: -1}}
|
||||
//整理匹配条件
|
||||
matList := []Matcher{createdAtGTEAndLTMatch.New(), uidMatch.New()}
|
||||
//分页数据
|
||||
logs, err := visitlogmod.List(sort, &skip, &limit, matList...)
|
||||
if err != nil {
|
||||
return LoginInfoPage{}, err
|
||||
}
|
||||
logsLen := len(logs)
|
||||
uidList := make([]uint64, logsLen)
|
||||
for i, v := range logs {
|
||||
uidList[i] = v.UID
|
||||
}
|
||||
uInfoMap, err := usermod.UserMap(uidList)
|
||||
if err != nil {
|
||||
return LoginInfoPage{}, err
|
||||
}
|
||||
recordList := make([]LoginInfoRecord, logsLen)
|
||||
for i, log := range logs {
|
||||
_log := log
|
||||
record := LoginInfoRecord{}
|
||||
record.BuildID = &_log.BuildID
|
||||
record.DevID = &_log.DevID
|
||||
record.DevType = &_log.DevType
|
||||
record.SysType = &_log.SysType
|
||||
record.BuildID = &_log.BuildID
|
||||
record.Ver = &_log.Ver
|
||||
record.IP = &_log.IP
|
||||
record.LoginTime = &_log.CreatedAt
|
||||
if user, ok := uInfoMap[_log.UID]; ok {
|
||||
record.User.ID = &user.ID
|
||||
record.User.UID = &user.UID
|
||||
record.User.CreatedAt = &user.CreatedAt
|
||||
record.User.HasLocked = &user.HasLocked
|
||||
record.User.HasBanned = &user.HasBanned
|
||||
}
|
||||
recordList[i] = record
|
||||
}
|
||||
count, err := visitlogmod.Count(matList...)
|
||||
if err != nil {
|
||||
return LoginInfoPage{}, err
|
||||
}
|
||||
return LoginInfoPage{
|
||||
List: recordList,
|
||||
Total: count,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user