forked from all_user/stat_center
Initial commit
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
package srv_applicationstat
|
||||
|
||||
import (
|
||||
"context"
|
||||
"stat/common/stdLog"
|
||||
"stat/models/applicationmod"
|
||||
"stat/models/applicationstat"
|
||||
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
// GetAppStatList 获取应用统计列表
|
||||
func GetAppStatList(ctx context.Context, param *GetApplicationStatReq) (*GetApplicationStatResp, *stdLog.SrvErr) {
|
||||
resp := &GetApplicationStatResp{}
|
||||
//先获取app列表
|
||||
appFilter := bson.M{}
|
||||
statFilter := bson.M{}
|
||||
if param.ParentAppId != nil {
|
||||
appFilter["parentAppId"] = bson.M{"$in": *param.ParentAppId}
|
||||
}
|
||||
if param.ApplicationId != nil {
|
||||
appFilter["_id"] = *param.ApplicationId
|
||||
}
|
||||
if param.ApplicationName != nil {
|
||||
appFilter["name"] = *param.ApplicationName
|
||||
}
|
||||
appList, sErr := applicationmod.FindManyApplication(ctx, appFilter)
|
||||
if sErr != nil {
|
||||
return nil, sErr
|
||||
}
|
||||
applicationId := make([]primitive.ObjectID, 0)
|
||||
for _, info := range appList {
|
||||
applicationId = append(applicationId, info.Id)
|
||||
}
|
||||
statFilter["applicationDbId"] = bson.M{"$in": applicationId}
|
||||
if param.Start != nil || param.End != nil {
|
||||
statFilter[applicationstat.FN.ApplicationStat.SumData] = bson.M{"$gte": *param.Start, "$lte": *param.End}
|
||||
}
|
||||
|
||||
opt := &options.FindOptions{}
|
||||
opt.SetSort(bson.M{applicationstat.FN.ApplicationStat.SumData: -1})
|
||||
opt.SetLimit(param.PageSize)
|
||||
opt.SetSkip((param.PageNum - 1) * param.PageSize)
|
||||
|
||||
totalStats, sErr := applicationstat.FindManyApplicationStat(ctx, statFilter)
|
||||
if sErr != nil {
|
||||
return nil, sErr
|
||||
}
|
||||
|
||||
pageStats, sErr := applicationstat.FindManyApplicationStat(ctx, statFilter, opt)
|
||||
if sErr != nil {
|
||||
return nil, sErr
|
||||
}
|
||||
|
||||
appDict := make(map[primitive.ObjectID]*applicationmod.Application)
|
||||
for _, app := range appList {
|
||||
appDict[app.Id] = app
|
||||
}
|
||||
|
||||
for _, stat := range totalStats {
|
||||
resp.Summary.TotalClick += stat.Total
|
||||
}
|
||||
|
||||
for _, stat := range pageStats {
|
||||
name := ""
|
||||
parentAppId := int64(0)
|
||||
app := appDict[stat.ApplicationDbId]
|
||||
if app != nil {
|
||||
name = app.Name
|
||||
parentAppId = app.ParentAppId
|
||||
}
|
||||
hours := make([]int64, 24)
|
||||
for hour := range hours {
|
||||
hours[hour] = stat.HourData[hour]
|
||||
}
|
||||
doc := &AppStatInfo{
|
||||
Id: stat.Id,
|
||||
ApplicationDbId: stat.ApplicationDbId,
|
||||
ParentAppId: parentAppId,
|
||||
AppName: name,
|
||||
SumDate: stat.SumDate,
|
||||
Total: stat.Total,
|
||||
HourData: hours,
|
||||
CreatedAt: stat.CreatedAt,
|
||||
UpdatedAt: stat.UpdatedAt,
|
||||
}
|
||||
resp.List = append(resp.List, doc)
|
||||
}
|
||||
|
||||
resp.Total = int64(len(totalStats))
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// GetAppStatList 获取应用统计列表
|
||||
func GetAppTotalStatList(ctx context.Context, param *GetApplicationStatTotalReq) (*GetApplicationStatTotalResp, *stdLog.SrvErr) {
|
||||
resp := &GetApplicationStatTotalResp{
|
||||
List: make([]*AppStatTotalInfo, 0),
|
||||
}
|
||||
|
||||
//先获取app列表
|
||||
appFilter := bson.M{}
|
||||
if param.ParentAppId != nil {
|
||||
appFilter["parentAppId"] = bson.M{"$in": *param.ParentAppId}
|
||||
}
|
||||
if param.ApplicationId != nil {
|
||||
appFilter["_id"] = *param.ApplicationId
|
||||
}
|
||||
if param.ApplicationName != nil {
|
||||
appFilter["name"] = *param.ApplicationName
|
||||
}
|
||||
appList, sErr := applicationmod.FindManyApplication(ctx, appFilter)
|
||||
|
||||
if sErr != nil {
|
||||
return nil, sErr
|
||||
}
|
||||
|
||||
applicationId := make([]primitive.ObjectID, 0)
|
||||
appid := make(map[primitive.ObjectID]*applicationmod.Application)
|
||||
for _, info := range appList {
|
||||
applicationId = append(applicationId, info.Id)
|
||||
appid[info.Id] = info
|
||||
}
|
||||
|
||||
filter := bson.M{}
|
||||
filter["applicationDbId"] = bson.M{"$in": applicationId}
|
||||
|
||||
if param.Start != nil && param.End != nil {
|
||||
filter[applicationstat.FN.ApplicationStat.SumData] = bson.M{"$gte": *param.Start, "$lte": *param.End}
|
||||
}
|
||||
|
||||
pipeline := []bson.M{
|
||||
{
|
||||
"$match": filter,
|
||||
},
|
||||
{
|
||||
"$group": bson.M{
|
||||
"_id": "$applicationDbId",
|
||||
"total": bson.M{"$sum": "$total"},
|
||||
},
|
||||
},
|
||||
{"$sort": bson.D{{Key: "_id", Value: -1}}},
|
||||
}
|
||||
|
||||
list := make([]StatTotalInfo, 0)
|
||||
serr := applicationstat.AggregateApplicationStat(ctx, &list, pipeline)
|
||||
|
||||
pipeline = []bson.M{
|
||||
{
|
||||
"$match": filter,
|
||||
},
|
||||
{
|
||||
"$group": bson.M{
|
||||
"_id": "$applicationDbId",
|
||||
"total": bson.M{"$sum": "$total"},
|
||||
},
|
||||
},
|
||||
{"$sort": bson.D{{Key: "_id", Value: -1}}},
|
||||
{"$skip": (param.PageNum - 1) * param.PageSize},
|
||||
{"$limit": param.PageSize},
|
||||
}
|
||||
info := make([]StatTotalInfo, 0)
|
||||
serr = applicationstat.AggregateApplicationStat(ctx, &info, pipeline)
|
||||
if serr != nil {
|
||||
return nil, serr
|
||||
}
|
||||
|
||||
if len(list) > 0 {
|
||||
for _, app := range list {
|
||||
resp.Summary.TotalClick += app.Total
|
||||
}
|
||||
}
|
||||
|
||||
if len(info) > 0 {
|
||||
for _, app := range info {
|
||||
tmp := &AppStatTotalInfo{
|
||||
Id: app.Id,
|
||||
Total: app.Total,
|
||||
}
|
||||
if value, ok := appid[app.Id]; ok {
|
||||
tmp.ParentAppId = value.ParentAppId
|
||||
tmp.AppName = value.Name
|
||||
}
|
||||
resp.List = append(resp.List, tmp)
|
||||
}
|
||||
}
|
||||
resp.Total = int64(len(list))
|
||||
return resp, nil
|
||||
}
|
||||
Reference in New Issue
Block a user