Browse Source

修改adRelated 以及其它接口

wucan 5 months ago
parent
commit
302519c744
5 changed files with 82 additions and 71 deletions
  1. 6 7
      controller/v1/test.go
  2. 26 36
      controller/v1/userBehavior.go
  3. 3 0
      model/user.go
  4. 0 1
      route/api.go
  5. 47 27
      service/userBehavior.go

+ 6 - 7
controller/v1/test.go

@@ -10,6 +10,7 @@ import (
 	"fmt"
 	"github.com/gin-gonic/gin"
 	"go.mongodb.org/mongo-driver/v2/bson"
+	"gorm.io/gorm/clause"
 	"os"
 	"strconv"
 	"time"
@@ -250,7 +251,7 @@ func BehaviorSummary(c *gin.Context) {
 	ActiveGid := GetActiveGid()
 
 	now := time.Now()
-	start := now.AddDate(0, 0, -30)
+	start := now.AddDate(0, 0, -40)
 
 	pf := "wx"
 	//循环一下,查出userId 跟相关的在线数据
@@ -347,17 +348,15 @@ func BehaviorSummary(c *gin.Context) {
 			}
 		}
 
-		//aaa, _ := json.Marshal(userBehavior)
-		//global.App.Log.Error(string(aaa))
-		//
-		//return
-
 		var userBehaviorList []model.UserBehavior
 		for _, Behavior := range userBehavior {
 			userBehaviorList = append(userBehaviorList, Behavior)
 		}
 
-		err = global.App.DB.Table("user_behavior").CreateInBatches(&userBehaviorList, 1000).Error
+		err = global.App.DB.Table("user_behavior").Clauses(clause.OnConflict{
+			Columns:   []clause.Column{{Name: "id"}},                                                       // 冲突列(主键)
+			DoUpdates: clause.AssignmentColumns([]string{"duration", "startNum", "adCount", "adExpCount"}), // 需要更新的列
+		}).CreateInBatches(&userBehaviorList, 1000).Error
 		if err != nil {
 			//global.App.Log.Error(userBehavior)
 			response.Fail(c, 1005, err.Error())

+ 26 - 36
controller/v1/userBehavior.go

@@ -435,22 +435,6 @@ func DataTradesDetail(c *gin.Context) {
 	}
 	fmt.Println(time.Since(start))
 
-	//查询活跃用户周趋势图
-	ActiveUserWeek, _, _, err := service.GetActiveWeekDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
-	if err != nil {
-		response.Fail(c, 1001, err.Error())
-		return
-	}
-	fmt.Println(time.Since(start))
-
-	//查询活跃用户月趋势图
-	ActiveUserMouth, _, _, err := service.GetActiveMouthDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
-	if err != nil {
-		response.Fail(c, 1001, err.Error())
-		return
-	}
-	fmt.Println(time.Since(start))
-
 	//查询启动次数
 	ActiveStart, _, _, err := service.GetActiveMouthDistribution(form.Pf, form.Gid, form.StartTime, form.EndTime)
 	if err != nil {
@@ -467,12 +451,10 @@ func DataTradesDetail(c *gin.Context) {
 	}
 	for k := range AvgTime {
 		data[k] = dayData{
-			NewUser:         NewUser[k],
-			ActiveUser:      ActiveUser[k],
-			ActiveUserWeek:  ActiveUserWeek[k],
-			ActiveUserMouth: ActiveUserMouth[k],
-			ActiveStart:     ActiveStart[k],
-			AvgTime:         AvgTime[k],
+			NewUser:     NewUser[k],
+			ActiveUser:  ActiveUser[k],
+			ActiveStart: ActiveStart[k],
+			AvgTime:     AvgTime[k],
 		}
 	}
 
@@ -831,6 +813,7 @@ func AdRelatedList(c *gin.Context) {
 	}{})
 
 	query := global.App.DB.Table("user").
+		Order("user.id desc").
 		LeftJoin("user_behavior", "user.id = user_behavior.id").
 		Where("gid", form.Gid).Where("pf", form.Pf)
 
@@ -842,20 +825,24 @@ func AdRelatedList(c *gin.Context) {
 		query = query.Where("pid", form.Pid)
 	}
 
+	if form.Aid != "" {
+		query = query.Where("pid", form.Aid)
+	}
+
 	if form.CreateTime != nil {
 		query = BuildBehaviorQuery(query, form.CreateTime, "createdAt")
 	}
 	if form.StartNum != nil {
-		query = BuildBehaviorQuery(query, form.CreateTime, "startNum")
+		query = BuildBehaviorQuery(query, form.StartNum, "startNum")
 	}
 	if form.Duration != nil {
-		query = BuildBehaviorQuery(query, form.CreateTime, "duration")
+		query = BuildBehaviorQuery(query, form.Duration, "duration")
 	}
 	if form.ReqCount != nil {
-		query = BuildBehaviorQuery(query, form.CreateTime, "adCount")
+		query = BuildBehaviorQuery(query, form.ReqCount, "adCount")
 	}
 	if form.ExpCount != nil {
-		query = BuildBehaviorQuery(query, form.CreateTime, "adExpCount")
+		query = BuildBehaviorQuery(query, form.ExpCount, "adExpCount")
 	}
 
 	var count int64
@@ -866,16 +853,19 @@ func AdRelatedList(c *gin.Context) {
 	}
 
 	var res []struct {
-		ID         int       `json:"id" gorm:"not null;"`
-		Pf         string    `json:"pf" gorm:"not null;"`
-		Gid        string    `json:"gid" gorm:"not null;"`
-		UserId     int       `json:"userId" gorm:"not null;column:userId;"`
-		OpenId     string    `json:"openId" gorm:"not null;column:openId;"`
-		CreatedAt  time.Time `json:"createdAt" gorm:"column:createdAt;"`
-		Duration   int       `json:"duration" gorm:"not null;"`
-		StartNum   int       `json:"startNum" gorm:"not null;column:startNum;"`
-		AdCount    int       `json:"adCount" gorm:"not null;column:adCount;"`
-		AdExpCount int       `json:"adExpCount" gorm:"not null;column:adExpCount;"`
+		ID         int         `json:"id" gorm:"not null;"`
+		Pf         string      `json:"pf" gorm:"not null;"`
+		Gid        string      `json:"gid" gorm:"not null;"`
+		Aid        string      `json:"aid" gorm:"not null;" column:"aid;"`
+		Pid        string      `json:"pid" gorm:"not null;" column:"pid;"`
+		Cid        string      `json:"cid" gorm:"not null;" column:"cid;"`
+		UserId     int         `json:"userId" gorm:"not null;column:userId;"`
+		OpenId     string      `json:"openId" gorm:"not null;column:openId;"`
+		CreatedAt  model.XTime `json:"createdAt" gorm:"column:createdAt;"`
+		Duration   int         `json:"duration" gorm:"not null;"`
+		StartNum   int         `json:"startNum" gorm:"not null;column:startNum;"`
+		AdCount    int         `json:"adCount" gorm:"not null;column:adCount;"`
+		AdExpCount int         `json:"adExpCount" gorm:"not null;column:adExpCount;"`
 	}
 
 	err = query.Offset(form.Offset).Limit(form.Limit).Scan(&res).Error

+ 3 - 0
model/user.go

@@ -28,6 +28,9 @@ type User struct {
 	ID        int       `json:"id" gorm:"not null;"`
 	Pf        string    `json:"pf" gorm:"not null;"`
 	Gid       string    `json:"gid" gorm:"not null;"`
+	Aid       string    `json:"aid" gorm:"not null;" column:"aid;"`
+	Pid       string    `json:"pid" gorm:"not null;" column:"pid;"`
+	Cid       string    `json:"cid" gorm:"not null;" column:"cid;"`
 	UserId    int       `json:"userId" gorm:"not null;column:userId;"`
 	OpenId    string    `json:"openId" gorm:"not null;column:openId;"`
 	CreatedAt time.Time `json:"createdAt" gorm:"column:createdAt;"`

+ 0 - 1
route/api.go

@@ -69,7 +69,6 @@ func SetApiGroupRoutes(router *gin.RouterGroup) {
 	GroupSuper := router.Group("")
 	GroupSuper.Use(middleware.TokenAuthMiddleware()).Use(middleware.CheckSuper()).Use()
 	{
-
 		//游戏管理
 		GroupSuper.POST("/user/addGidConfig", v1.AddGidConfig)
 		GroupSuper.POST("/user/getGidConfig", v1.GetGidConfig)

+ 47 - 27
service/userBehavior.go

@@ -1,9 +1,16 @@
 package service
 
 import (
+	"bufio"
+	"designs/config"
 	"designs/global"
 	"designs/model"
 	"designs/utils"
+	"fmt"
+	"os"
+	"path/filepath"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -307,39 +314,52 @@ func GetRegisterDayDistribution(pf string, gid string, startTime string, endTime
 
 // 活跃用户趋势图
 func GetActiveDayDistribution(pf string, gid string, startTime string, endTime string) (map[string]int, int64, float32, error) {
-	var activeDays []time.Time
-	err := global.App.DB.Table("user_login").
-		Where("gid", gid).
-		Where("pf", pf).
-		Where("loginTime", ">=", startTime).
-		Where("loginTime", "<=", endTime).
-		Pluck("loginTime", &activeDays).Error
-	if err != nil {
-		return nil, 0, 0, err
-	}
-	//查询总数(去重)
-	var count int64
-	err = global.App.DB.Table("user_login").
-		Where("gid", gid).
-		Where("pf", pf).
-		Where("loginTime", ">=", startTime).
-		Where("loginTime", "<=", endTime).
-		Distinct("userId").Count(&count).Error
-	if err != nil {
-		return nil, 0, 0, err
-	}
 
-	days := utils.GetTimeDay(startTime, endTime)
+	layout := "2006-01-02 15:04:05"
+	start, _ := time.Parse(layout, startTime)
+	end, _ := time.Parse(layout, endTime)
 
-	todayTimeDistribution := getTimeDistribution(activeDays, days)
+	var dir string
+	if config.Get("app.local") == "local" {
+		//url = "mongodb://localhost:27017"
+		dir = "storage"
+	} else {
+		dir = "/www/wwwroot/chunhao_receive/storage"
+	}
 
-	daysFormat := utils.GetTimeDayDateFormat(startTime, endTime) //用户分别是在哪天注册的
+	countUserList := make(map[int]bool)
 	todayTimeDistributionRes := make(map[string]int)
-	for k, day := range daysFormat {
-		todayTimeDistributionRes[day] = todayTimeDistribution[k]
+
+	for currTime := start; !currTime.After(end); currTime = currTime.AddDate(0, 0, 1) {
+		//读取对应的文件夹
+		filePath := filepath.Join(dir, currTime.Format("2006-01-02"), fmt.Sprintf("%s_%s.txt", gid, pf))
+
+		file, _ := os.Open(filePath)
+
+		defer file.Close() // 确保函数结束时关闭文件
+
+		// 创建 Scanner 对象
+		scanner := bufio.NewScanner(file)
+
+		res := make(map[int]bool)
+		// 逐行读取文件内容
+		lineNumber := 1
+		for scanner.Scan() {
+			line := scanner.Text() // 获取当前行内容
+			lineNumber++
+
+			//11887,2,2025-03-24 09:05:19
+			lineSlice := strings.Split(line, ",")
+
+			userId, _ := strconv.Atoi(lineSlice[0])
+
+			res[userId] = true
+		}
+
+		todayTimeDistributionRes[currTime.Format("2006-01-02")] = len(res)
 	}
 
-	return todayTimeDistributionRes, count, float32(len(activeDays) / len(days)), nil
+	return todayTimeDistributionRes, int64(len(countUserList)), 0, nil
 }
 
 // 活跃用户周趋势图