| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package crons
- import (
- "designs/global"
- "designs/model"
- "designs/service"
- "fmt"
- "gorm.io/gorm/clause"
- "time"
- )
- func Behavior() {
- //先查出所有gid
- ActiveGid := service.GetActiveGid()
- //现在直接汇总所有的数据(直到前一天的)
- now := time.Now()
- end := now.AddDate(0, 0, -1)
- start, _ := time.Parse("2006-01-02 15:04:05", "2025-05-17 15:04:05")
- BehaviorSummary("wx", ActiveGid, start, end)
- BehaviorSummary("tt", ActiveGid, start, end)
- global.App.Log.Info("重新汇总用户在线时长数据完成")
- }
- func BehaviorSummary(pf string, ActiveGid []string, start time.Time, end time.Time) {
- //循环一下,查出userId 跟相关的在线数据
- for _, gid := range ActiveGid {
- start1 := time.Now()
- fmt.Println("处理数据开始,gid :", gid)
- //查询 30天内的在线数据
- SummaryData, err := service.UserOnlineSummary(gid, pf, "", start.Format("2006-01-02 15:04:05"), end.Format("2006-01-02 15:04:05"))
- if err != nil {
- global.App.Log.Error("更新用户在线时长错误(查询汇总信息错误)", err.Error())
- return
- }
- //格式化,存入数据库
- var userIdList []model.User
- err = global.App.DB.Table("user").Where("gid", gid).
- Select("id", "userId").
- Where("pf", pf).Scan(&userIdList).Error
- if err != nil {
- global.App.Log.Error("更新用户在线时长错误(查询userID 错误)", err.Error())
- return
- }
- //fmt.Println(len(userIdList))
- userBehavior := make(map[int]model.UserBehavior)
- for _, users := range userIdList {
- userBehavior[users.UserId] = model.UserBehavior{
- ID: users.ID,
- Duration: int(SummaryData[users.UserId]),
- }
- }
- var userBehaviorList []model.UserBehavior
- for _, Behavior := range userBehavior {
- userBehaviorList = append(userBehaviorList, Behavior)
- }
- err = global.App.DB.Table("user_behavior").Clauses(clause.OnConflict{
- Columns: []clause.Column{{Name: "id"}}, // 冲突列(主键)
- DoUpdates: clause.AssignmentColumns([]string{"duration"}), // 需要更新的列
- }).CreateInBatches(&userBehaviorList, 1000).Error
- if err != nil {
- global.App.Log.Error("更新用户在线时长错误", err.Error())
- return
- }
- fmt.Println("存入汇总完成:", time.Since(start1))
- }
- }
|