package loginlgmod import ( "fmt" "math" "time" "91porn-server/common/db" "91porn-server/common/log" "91porn-server/models" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" ) var mdb *db.MongoDB const table = models.LoginLog func coll(t *db.MongoTool) *db.MongoTool { if t == nil { return mdb.Coll(table) } return t.Coll(table) } // initIndex 设置index func initIndex() { many := []mongo.IndexModel{ //batch set indexes //value is the type 1 or -1 { Keys: bson.D{{Key: "uid", Value: 1}}, }, { Keys: bson.D{{Key: "devID", Value: 1}}, }, { Keys: bson.D{{Key: "loginTime", Value: 1}}, }, } if _, err := coll(nil).CreateIndex(many); err != nil { panic(fmt.Sprintf("%s model set index err ==>[%+v]", table, err)) } } func InsertLoginLog(l *LoginLog) error { if _, err := coll(nil).InsertOne(l); err != nil { log.Error("loginlog insert err", log.E(err)) return err } return nil } func WebGetDayActivity(uids []uint64, start time.Time, end time.Time) (data []LoginLog, err error) { if err = coll(nil).Find( &data, bson.M{ "loginTime": bson.M{ "$and": []bson.M{ bson.M{"$gte": start}, bson.M{"$lte": end}, }, }, "uid": bson.M{ "$in": uids, }, }, ); err != nil { log.ZapLog.Error(fmt.Sprintf("model record login WebGetDayActivity fail error:%+v:", err)) return } return } // GetTotalCnt 获取查询总数总数 func getLoginLogTotalCnt(cond bson.M) (int64, error) { total, err := coll(nil).Count(cond) if err != nil { e := fmt.Sprintf("get total Cnt error: %+v\n", err) log.ZapLog.Error(e) return 0, err } return total, nil } // GetSkipSize 计算跳转 func getLoginLogSkipSize(page int, size int, cond bson.M) (int, int, int64, error) { total, err := getLoginLogTotalCnt(cond) if err != nil { return 0, 0, 0, err } totalpages := int(math.Ceil(float64(total) / float64(size))) if page > totalpages { page = totalpages } if page < 1 { page = 1 } return (page - 1) * size, totalpages, total, nil } // FindLoginLog 查找登陆日志 func FindLoginLogList(page int, size int, cond bson.M, sort bson.D) ([]*LoginLog, int, int64, error) { skip, totalPages, total, err := getLoginLogSkipSize(page, size, cond) if err != nil { return nil, 0, 0, err } var back []*LoginLog if err = coll(nil).Aggregate( &back, []bson.M{ bson.M{"$match": cond}, bson.M{"$sort": sort}, bson.M{"$skip": skip}, bson.M{"$limit": size}, }, ); err != nil { e := fmt.Sprintf("get login logs error: %+v\n", err) log.ZapLog.Error(e) return nil, totalPages, total, err } return back, totalPages, total, nil } func DeleteBeforeLoginTime(t *db.MongoTool, tm time.Time) error { _, err := coll(t).DeleteMany(bson.M{"loginTime": bson.M{"$lt": tm}}) return err }