package activeUsers import ( "fmt" "leadGeneration/entity/power" "leadGeneration/public" "log" "time" ) /* ⚠️注意 user_countbyhour 表只有一个月的数据 */ // 超前项目 type aheadActiveFreeUser struct { } func NewAheadActiveFreeUser() *aheadActiveFreeUser { return &aheadActiveFreeUser{} } // 定制化分析报告 type customerActiveFreeUser struct { } func NewCustomerActiveFreeUser() *customerActiveFreeUser { return &customerActiveFreeUser{} } // GetWeekActiveFreeUsers 获取周活无权限用户 func (a *aheadActiveFreeUser) GetWeekActiveFreeUsers() (rData []string) { log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetWeekActiveFreeUsers start\n") now := time.Now() _, end_m, end_d := now.Date() _, start_m, start_d := now.AddDate(0, 0, -7).Date() var sql string var param []interface{} if start_m != end_m { //跨月 sql = "SELECT DISTINCT(user_mongoid) FROM user_countbyhour WHERE day >= ? OR day < ?" param = []interface{}{end_d, start_d} } else { //非跨月 sql = "SELECT DISTINCT(user_mongoid) FROM user_countbyhour WHERE day >= ? AND day < ?" param = []interface{}{start_d, end_d} } log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetWeekActiveFreeUsers search sql:%s value:%v start\n", sql, param) res := public.UserAnalyseDb.SelectBySql(sql, param...) log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetWeekActiveFreeUsers search end\n") if res == nil || len(*res) == 0 { return } rData = make([]string, 0, len(*res)) for _, v := range *res { if userId, _ := v["user_mongoid"].(string); userId != "" { if !power.HasAheadPower(userId) { rData = append(rData, userId) } } } log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetWeekActiveFreeUsers start Finished Total %d\n", len(rData)) return rData } // GetMonthActiveFreeUsers 获取月活无权限用户 func (a *aheadActiveFreeUser) GetMonthActiveFreeUsers() (rData []string) { log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetMonthActiveFreeUsers start\n") var sql string sql = "SELECT DISTINCT(user_mongoid) FROM user_countbyhour " log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetMonthActiveFreeUsers search sql:%s value:%v start\n", sql) res := public.UserAnalyseDb.SelectBySql(sql) log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetMonthActiveFreeUsers search end\n") if res == nil || len(*res) == 0 { return } rData = make([]string, 0, len(*res)) for _, v := range *res { if userId, _ := v["user_mongoid"].(string); userId != "" { if !power.HasAheadPower(userId) { rData = append(rData, userId) } } } log.Printf("[ACTIVE-USER-INFO]AheadActiveFreeUser GetMonthActiveFreeUsers start Finished Total %d\n", len(rData)) return rData } // GetMonthActiveFreeUsers 获取月活用户 // 有订阅或有搜索词的周活用户+最近7天注册的新用户无条件生 func (c *customerActiveFreeUser) GetMonthActiveFreeUsers() (rData []string) { log.Printf("[ACTIVE-USER-INFO]CustomerActiveFreeUser GetMonthActiveFreeUsers start\n") //表数据为近一个月,所以直接查询全部 res := public.UserAnalyseDb.SelectBySql("SELECT user_mongoid,sum(search) AS total FROM user_countbyhour group by user_mongoid") if res == nil || len(*res) == 0 { return } rData = make([]string, 0, len(*res)) for _, v := range *res { userId, _ := v["user_mongoid"].(string) if userId == "" { continue } //非会员 if hasPower := power.HasPower(userId); hasPower { continue } //无搜索记录、无关键词 if searchTotal, _ := v["total"].(int); searchTotal == 0 { //无订阅词 if !power.HasSubscribe(userId) { continue } } rData = append(rData, userId) } log.Printf("[ACTIVE-USER-INFO]CustomerActiveFreeUser GetMonthActiveFreeUsers start Finished Total %d\n", len(rData)) return rData } // GetWeekActiveFreeUsers 获取周活用户 func (c *customerActiveFreeUser) GetWeekActiveFreeUsers() (rData []string) { log.Printf("[ACTIVE-USER-INFO]CustomerActiveFreeUser GetWeekActiveFreeUsers start\n") now := time.Now() _, end_m, end_d := now.Date() _, start_m, start_d := now.AddDate(0, 0, -7).Date() var sql string var param []interface{} if start_m != end_m { //跨月 sql = " WHERE day >= ? OR day < ? " param = []interface{}{end_d, start_d} } else { //非跨月 sql = " WHERE day >= ? AND day < ? " param = []interface{}{start_d, end_d} } query := fmt.Sprintf("SELECT user_mongoid,sum(search) AS total FROM user_countbyhour %s group by user_mongoid", sql) res := public.UserAnalyseDb.SelectBySql(query, param...) if res == nil || len(*res) == 0 { return } rData = make([]string, 0, len(*res)) for _, v := range *res { userId, _ := v["user_mongoid"].(string) if userId == "" { continue } //非会员 if hasPower := power.HasPower(userId); hasPower { continue } //无搜索记录、无关键词 if searchTotal, _ := v["total"].(int); searchTotal == 0 { //无订阅词 if !power.HasSubscribe(userId) { continue } } rData = append(rData, userId) } log.Printf("[ACTIVE-USER-INFO]CustomerActiveFreeUser GetWeekActiveFreeUsers start Finished Total %d\n", len(rData)) return rData }