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 }