@@ -0,0 +1,127 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user