main.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. _ "github.com/gogf/gf/contrib/drivers/clickhouse/v2"
  6. _ "github.com/gogf/gf/contrib/drivers/mysql/v2"
  7. "github.com/gogf/gf/v2/frame/g"
  8. "github.com/gogf/gf/v2/os/gcron"
  9. "github.com/gogf/gf/v2/os/gctx"
  10. "time"
  11. "workTasks/userSign/userAnalysis"
  12. "workTasks/userSign/userTag"
  13. )
  14. func main() {
  15. ctx := gctx.New()
  16. runOnce(context.TODO())
  17. if e := userTag.BaseUserTag(); e != nil {
  18. g.Log().Errorf(ctx, "BaseUserTag 异常", e)
  19. }
  20. _, err := gcron.Add(gctx.New(), g.Cfg().MustGet(ctx, "runCron", "# 0 2 * * *").String(), func(ctx context.Context) {
  21. runOnce(context.TODO())
  22. if e := userTag.BaseUserTag(); e != nil {
  23. g.Log().Errorf(ctx, "BaseUserTag 异常", e)
  24. }
  25. }, "userSign")
  26. if err != nil {
  27. panic(err)
  28. }
  29. select {}
  30. }
  31. func runOnce(ctx context.Context) {
  32. manager := userAnalysis.NewManager()
  33. var allRes []*userAnalysis.AnalysisRes
  34. if err := manager.LoadMapping(); err != nil {
  35. g.Log().Errorf(ctx, "加载对应关系异常 %v", err)
  36. }
  37. //更新全量用户
  38. if len(manager.FullBaseUserId) > 0 {
  39. allRes = append(allRes, &userAnalysis.AnalysisRes{Name: "全量用户BaseUserId", Code: "fullBaseUserId", Data: manager.FullBaseUserId})
  40. }
  41. //订单分析
  42. if res, err := manager.TiDBOrderRange(ctx); err == nil && len(res) > 0 {
  43. allRes = append(allRes, res...)
  44. }
  45. //加载30天内取关用户
  46. manager.GetMgoUnSubUser(ctx, -30)
  47. //会员状态分析
  48. if res, err := manager.GetMgoUserRes(ctx); err == nil && len(res) > 0 {
  49. allRes = append(allRes, res...)
  50. }
  51. var (
  52. sourceArr = []string{"pc", "wx", "app"}
  53. nowTime = time.Now()
  54. unActiveTime = []int{30, 90}
  55. )
  56. //活跃用户分析
  57. for _, day := range unActiveTime {
  58. if day == 30 { //30天活跃用户各端
  59. for _, source := range sourceArr {
  60. if res, err := manager.ActiveUserLoad(ctx, nowTime.AddDate(0, 0, -day), source); err == nil && len(res) > 0 {
  61. allRes = append(allRes, &userAnalysis.AnalysisRes{Name: fmt.Sprintf("30天%s活跃用户", source), Code: fmt.Sprintf("active_%s_%d", source, 30), Data: res})
  62. }
  63. }
  64. }
  65. if res, err := manager.ActiveUserLoad(ctx, nowTime.AddDate(0, 0, -day), ""); err == nil && len(res) > 0 {
  66. allRes = append(allRes, &userAnalysis.AnalysisRes{Name: fmt.Sprintf("%d天活跃用户", day), Code: fmt.Sprintf("active_%d", day), Data: res})
  67. }
  68. }
  69. // 近7天访问详情页次数大于5
  70. var (
  71. dayLimit = 7
  72. articleLimit = 5
  73. )
  74. if res, err := manager.ArticleVisit(ctx, nowTime.AddDate(0, 0, -dayLimit), articleLimit); err == nil && len(res) > 0 {
  75. allRes = append(allRes, &userAnalysis.AnalysisRes{Name: fmt.Sprintf("%d天内访问详情页次数大于%d次", dayLimit, articleLimit), Code: fmt.Sprintf("%dday_article_gt_%d", dayLimit, articleLimit), Data: res})
  76. }
  77. // 已访问过
  78. if res, err := manager.Visited(ctx, nowTime.AddDate(0, 0, -7)); err == nil && len(res) > 0 {
  79. allRes = append(allRes, &userAnalysis.AnalysisRes{Name: "访问过剑鱼产品", Code: "visited", Data: res, SaveOldData: true})
  80. }
  81. // 访问过指定页面
  82. if res, err := manager.GetVisitUserAnalysis(ctx, nowTime.AddDate(0, 0, -45)); err == nil && len(res) > 0 {
  83. for _, t := range res {
  84. allRes = append(allRes, t)
  85. }
  86. }
  87. for _, re := range allRes {
  88. re.UpdateTag(ctx)
  89. }
  90. }