public Task Execute(IJobExecutionContext context)
        {
            try
            {
                DateTime endtTime      = DateTime.Now.Date;
                DateTime startTime     = DateTime.Now.Date.AddDays(-1);
                var      redisProvider = _providerFactory.GetRedisProvider("userAction");
                #region 昨日概况总结
                //获取所有的key
                List <int> gameids = _mjlog3repository.GetGameid();
                foreach (var item in gameids)
                {
                    //string timekey = endtTime.ToString("yyyyMMdd");
                    int areaid = item * 100;
                    //List<string> keys = redisProvider.SearchKeys($"{areaid}_t{timekey}*", 0);
                    List <UserActionStatisticsModel> data = new List <UserActionStatisticsModel>();
                    data = _repository.QueryUserActStat(areaid, startTime, endtTime);
                    //for (int i = 0; i < keys.Count; i++)
                    //{
                    //    var length = redisProvider.LLen(keys[i]);
                    //    var udata = redisProvider.LRange<UserActionModel>(keys[i], 0, length);
                    //    if (i==0)
                    //    {
                    //        data = udata;
                    //    }
                    //    else
                    //    {
                    //        data.AddRange(udata);
                    //    }
                    //}
                    //foreach (var key in keys)
                    //{
                    //    var length = redisProvider.LLen(key);
                    //    var data = redisProvider.LRange<UserActionModel>(key, 0, length).Where(i => i.date >= startTime && i.date < endtTime).ToList();
                    //}
                    //获取平台类型
                    List <int> dataType = PlatFromEnumExt.GetEnumAllValue <DataType>();
                    foreach (var type in dataType)
                    {
                        var udata = data.Where(i => i.type == type).Where(i => i.added >= startTime && i.added < endtTime).ToList();
                        //所有版本
                        var  all  = GetList(areaid, type, udata, startTime);
                        bool s    = _repository.DeleteYeatodayData(areaid, startTime);
                        var  ares = _repository.Insert(all);
                        _logger.LogInformation($"更新:{ares}条数据,类型:{type},时间:{DateTime.Now:yyyy-MMM-dd HH:mm:ss:ffff}");
                    }
                }

                var IsSucces = _repository.DeleteUserActStat(endtTime);
                _logger.LogDebug($"清除昨日行为数据分析数据:{IsSucces},时间:{DateTime.Now:yyyy-MMM-dd HH:mm:ss:ffff}");
                #endregion
            }
            catch (Exception e)
            {
                _logger.LogError($"Execute:{e.Message}");
            }
            return(Task.CompletedTask);
        }
