@@ -0,0 +1,60 @@
|
||||
package srv_acc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"videoweb/pub/common/srvdef"
|
||||
"videoweb/pub/models/mwacc"
|
||||
"videoweb/pub/models/oplog"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
)
|
||||
|
||||
func GetOpLogs(ctx context.Context, logSearch *OpLogSearch) (
|
||||
int64, OpLogInfoList, *srvdef.SrvErr) {
|
||||
//log.Info("GetOpLogs Test 1")
|
||||
filter, findOption := constructFilterAndOpts(logSearch)
|
||||
total, serr := oplog.CountOpLogs(ctx, filter)
|
||||
if serr != nil {
|
||||
return 0, nil, serr
|
||||
}
|
||||
list := make(OpLogInfoList, 0)
|
||||
if total == 0 {
|
||||
return 0, list, nil
|
||||
}
|
||||
//log.Info("GetOpLogs Test 2", log.Any("filter", filter), log.Any("findOption", findOption))
|
||||
opLogs, serr := oplog.FindManyOpLogs(ctx, filter, findOption)
|
||||
if serr != nil {
|
||||
return 0, nil, serr
|
||||
}
|
||||
//log.Info("GetOpLogs Test 3")
|
||||
actIds := make([]int64, 0)
|
||||
for _, v := range opLogs {
|
||||
actIds = append(actIds, v.ActId)
|
||||
}
|
||||
|
||||
accFilter := bson.M{mwacc.FN.MwAcc.Id: bson.M{"$in": actIds}}
|
||||
accs, serr := mwacc.FindManyAccByFilter(ctx, accFilter)
|
||||
if serr != nil {
|
||||
return 0, nil, serr
|
||||
}
|
||||
|
||||
//log.Info("GetOpLogs Test 4")
|
||||
for _, opLog := range opLogs {
|
||||
olInfo := &OpLogInfo{
|
||||
Path: opLog.Path,
|
||||
ActId: opLog.ActId,
|
||||
Action: opLog.Action,
|
||||
Param: opLog.RawData,
|
||||
CreatedAt: opLog.CreatedAt,
|
||||
}
|
||||
for _, acc := range accs {
|
||||
if acc.Id == olInfo.ActId {
|
||||
olInfo.ActName = acc.UserName
|
||||
break
|
||||
}
|
||||
}
|
||||
list = append(list, olInfo)
|
||||
}
|
||||
//log.Info("GetOpLogs Test 5")
|
||||
return total, list, nil
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package srv_acc
|
||||
|
||||
import "time"
|
||||
|
||||
type OpLogInfo struct {
|
||||
Path string `json:"path" bson:"path"` // 请求接口
|
||||
ActId int64 `json:"actId" bson:"actId"` // 操作人Id
|
||||
Action string `json:"action" bson:"action"` // 操作目的
|
||||
Param string `json:"param" bson:"rawData"` // 操作内容
|
||||
CreatedAt time.Time `json:"createdAt" bson:"createdAt"` // 操作时间
|
||||
ActName string `json:"actName" bson:"actName"` // 操作人
|
||||
}
|
||||
|
||||
type OpLogInfoList []*OpLogInfo
|
||||
|
||||
type OpLogSearch struct {
|
||||
PageNum int64 `json:"pageNum"` // 页码
|
||||
PageSize int64 `json:"pageSize"` //
|
||||
Path *string `json:"path"` // 请求接口
|
||||
Action *string `json:"action"` // 操作目的
|
||||
ActId *int64 `json:"actId"` // 操作人Id
|
||||
StartTime *time.Time `json:"startTime"` // 开始时间
|
||||
EndTime *time.Time `json:"endTime"` // 开始时间
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package srv_acc
|
||||
|
||||
import (
|
||||
"videoweb/pub/models/oplog"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
// constructFilterAndOpts 根据搜索参数构建查询filter和options
|
||||
func constructFilterAndOpts(param *OpLogSearch) (
|
||||
bson.M, *options.FindOptions) {
|
||||
|
||||
filter := bson.M{}
|
||||
if param.Path != nil && *param.Path != "" {
|
||||
filter[oplog.FN.OpLog.Path] = bson.M{"$regex": param.Path}
|
||||
}
|
||||
if param.Action != nil && *param.Action != "" {
|
||||
filter[oplog.FN.OpLog.Action] = param.Action
|
||||
}
|
||||
if param.ActId != nil && *param.ActId > 0 {
|
||||
filter[oplog.FN.OpLog.ActId] = param.ActId
|
||||
}
|
||||
if param.StartTime != nil && param.EndTime != nil {
|
||||
filter[oplog.FN.OpLog.CreatedAt] = bson.M{"$gte": param.StartTime, "$lt": param.EndTime}
|
||||
}
|
||||
sort := bson.M{oplog.FN.OpLog.CreatedAt: -1}
|
||||
opt := &options.FindOptions{}
|
||||
opt.SetSort(sort)
|
||||
skip := (param.PageNum - 1) * param.PageSize
|
||||
opt.SetSkip(skip)
|
||||
opt.SetLimit(param.PageSize)
|
||||
return filter, opt
|
||||
}
|
||||
Reference in New Issue
Block a user