userRelated.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package crons
  2. import (
  3. "designs/global"
  4. "designs/model"
  5. "designs/service"
  6. "fmt"
  7. "gorm.io/gorm/clause"
  8. "time"
  9. )
  10. func Behavior() {
  11. //先查出所有gid
  12. ActiveGid := service.GetActiveGid()
  13. //现在直接汇总所有的数据(直到前一天的)
  14. now := time.Now()
  15. end := now.AddDate(0, 0, -1)
  16. start, _ := time.Parse("2006-01-02 15:04:05", "2025-05-17 15:04:05")
  17. BehaviorSummary("wx", ActiveGid, start, end)
  18. BehaviorSummary("tt", ActiveGid, start, end)
  19. global.App.Log.Info("重新汇总用户在线时长数据完成")
  20. }
  21. func BehaviorSummary(pf string, ActiveGid []string, start time.Time, end time.Time) {
  22. //循环一下,查出userId 跟相关的在线数据
  23. for _, gid := range ActiveGid {
  24. start1 := time.Now()
  25. fmt.Println("处理数据开始,gid :", gid)
  26. //查询 30天内的在线数据
  27. SummaryData, err := service.UserOnlineSummary(gid, pf, "", start.Format("2006-01-02 15:04:05"), end.Format("2006-01-02 15:04:05"))
  28. if err != nil {
  29. global.App.Log.Error("更新用户在线时长错误(查询汇总信息错误)", err.Error())
  30. return
  31. }
  32. //格式化,存入数据库
  33. var userIdList []model.User
  34. err = global.App.DB.Table("user").Where("gid", gid).
  35. Select("id", "userId").
  36. Where("pf", pf).Scan(&userIdList).Error
  37. if err != nil {
  38. global.App.Log.Error("更新用户在线时长错误(查询userID 错误)", err.Error())
  39. return
  40. }
  41. //fmt.Println(len(userIdList))
  42. userBehavior := make(map[int]model.UserBehavior)
  43. for _, users := range userIdList {
  44. userBehavior[users.UserId] = model.UserBehavior{
  45. ID: users.ID,
  46. Duration: int(SummaryData[users.UserId]),
  47. }
  48. }
  49. var userBehaviorList []model.UserBehavior
  50. for _, Behavior := range userBehavior {
  51. userBehaviorList = append(userBehaviorList, Behavior)
  52. }
  53. err = global.App.DB.Table("user_behavior").Clauses(clause.OnConflict{
  54. Columns: []clause.Column{{Name: "id"}}, // 冲突列(主键)
  55. DoUpdates: clause.AssignmentColumns([]string{"duration"}), // 需要更新的列
  56. }).CreateInBatches(&userBehaviorList, 1000).Error
  57. if err != nil {
  58. global.App.Log.Error("更新用户在线时长错误", err.Error())
  59. return
  60. }
  61. fmt.Println("存入汇总完成:", time.Since(start1))
  62. }
  63. }