/// <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);
        }
Exemple #3
0
        public IHttpActionResult GetActiveRetain(StatisticsTimeViewModel model)
        {
            var ret = _statisticService.GetActiveRetain(model);

            return(Ok(ret));
        }