86 lines
2.6 KiB
Go
86 lines
2.6 KiB
Go
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
|
|
}
|