public List <QuestionFeedbackQuery> CreateFeedbacks(List <User> users, List <Question> questions) { var feedbacks = new List <QuestionFeedbackQuery>(); foreach (var question in questions) { RandomizerExtension.Shuffle(users); RandomizerExtension.Shuffle(users); var likesCount = _random.Next(190, question.AnswersCount) + 20; for (var i = 0; i < likesCount; i++) { feedbacks.Add(new QuestionFeedbackQuery { QuestionFeedbackType = QuestionFeedbackType.Like, UserId = users[i].UserId, QuestionId = question.QuestionId }); } var dislikesCount = likesCount * _random.Next(10, 25) / 100; for (var i = 0; i < dislikesCount; i++) { feedbacks.Add(new QuestionFeedbackQuery { QuestionFeedbackType = QuestionFeedbackType.Dislike, UserId = users[i].UserId, QuestionId = question.QuestionId }); } } return(feedbacks); }
public async Task CreateTimer(BotsUnitOfWork db, DbContextOptions <TwoButtonsContext> dbOptions, MagicViewModel magic) { TimerCallback timerDelegate = Task; var errorPercent = _random.Next(3, 5); var errorAnwerType = (AnswerType)_random.Next(1, 3); var firstOptionPercent = magic.FirstOptionPercent; if (errorAnwerType == AnswerType.First) { firstOptionPercent += errorPercent; } else { firstOptionPercent -= errorPercent; } var firstBotsCount = magic.BotsCount * firstOptionPercent / 100; var secondBotsCount = magic.BotsCount - firstBotsCount; var allBots = await db.BotsRepository.GetAllBotsIdsExceptVoted(magic.QuestionId); RandomizerExtension.Shuffle(allBots); var list = new List <BotVoting>(); for (var i = 0; i < firstBotsCount && i < allBots.Count; i++) { list.Add(new BotVoting { BotId = allBots[i], QuestionId = magic.QuestionId, AnswerType = AnswerType.First }); } for (var i = firstBotsCount; i < secondBotsCount + firstBotsCount && i < allBots.Count; i++) { list.Add(new BotVoting { BotId = allBots[i], QuestionId = magic.QuestionId, AnswerType = AnswerType.Second }); } RandomizerExtension.Shuffle(list); foreach (var bot in list) { var job = new JobState { BotId = bot.BotId, AnswerType = bot.AnswerType, QuestionId = bot.QuestionId, DbOptions = dbOptions, Db = db }; //await new TaskFactory().StartNew(() => Task(job)); var timer = new Timer(timerDelegate, job, _random.Next(magic.VoteDurationInMilliseconds), Timeout.Infinite); } }
/// <summary> /// для каждого 100 000 выборки формировать свой файл собственный. так как id по убыванию, то можно подумать, что /// сначала молодые будут. Однако распределение позволяет сказать, что так может быть не всегда. Сохранять построчно /// кажый объект /// </summary> /// <param name="folderPathFrom"></param> /// <param name="pattern"></param> /// <param name="folderPathTo"></param> /// <param name="fileName"></param> public void ProcessVkUsers(string folderPathFrom, string pattern, string folderPathTo, string fileName) { var result = new List <UserReader>(); var files = Directory.GetFiles(folderPathFrom).Where(x => x.Contains(pattern)).ToList(); int k = 0; for (var i = 0; i < files.Count; i++) { var file = files[i]; using (var sr = new StreamReader(file)) { var json = sr.ReadToEnd().Replace("No", "").Replace("Name", ""); var jsonUsers = JsonConvert.DeserializeObject <VkUserDataResponse>(json).Response.Items .Where(x => x.Birthday.Age() >= 10 && x.Birthday.Age() <= 25 && !x.LargePhoto.Contains("deactivated") && x.City != null && !x.LargePhoto.Contains("camera")).Select(x => new UserReader { ExternalId = x.UserId, Birthday = x.Birthday, City = x.City.Title.Replace("'", "''"), FirstName = x.FirstName.Replace("'", "''"), LastName = x.LastName.Replace("'", "''"), SexType = x.Sex, VkOriginalAvatrUrl = x.LargePhoto }).ToList(); RandomizerExtension.Shuffle(jsonUsers); RandomizerExtension.Shuffle(jsonUsers); result.AddRange(jsonUsers); } if (result.Count >= 10_000) { using (var sw = new StreamWriter(folderPathTo + Path.GetFileNameWithoutExtension(fileName) + $"_{k++}" + Path.GetExtension(fileName), false, Encoding.UTF8)) { sw.WriteLine(JsonConvert.SerializeObject(result.Take(10_000))); } result = result.Skip(10_000).ToList(); } else if (i == files.Count - 1) { using (var sw = new StreamWriter(folderPathTo + Path.GetFileNameWithoutExtension(fileName) + $"_{k++}" + Path.GetExtension(fileName), false, Encoding.UTF8)) { sw.WriteLine(JsonConvert.SerializeObject(result.Take(10_000))); } } } result.Clear(); }
public List <FollowingQuery> CreateFollowings(List <User> users) { var followers = new List <FollowingQuery>(); foreach (var follower in users.ToList()) { var followingsCount = _random.Next(15, 80); RandomizerExtension.Shuffle(users); RandomizerExtension.Shuffle(users); for (var i = 0; i < followingsCount; i++) { followers.Add(new FollowingQuery { UserId = follower.UserId, FollowingId = users[i].UserId, IsFollowing = true, VisitsCount = _random.Next(10, 80), FollowingDate = DateTime.UtcNow.Add(TimeSpan.FromDays(-_random.Next(250))) }); } } return(followers); }
public List <AnswerQuery> CreateAnswers(List <User> users, List <Question> questions) { var answers = new List <AnswerQuery>(); foreach (var question in questions) { RandomizerExtension.Shuffle(users); RandomizerExtension.Shuffle(users); var answersCount = _random.Next(190, 350); var firstAnswers = answersCount * question.FirstOptionPercentCount / 100; var secondAnswers = answersCount - firstAnswers; for (var i = 0; i < firstAnswers; i++) { answers.Add(new AnswerQuery { UserId = users[i].UserId, AnswerType = AnswerType.First, QuestionId = question.QuestionId, AnsweredDate = RandomDay(question.AddedDate, DateTime.UtcNow) }); } for (var i = firstAnswers; i < firstAnswers + secondAnswers; i++) { answers.Add(new AnswerQuery { UserId = users[i].UserId, AnswerType = AnswerType.Second, QuestionId = question.QuestionId, AnsweredDate = RandomDay(question.AddedDate, DateTime.UtcNow) }); } question.AnswersCount = answersCount; } return(answers); }