package service import ( "designs/global" "designs/model" "designs/utils" ) func RemainDataBydDay(pf string, gid string, startTime string, endTime string) { //先计算出这个时间内 ,每天的注册用户数量 var users []model.User err := global.App.DB.Table("user"). Where("pf", pf).Where("gid", gid). Where("createdAt", ">=", startTime). Where("createdAt", "<=", endTime). Scan(&users).Error if err != nil { } var UsersId []int UsersBydDay := utils.GetTimeDayDate(startTime, endTime) //用户分别是在哪天注册的 UserLoginBydDay := UsersBydDay for _, user := range users { UsersId = append(UsersId, user.UserId) UsersBydDay[user.CreatedAt.Format("20060102")] = append(UsersBydDay[user.CreatedAt.Format("20060102")], user.UserId) } users = nil //用完后清空内存 //把每天的注册用户进行集合,查出后面所有天数的活跃情况 var UserLogin []model.UserLogin err = global.App.DB.Table("user_login"). Where("pf", pf).Where("gid", gid). WhereIn("userId", UsersId). Where("loginTime", ">=", startTime). Select("loginTime", "userId"). Scan(&UserLogin).Error if err != nil { } //对这些数据进行整理 for _, v := range UserLogin { //根据天进行分组,得出总共有多少 times := v.LoginTime.Format("20060102") UserLoginBydDay[times] = append(UserLoginBydDay[times], v.UserId) } //逐天比较注册的数据和留存的数据,得出每天的活跃比例和人数 }