jobFrontLogs.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. package userAnalysis
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/gogf/gf/v2/frame/g"
  6. "github.com/gogf/gf/v2/util/gconv"
  7. "github.com/pkg/errors"
  8. "time"
  9. "workTasks/userSign/match"
  10. )
  11. type visitParam struct {
  12. Code string
  13. BitmapCode string
  14. St, Et time.Time
  15. Limit int
  16. Desc string
  17. SaveOld bool
  18. }
  19. // GetBuryPointRes 分析埋点数据
  20. func (ua *UserAnalysis) GetBuryPointRes(ctx context.Context, runTime time.Time) (fData []*AnalysisRes, err error) {
  21. // 访问过指定页面
  22. for _, item := range []*visitParam{
  23. {"buy_page_vip", "visit_buypage_vip_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入超级订阅购买页", false},
  24. {"buy_page_vip", "visit_buypage_vip_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入超级订阅购买页", false},
  25. {"buy_page_member", "visit_buypage_member_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入大会员购买页", false},
  26. {"buy_page_member", "visit_buypage_member_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入大会员购买页", false},
  27. {"buy_page_member", "visit_buypage_member_45_day", runTime.AddDate(0, 0, -45), runTime, 0, "近45天进入大会员购买页", false},
  28. {"landing_page_member", "visit_landing_member_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近45天进入大会员购买页", false},
  29. {"landing_page_member", "visit_landing_member_45_day", runTime.AddDate(0, 0, -45), runTime, 0, "近45天进入大会员购买页", false},
  30. {"buy_area_pack", "visit_buypage_areavip_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入省份订阅包购买页", false},
  31. {"buy_area_pack", "visit_buypage_areavip_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入省份订阅包购买页", false},
  32. {"data_export_page", "visit_dataexport_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天访问数据导出页面", false},
  33. {"data_export_page", "visit_dataexport_45_day", runTime.AddDate(0, 0, -45), runTime, 0, "近45天访问数据导出页面", false},
  34. {"buy_data_export", "visit_buypage_dataexport_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入数据导出购买页", false},
  35. {"buy_data_export", "visit_buypage_dataexport_45_day", runTime.AddDate(0, 0, -45), runTime, 0, "近45天进入数据导出购买页", false},
  36. {"buy_page_data_pack", "visit_buypage_dataPack_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入数据流量包购买页", false},
  37. {"buy_page_data_pack", "visit_buypage_dataPack_45_day", runTime.AddDate(0, 0, -45), runTime, 0, "近45天进入数据流量包购买页", false},
  38. {"buy_page_buyer_report", "visit_buypage_buyer_report_package_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入业主采购分析报告下载包购买页", false},
  39. {"buy_page_buyer_report", "visit_buypage_buyer_report_package_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入业主采购分析报告下载包购买页", false},
  40. {"buy_page_buyer_report", "visit_buypage_buyer_report_package_45_day", runTime.AddDate(0, 0, -45), runTime, 0, "近45天进入业主采购分析报告下载包购买页", false},
  41. {"buy_page_winner_report", "visit_buypage_winner_report_package_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入企业中标分析报告下载包购买页", false},
  42. {"buy_page_winner_report", "visit_buypage_winner_report_package_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入企业中标分析报告下载包购买页", false},
  43. {"buy_page_winner_report", "visit_buypage_winner_report_package_45_day", runTime.AddDate(0, 0, -45), runTime, 0, "近45天进入企业中标分析报告下载包购买页", false},
  44. {"buy_page_market_report", "visit_buypage_market_report_package_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入市场分析定制报告下载包购买页", false},
  45. {"buy_page_market_report", "visit_buypage_market_report_package_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入市场分析定制报告下载包购买页", false},
  46. {"buy_page_market_report", "visit_buypage_market_report_package_45_day", runTime.AddDate(0, 0, -45), runTime, 0, "近45天进入市场分析定制报告下载包购买页", false},
  47. {"buy_page_buyer_portrait_package", "visit_buypage_buyer_portrait_package_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入采购单位画像包购买页", false},
  48. {"buy_page_buyer_portrait_package", "visit_buypage_buyer_portrait_package_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入采购单位画像包购买页", false},
  49. {"buy_page_buyer_portrait_package", "visit_buypage_buyer_portrait_package_45_day", runTime.AddDate(0, 0, -45), runTime, 0, "近45天进入采购单位画像包购买页", false},
  50. {"buy_page_attach_package", "visit_buypage_attach_package_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入附件下载包购买页", false},
  51. {"buy_page_attach_package", "visit_buypage_attach_package_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入附件下载包购买页", false},
  52. {"buy_page_attach_package", "visit_attach_package_report_45_day", runTime.AddDate(0, 0, -45), runTime, 0, "近45天进入附件下载包购买页", false},
  53. {"buy_page_ent_credit_report", "visit_buypage_ent_credit_report_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入投标企业信用报告购买页", false},
  54. {"buy_page_ent_credit_report", "visit_buypage_ent_credit_report_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入投标企业信用报告购买页", false},
  55. {"buy_page_ent_credit_report", "visit_buypage_ent_credit_report_45_day", runTime.AddDate(0, 0, -7), runTime, 0, "近45天进入投标企业信用报告购买页", false},
  56. {"buy_page_applet_wy", "visit_buypage_applet_wy_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入物业碎片化小程序购买页", false},
  57. {"buy_page_applet_wy", "visit_buypage_applet_wy_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入物业碎片化小程序购买页", false},
  58. {"buy_page_applet_clzl", "visit_buypage_applet_clzl_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入车辆租赁碎片化小程序购买页", false},
  59. {"buy_page_applet_clzl", "visit_buypage_applet_clzl_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入车辆租赁碎片化小程序购买页", false},
  60. {"buy_page_applet_ywsj", "visit_buypage_applet_ywsj_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入印务碎片化小程序购买页", false},
  61. {"buy_page_applet_ywsj", "visit_buypage_applet_ywsj_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入印务碎片化小程序购买页", false},
  62. {"buy_page_applet_hjcg", "visit_buypage_applet_hjcg_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入环境碎片化小程序购买页", false},
  63. {"buy_page_applet_hjcg", "visit_buypage_applet_hjcg_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入环境碎片化小程序购买页", false},
  64. {"buy_page_applet_af", "visit_buypage_applet_af_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入安防碎片化小程序购买页", false},
  65. {"buy_page_applet_af", "visit_buypage_applet_af_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入安防碎片化小程序购买页", false},
  66. {"buy_page_applet_gcsjzx", "visit_buypage_applet_gcsjzx_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入投招服工程设计咨询碎片化小程序购买页", false},
  67. {"buy_page_applet_gcsjzx", "visit_buypage_applet_gcsjzx_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入投招服工程设计咨询碎片化小程序购买页", false},
  68. {"buy_page_applet_fw", "visit_buypage_applet_fw_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入法务碎片化小程序购买页", false},
  69. {"buy_page_applet_fw", "visit_buypage_applet_fw_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入法务碎片化小程序购买页", false},
  70. {"buy_page_applet_bx", "visit_buypage_applet_bx_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入保服碎片化小程序购买页", false},
  71. {"buy_page_applet_bx", "visit_buypage_applet_bx_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入保服碎片化小程序购买页", false},
  72. {"buy_page_applet_cwsj", "visit_buypage_applet_cwsj_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入招服财审碎片化小程序购买页", false},
  73. {"buy_page_applet_cwsj", "visit_buypage_applet_cwsj_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入招服财审碎片化小程序购买页", false},
  74. {"buy_page_applet_zbdl", "visit_buypage_applet_zbdl_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入招服代理服务碎片化小程序购买页", false},
  75. {"buy_page_applet_zbdl", "visit_buypage_applet_zbdl_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入招服代理服务碎片化小程序购买页", false},
  76. {"buy_page_applet_glzx", "visit_buypage_applet_glzx_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天进入招服管理咨询碎片化小程序购买页", false},
  77. {"buy_page_applet_glzx", "visit_buypage_applet_glzx_7_day", runTime.AddDate(0, 0, -7), runTime, 0, "近7天进入招服管理咨询碎片化小程序购买页", false},
  78. {"download_ent_credit_report", "download_ent_credit_report_45_day", runTime.AddDate(0, 0, -45), runTime, 0, "近45天点击下载投标企业信用报告的用户", false},
  79. {"content_click_share", "buryPoint_share_7_day_gte2", runTime.AddDate(0, 0, -7), runTime, 1, "近7天高频分享大于1次", false},
  80. {"add_project_follow", "add_monitor_project_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天新增监控项目用户", false},
  81. {"add_ent_follow", "add_monitor_ent_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天新增监控企业用户", false},
  82. {"add_ent_follow", "add_monitor_ent_gte5_45day", runTime.AddDate(0, 0, -45), runTime, 4, "近45天高频监控企业>=5", false},
  83. {"add_ent_follow", "add_monitor_ent_gte1_45day", runTime.AddDate(0, 0, -45), runTime, 0, "近45天高频监控企业>=1", false},
  84. {"add_buyer_follow", "add_monitor_buyer_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天新增监控业主用户", false},
  85. {"change_subscribe", "add_change_subscribe_1_day", runTime.AddDate(0, 0, -1), runTime, 0, "近1天调整订阅词用户", false},
  86. {"jy_activities", "activity_A25142", runTime.AddDate(0, 0, -1), runTime, 0, "近1天调整订阅词用户", true},
  87. } {
  88. if res := ua.getVisitStatic(ctx, item); res != nil {
  89. fData = append(fData, res)
  90. }
  91. }
  92. //7天留资用户
  93. rData, err := ua.clickShareRes(ctx, runTime.AddDate(0, 0, -7))
  94. if err != nil {
  95. g.Log().Errorf(ctx, "init clickShareRes err:%v", err)
  96. }
  97. for _, datum := range rData {
  98. fData = append(fData, datum)
  99. }
  100. return
  101. }
  102. func (ua *UserAnalysis) clickShareRes(ctx context.Context, t time.Time) (returnData []*AnalysisRes, err error) {
  103. //分析点击分享 近7天点击标讯分享按钮>=2
  104. var (
  105. rData = map[BaseUserId]bool{}
  106. tData = map[BaseUserId]int{}
  107. )
  108. res, err := g.DB("ckLogs").Query(ctx, "SELECT position_id FROM dwd_f_personnel_behavior WHERE page_id ='article_content' AND breaker_name in ('QQ','朋友圈','微信') AND `date` > ? ", t.Format(time.DateTime))
  109. if err != nil {
  110. return nil, errors.Wrap(err, "查询超级订阅购买页访问数据异常")
  111. }
  112. for _, m := range res.List() {
  113. var (
  114. position_id = gconv.String(m["position_id"])
  115. )
  116. if baseUserId, ok := ua.UserMapping[position_id]; ok {
  117. tData[baseUserId]++
  118. }
  119. }
  120. for bid, datum := range tData {
  121. if datum >= 2 {
  122. rData[bid] = true
  123. }
  124. }
  125. return []*AnalysisRes{
  126. {"近7天高频分享用户", "buryPoint_share_7_day_gte2", rData, false},
  127. }, nil
  128. }
  129. type (
  130. countObj struct {
  131. Seven map[BaseUserId]int
  132. One map[BaseUserId]int
  133. LoadUrl []string
  134. MiniCode string //小程序code
  135. }
  136. cVisit struct {
  137. fullData map[string]*countObj
  138. mappingData map[string]*countObj
  139. matchObj *match.TrieNode
  140. now time.Time
  141. }
  142. )
  143. func (ua *UserAnalysis) getVisitStatic(ctx context.Context, vp *visitParam) *AnalysisRes {
  144. res, err := g.DB().Query(ctx, "SELECT userId,SUM(num) as total FROM dwd_d_visit WHERE code=? and date>=? and date<=? GROUP by userId ", vp.Code, vp.St.Format(time.DateTime), vp.Et.Format(time.DateTime))
  145. var sevenData = map[BaseUserId]bool{}
  146. if vp.BitmapCode == "visit_buypage_dataPack_7_day" {
  147. fmt.Println("xxx")
  148. }
  149. if err != nil {
  150. g.Log().Errorf(ctx, "<getVisitStatic.Query> err %v", err)
  151. } else {
  152. for _, m := range res.List() {
  153. var (
  154. userId = gconv.Int64(m["userId"])
  155. total = gconv.Int(m["total"])
  156. )
  157. if vp.Limit <= 0 || (vp.Limit > 0 && total > vp.Limit) {
  158. sevenData[BaseUserId(userId)] = true
  159. }
  160. }
  161. }
  162. return &AnalysisRes{fmt.Sprintf("getVisitStatic-%s", vp.BitmapCode), vp.BitmapCode, sevenData, vp.SaveOld}
  163. }