Ejemplo n.º 2
0
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                var      time      = DateTime.Now.AddMinutes(-5);
                DateTime endtTime  = Convert.ToDateTime(time.ToString("yyyy-MM-dd HH:mm:00"));
                DateTime startTime = endtTime.AddMinutes(-1);
                string   ketTime   = "";
                if (time.Minute > 0)
                {
                    ketTime = time.AddHours(1).ToString("yyyyMMddHH");
                }
                else
                {
                    ketTime = time.ToString("yyyyMMddHH");
                }
                var redisProvider = _providerFactory.GetRedisProvider("userAction");
                //获取所有的key
                List <int> gameids = _mjlog3repository.GetGameid();
                foreach (var item in gameids)
                {
                    int key    = item * 100;
                    var length = redisProvider.LLen($"{key}_t{ketTime}");
                    //获取一个小时内所有数据
                    var all_data = redisProvider.LRange <UserActionModel>($"{key}_t{ketTime}", 0, length);
                    all_data = all_data.Where(i => i.date > startTime && i.date <= endtTime).ToList();
                    //获取版本号
                    List <string> vList = _repository.GetAreaVersion(Convert.ToInt32(key)).Select(i => i.version).ToList();
                    //获取类型
                    List <int> dataType = PlatFromEnumExt.GetEnumAllValue <DataType>();
                    foreach (var type in dataType)
                    {
                        var tdata = all_data.Where(i => i.type == type).ToList();
                        //所有版本
                        List <JobRealData> areg = JobDataProcessing.GetDataList(tdata, "", endtTime);
                        redisProvider.RPush($"r_1_{type}_{key}", areg);
                        //_logger.LogInformation($"统计数据{JsonConvert.SerializeObject(areg)}");
                        foreach (var v in vList)
                        {
                            var data = tdata.Where(i => i.version == v).ToList();
                            List <JobRealData> reg = JobDataProcessing.GetDataList(data, v, endtTime);
                            //1分钟时间粒度 分版本
                            redisProvider.RPush($"r_1_{type}_{v}_{key}", reg);
                            //redisProvider.KeyExpire($"r_1_{type}_{v}_{key}", (int)KeyExpireTime.realData);
                            //_logger.LogInformation($"统计数据{v}版本{JsonConvert.SerializeObject(reg)}");
                        }
                        //redisProvider.KeyExpire($"r_1_{type}_{key}", (int)KeyExpireTime.realData);
                        _logger.LogInformation($"{key}大厅,1分钟时间粒度,类别:{type}");
                    }
                }
            }
            catch (Exception e)
            {
                _logger.LogError($"Execute:{e.Message}");
            }

            return(Task.CompletedTask);
        }
 /// <summary>
 /// 用户画像
 /// </summary>
 /// <param name="areaid"></param>
 /// <param name="strat"></param>
 /// <param name="end"></param>
 /// <param name="type"></param>
 /// <param name="version"></param>
 /// <returns></returns>
 public UserPicModel GetUserPic(int areaid, DateTime start, DateTime end, int type, string version)
 {
     try
     {
         UserPicModel res       = new UserPicModel();
         string       contition = $" and type={type} and version='{version}' and date between '{start}' and '{end}'";
         if (string.IsNullOrEmpty(version))
         {
             contition = $" and type={type}  and date between '{start}' and '{end}'";
         }
         //数据
         //var unitData = _repository.GetActionData(areaid, contition);//从缓存取30天数据
         List <UserActionModel> unitData = new List <UserActionModel>();
         if (string.IsNullOrEmpty(version))
         {
             unitData = _cache.GetRawDataForThirty(areaid.ToString(), start, end).ToList().Where(i => i.type == type && i.date >= start && i.date <= end).ToList();
         }
         else
         {
             unitData = _cache.GetRawDataForThirty(areaid.ToString(), start, end).ToList().Where(i => i.type == type && i.version == version && i.date >= start && i.date <= end).ToList();
         }
         Dictionary <int, string> plats = new Dictionary <int, string>();
         plats = PlatFromEnumExt.GetEnumAllNameAndValue <PlatFromEnum>();
         foreach (var item in plats)
         {
             string plat = item.Value;
             if (plat != "All")
             {
                 res.legendData.Add(plat);
                 seriesData aseries = new seriesData
                 {
                     name  = plat,
                     value = unitData.Where(i => i.platForm?.ToLower() == plat.ToLower() && i.uid != 0).GroupBy(i => i.uid).Count()
                 };
                 seriesData rseries = new seriesData
                 {
                     name  = plat,
                     value = unitData.Where(i => i.platForm?.ToLower() == plat.ToLower() && i.uid == 0).Count()
                 };
                 res.ActiveData.Add(aseries);
                 res.RegisterData.Add(rseries);
             }
         }
         return(res);
     }
     catch (Exception e)
     {
         _logger.LogError($"GetUserPic:{e.Message}");
         throw;
     }
 }
