Browse Source

Merge remote-tracking branch 'origin/main'

duxin 9 tháng trước cách đây
mục cha
commit
d17d08a84f

+ 14 - 8
userSign/main.go

@@ -20,6 +20,11 @@ func runOnce(ctx context.Context) {
 	if err := manager.LoadMapping(); err != nil {
 		g.Log().Errorf(ctx, "加载对应关系异常 %v", err)
 	}
+	//更新全量用户
+	if len(manager.FullBaseUserId) > 0 {
+		allRes = append(allRes, &userAnalysis.AnalysisRes{Name: "全量用户BaseUserId", Code: "fullBaseUserId", Data: manager.FullBaseUserId})
+	}
+
 	//订单分析
 	if res, err := manager.TiDBOrderRange(ctx); err == nil && len(res) > 0 {
 		allRes = append(allRes, res...)
@@ -35,15 +40,16 @@ func runOnce(ctx context.Context) {
 		unActiveTime = []int{30, 90}
 	)
 	//活跃用户分析
-	for _, source := range sourceArr {
-		if res, err := manager.ActiveUserLoad(ctx, nowTime.AddDate(0, 0, -30), source); err == nil && len(res) > 0 {
-			allRes = append(allRes, &userAnalysis.AnalysisRes{Name: fmt.Sprintf("30天%s活跃用户", source), Code: fmt.Sprintf("active_%s_%d", source, 30), Data: res})
-		}
-	}
-	//未活跃用户占比
 	for _, day := range unActiveTime {
-		if res, err := manager.UnActiveUserLoad(ctx, nowTime.AddDate(0, 0, -day)); err == nil && len(res) > 0 {
-			allRes = append(allRes, &userAnalysis.AnalysisRes{Name: fmt.Sprintf("%d天未活跃用户", day), Code: fmt.Sprintf("unActive_%d", day), Data: res})
+		if day == 30 { //30天活跃用户各端
+			for _, source := range sourceArr {
+				if res, err := manager.ActiveUserLoad(ctx, nowTime.AddDate(0, 0, -day), source); err == nil && len(res) > 0 {
+					allRes = append(allRes, &userAnalysis.AnalysisRes{Name: fmt.Sprintf("30天%s活跃用户", source), Code: fmt.Sprintf("active_%s_%d", source, 30), Data: res})
+				}
+			}
+		}
+		if res, err := manager.ActiveUserLoad(ctx, nowTime.AddDate(0, 0, -day), ""); err == nil && len(res) > 0 {
+			allRes = append(allRes, &userAnalysis.AnalysisRes{Name: fmt.Sprintf("%d天活跃用户", day), Code: fmt.Sprintf("active_%d", day), Data: res})
 		}
 	}
 

+ 5 - 0
userSign/userAnalysis/analysisManager.go

@@ -12,6 +12,7 @@ type (
 	UserAnalysis struct {
 		UserMapping      map[string]BaseUserId //职位id、mongouserId对应的baseUserId
 		EntUserIdMapping map[int64]BaseUserId  //ent_id对应的baseUserId
+		FullBaseUserId   map[BaseUserId]bool   //全量BaseUserId
 
 		BinPhone, BindMail   map[BaseUserId]bool
 		Vip, Vip15, Vip30    map[BaseUserId]bool
@@ -69,6 +70,7 @@ func NewManager() *UserAnalysis {
 	return &UserAnalysis{
 		UserMapping:      map[string]BaseUserId{},
 		EntUserIdMapping: map[int64]BaseUserId{},
+		FullBaseUserId:   map[BaseUserId]bool{},
 		BinPhone:         map[BaseUserId]bool{},
 		BindMail:         map[BaseUserId]bool{},
 		Vip:              map[BaseUserId]bool{},
@@ -87,6 +89,7 @@ func (ua *UserAnalysis) LoadMapping() error {
 	}
 	var (
 		newMapping             = map[string]BaseUserId{}
+		fullBaseUserId         = map[BaseUserId]bool{}
 		phoneBaseUserIdMapping = map[string]BaseUserId{}
 		entIdBaseUserIdMapping = map[int64]BaseUserId{}
 	)
@@ -99,11 +102,13 @@ func (ua *UserAnalysis) LoadMapping() error {
 		)
 		newMapping[mgoUserId] = baseUserId
 		newMapping[positionId] = baseUserId
+		fullBaseUserId[baseUserId] = true
 		if phone != "" {
 			phoneBaseUserIdMapping[phone] = baseUserId
 		}
 	}
 	ua.UserMapping = newMapping
+	ua.FullBaseUserId = fullBaseUserId
 
 	//加载ent_id和BaseUserId对应关系
 	dataEntRes, err := g.DB("jianyu").Query(ctx, "SELECT id,phone FROM entniche_user")

+ 10 - 1
userSign/userAnalysis/jobLogsAnalysis.go

@@ -18,7 +18,16 @@ func init() {
 
 // ActiveUserLoad 活跃用户
 func (ua *UserAnalysis) ActiveUserLoad(ctx context.Context, start time.Time, source string) (map[BaseUserId]bool, error) {
-	rPc, err := g.DB().Query(ctx, "SELECT DISTINCT(baseUserId) as baseUserId FROM user_log_byHour WHERE create_time > ? AND s_source =?;", start.Format(time.DateTime), source)
+	var (
+		execSql = "SELECT DISTINCT(baseUserId) as baseUserId FROM user_log_byHour WHERE create_time > ? "
+		values  = []interface{}{start.Format(time.DateTime)}
+	)
+
+	if source == "wx" || source == "pc" || source == "app" {
+		execSql += " AND s_source =? "
+		values = append(values, source)
+	}
+	rPc, err := g.DB().Query(ctx, execSql, values...)
 	if err != nil {
 		return nil, err
 	}