/// <summary> /// 活跃留存 /// 指定时间活跃(即访问小程序)的用户,在之后的第N天,再次访问小程序的用户数占比 /// </summary> /// <param name="model"></param> /// <returns></returns> public ReturnValueModel GetActiveRetain(StatisticsTimeViewModel model) { List <float> pres = new List <float>(); List <int> dayList = new List <int>() { 1, 2, 3, 4, 5, 6, 7, 14, 30 }; var startTime = model.begin_date; var endTime = model.end_date.AddDays(1).AddSeconds(-1); //当前时间段活跃用户 var doctorList = _rep.Where <VisitModules>(x => startTime <= x.CreateTime && x.CreateTime <= endTime).Join(_rep.Where <WxUserModel>(x => x.IsCompleteRegister == 1 && (x.IsSalesPerson ?? 0) == 0), x => x.WxUserid, y => y.Id, (x, y) => new { x.Id, x.WxUserid, x.CreateTime }).GroupBy(x => x.WxUserid).Select(x => new { WxUserid = x.Key, CreateTime = x.Min(item => item.CreateTime) }); //当前用户数量 去重 var doctorCount = doctorList.Select(x => x.WxUserid).Count(); foreach (var item in dayList) { var tempCount = 0; var per = 0F; //天数内 foreach (var item2 in doctorList) { //访问时间 var creatTime = DateTime.Parse(item2.CreateTime.Value.ToShortDateString()); //天数内都 var visitStartTime = creatTime.AddDays(item); var visitEndTime = creatTime.AddDays(item + 1).AddSeconds(-1); //是否访问 var isVisit = _rep.FirstOrDefault <VisitModules>(x => visitStartTime <= x.CreateTime && x.CreateTime <= visitEndTime && x.WxUserid == item2.WxUserid) != null; if (isVisit) { tempCount++; } } if (doctorCount != 0) { per = (tempCount * 1F) / (doctorCount * 1F); } pres.Add(per); } ReturnValueModel rvm = new ReturnValueModel(); rvm.Success = true; rvm.Msg = ""; rvm.Result = pres; return(rvm); }
/// <summary> /// 新增留存率 /// 指定时间新增(即首次访问小程序)的用户,在之后的第N天,再次访问小程序的用户数占比 /// </summary> /// <param name="model"></param> /// <returns></returns> public ReturnValueModel GetAddRetain(StatisticsTimeViewModel model) { var startTime = model.begin_date; var endTime = model.end_date.AddDays(1).AddSeconds(-1); //天数差 var daySum = (int)(model.end_date - model.begin_date).TotalDays; //访问人数 注册&医生 var doctorList = _rep.Where <WxUserModel>(x => x.IsCompleteRegister == 1 && (x.IsSalesPerson ?? 0) == 0 && startTime <= x.CreateTime && x.CreateTime <= endTime).Select(x => new { x.Id, x.CreateTime }).ToList(); var doctorCount = doctorList.Count(); List <float> pres = new List <float>(); List <int> dayList = new List <int>() { 1, 2, 3, 4, 5, 6, 7, 14, 30 }; foreach (var item in dayList) { var tempCount = 0; var per = 0F; //天数内 foreach (var item2 in doctorList) { //注册时间 var creatTime = DateTime.Parse(item2.CreateTime.Value.ToShortDateString()); //天数内都 var visitStartTime = creatTime.AddDays(item); var visitEndTime = creatTime.AddDays(item + 1).AddSeconds(-1); //是否访问 var isVisit = _rep.FirstOrDefault <VisitModules>(x => visitStartTime <= x.CreateTime && x.CreateTime <= visitEndTime && x.WxUserid == item2.Id) != null; if (isVisit) { tempCount++; } } if (doctorCount != 0) { per = (tempCount * 1F) / (doctorCount * 1F); } pres.Add(per); } ReturnValueModel rvm = new ReturnValueModel(); rvm.Success = true; rvm.Msg = ""; rvm.Result = pres; return(rvm); }
public IHttpActionResult GetActiveRetain(StatisticsTimeViewModel model) { var ret = _statisticService.GetActiveRetain(model); return(Ok(ret)); }