Ejemplo n.º 4
0
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                DateTime endtTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:00:00"));
                //1小时
                DateTime startTime     = endtTime.AddHours(-1);
                string   ketTime       = DateTime.Now.ToString("yyyyMMddHH");
                var      redisProvider = _providerFactory.GetRedisProvider("userAction");
                //获取所有不包含实时数据的key
                List <int> gameids = _mjlog3repository.GetGameid();
                foreach (var item in gameids)
                {
                    int key    = item * 100;
                    var length = redisProvider.LLen($"{key}_t{ketTime}");
                    //获取一个小时内所有数据
                    var all_data = redisProvider.LRange <UserActionModel>($"{key}_t{ketTime}", 0, length).Where(i => i.date > startTime && i.date <= endtTime).ToList();
                    //获取版本号
                    List <string> vList = _repository.GetAreaVersion(Convert.ToInt32(key)).Select(i => i.version).ToList();
                    //获取类型
                    List <int> dataType = PlatFromEnumExt.GetEnumAllValue <DataType>();
                    foreach (var type in dataType)
                    {
                        var tdata = all_data.Where(i => i.type == type).ToList();
                        List <JobRealData> areg = JobDataProcessing.GetDataList(tdata, "", endtTime);
                        // 60分钟时间粒度
                        redisProvider.RPush($"r_60_{type}_{key}", areg);
                        //redisProvider.KeyExpire($"r_60_{type}_{key}", (int)KeyExpireTime.realData);
                        foreach (var v in vList)
                        {
                            var data = tdata.Where(i => i.version == v).ToList();
                            List <JobRealData> reg = JobDataProcessing.GetDataList(data, v, endtTime);
                            // 60分钟时间粒度
                            redisProvider.RPush($"r_60_{type}_{v}_{key}", reg);
                            //redisProvider.KeyExpire($"r_60_{type}_{v}_{key}", (int)KeyExpireTime.realData);
                            //_logger.LogInformation($"{key}大厅,1小时时间粒度,版本{v},类别:{type}");
                        }
                        _logger.LogInformation($"{key}大厅,1小时时间粒度,类别:{type}");
                    }
                    #region 一个小时的数据去重
                    //var distime = DateTime.Now.AddHours(-1).ToString("yyyyMMddHH");
                    var distime  = ketTime;
                    var l_length = redisProvider.LLen($"{key}_t{distime}");
                    //获取一个小时内所有数据
                    var hourData = redisProvider.LRange <UserActionModel>($"{key}_t{distime}", 0, length);
                    var active   = hourData.Where(i => i.uid != 0).ToList();
                    var register = hourData.Where(i => i.uid == 0 && !string.IsNullOrEmpty(i.uuid)).ToList();
                    if (active.Count > 0)
                    {
                        var disact = active.GroupBy(i => new { i.version, i.type, i.uid, i.platForm, i.areaid }).Select(i => new UserActionModel()
                        {
                            id       = i.FirstOrDefault().id,
                            type     = i.Key.type,
                            uid      = i.Key.uid,
                            date     = i.FirstOrDefault().date,
                            platForm = i.Key.platForm,
                            version  = i.Key.version,
                            areaid   = i.Key.areaid,
                            //device=i.FirstOrDefault().device,
                            //packageChannel=i.FirstOrDefault()?.packageChannel
                        }).ToList();
                        disact.AddRange(register);
                        redisProvider.LRem($"{key}_t{distime}", 0, length);
                        redisProvider.RPush($"{key}_t{distime}", disact);
                    }
                    if (register.Count > 0)
                    {
                        var disact = active.GroupBy(i => new { i.version, i.type, i.uuid, i.platForm, i.areaid }).Select(i => new UserActionModel()
                        {
                            id       = i.FirstOrDefault().id,
                            type     = i.Key.type,
                            uid      = 0,
                            date     = i.FirstOrDefault().date,
                            platForm = i.Key.platForm,
                            version  = i.Key.version,
                            areaid   = i.Key.areaid,
                            uuid     = i.Key.uuid
                                       //device=i.FirstOrDefault().device,
                                       //packageChannel=i.FirstOrDefault()?.packageChannel
                        }).ToList();
                    }

                    #endregion
                }
            }
            catch (Exception e)
            {
                _logger.LogError($"Execute:{e.Message}");
            }
            return(Task.CompletedTask);
        }