128 lines
2.7 KiB
Go
128 lines
2.7 KiB
Go
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
|
|
}
|