public void Analysis(int intervalRate, int termMinCount, int termMaxCount)
        {
            try
            {
                //_intervalRatePrizeList.Clear();
                var termCount = termMinCount;

                timer.Tick    += new EventHandler(DrawView); // Everytime timer ticks, timer_Tick will be called
                timer.Interval = (1000) * (5);               // Timer will tick evert second
                timer.Enabled  = true;                       // Enable the timer
                timer.Start();                               // Start the timer

                var mainAnalysisThread = new Thread(() =>
                {
                    while (termCount <= termMaxCount)
                    {
                        lock (_analysisThreads)
                        {
                            var currentTermCount = termCount;
                            int count            = termCount;
                            var newThread        = new Thread(() =>
                            {
                                using (var ssqdbentities = new ssqdbEntities())
                                {
                                    var totalTermInfos        = ssqdbentities.TotalTermInfos.Where(w => w.TermNum <= _chooseMaxTermNum).OrderByDescending(k => k.TermNum).ToList();
                                    var intervalRateViewModel = Calculate(totalTermInfos, currentTermCount);
                                    var numberMappingToUse    = ssqdbentities.NumberMapping.Take(count);
                                    var forecast    = GetNumsFromTermsAndPositions(numberMappingToUse);
                                    var forecastStr = forecast.Aggregate("", (current, num) => current + (num + ","));
                                    intervalRateViewModel.NextTermNumForecast = forecastStr.TrimEnd(',');
                                    lock (_intervalRatePrizeList)
                                    {
                                        _intervalRatePrizeList.Add(intervalRateViewModel);
                                    }
                                }
                            })
                            {
                                IsBackground = true
                            };
                            _analysisThreads.Add(newThread);
                            newThread.Start();
                            while (_analysisThreads.Count >= _maxThreads)
                            {
                                Thread.Sleep(5000);
                            }
                            termCount += intervalRate;
                        }
                    }
                });
                mainAnalysisThread.Start();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
        private IntervalRateViewModel Calculate(List <TotalTermInfos> totalTermInfos, int termCount)
        {
            using (var ssqdbentities = new ssqdbEntities())
            {
                var isPrizeList             = new List <Boolean>();
                var maxRecursionTermsPerJob = ConvertHelper.ConvertInt((_mainForm.Controls["MaxRecursionTermsPerJob"] as TextBox).Text);
                maxRecursionTermsPerJob = maxRecursionTermsPerJob > totalTermInfos.Count - termCount ? totalTermInfos.Count : maxRecursionTermsPerJob;
                for (int j1 = 0; j1 < maxRecursionTermsPerJob; j1++)
                {
                    var term     = totalTermInfos[j1];
                    var baseNums = new int[7]
                    {
                        ConvertHelper.ConvertInt(term.RedNum1),
                        ConvertHelper.ConvertInt(term.RedNum2),
                        ConvertHelper.ConvertInt(term.RedNum3),
                        ConvertHelper.ConvertInt(term.RedNum4),
                        ConvertHelper.ConvertInt(term.RedNum5),
                        ConvertHelper.ConvertInt(term.RedNum6),
                        ConvertHelper.ConvertInt(term.BlueNum)
                    };
                    var numberMappingToUse = ssqdbentities.NumberMapping.Where(k => k.TermNum < term.TermNum).Take(termCount);
                    if (numberMappingToUse.Count() < termCount)
                    {
                        break;
                    }
                    var compareNums = GetNumsFromTermsAndPositions(numberMappingToUse);

                    var isPrize = ConvertHelper.IsPrize(compareNums, baseNums);
                    isPrizeList.Add(isPrize);

                    ConvertHelper.ShowMessage(_mainForm.Controls["ProgressingMessage"], string.Format("TermCount:{0};CurrentTerm:{1};isPrize{2}", termCount, j1 + ":" + term.TermNum, isPrize));
                }

                if (isPrizeList.Count > 0)
                {
                    var winningCount          = isPrizeList.Count(k => k);
                    var intervalRateViewModel = new IntervalRateViewModel
                    {
                        TermNum = totalTermInfos.First().TermNum,
                        MaxRecursionTermsThisJob = maxRecursionTermsPerJob,
                        PreviousTermsNum         = termCount,
                        WinningRate = (winningCount * 100 / isPrizeList.Count())
                    };
                    ConvertHelper.ShowMessage(_mainForm.Controls["ProgressingMessage"], string.Format("TermNum{0};PreviousTermsNum{1};WinningRate{2}"
                                                                                                      , intervalRateViewModel.TermNum, intervalRateViewModel.PreviousTermsNum, intervalRateViewModel.WinningRate));
                    return(intervalRateViewModel);
                }
                else
                {
                    return(null);
                }
            }
        }
Exemplo n.º 3
0
 public void InitialNewestNumberMappingData()
 {
     using (var ssqdbentities = new ssqdbEntities())
     {
         try
         {
             ssqdbentities.Database.ExecuteSqlCommand("Insert into NumberMapping select * from UV_NumberMapping where UV_NumberMapping.TermNum>(select max(NumberMapping.TermNum) from NumberMapping)");
         }
         catch (Exception e)
         {
             MessageBox.Show(e.Message);
         }
     }
 }
Exemplo n.º 4
0
 public InitialDbData()
 {
     using (var ssqdbentities = new ssqdbEntities())
     {
         try
         {
             numberMappings = ssqdbentities.NumberMapping.OrderByDescending(m => m.TermNum).ToList();
         }
         catch (Exception e)
         {
             MessageBox.Show(e.Message);
         }
     }
 }
Exemplo n.º 5
0
 public void InitialAllNumberMappingData()
 {
     using (var ssqdbentities = new ssqdbEntities())
     {
         try
         {
             ssqdbentities.Database.ExecuteSqlCommand("Delete from NumberMapping");
             ssqdbentities.Database.ExecuteSqlCommand("Insert into NumberMapping select * from UV_NumberMapping");
         }
         catch (Exception e)
         {
             MessageBox.Show(e.Message);
         }
     }
 }
Exemplo n.º 6
0
 public void ComboBoxTermBinding(ComboBox termComboBox)
 {
     using (var ssqdbentities = new ssqdbEntities())
     {
         try
         {
             termComboBox.DataSource    = numberMappings.ToList();
             termComboBox.DisplayMember = "TermNum";
             termComboBox.ValueMember   = "TermNum";
         }
         catch (Exception e)
         {
             MessageBox.Show(e.Message);
         }
     }
 }
Exemplo n.º 7
0
 public void UpdateNewest()
 {
     using (var ssqdbentities = new ssqdbEntities())
     {
         var currentMaxTermNum = ssqdbentities.TotalTermInfos.Max(m => m.TermNum);
         var newestTermInfos   = ReadCsv(currentMaxTermNum);
         if (newestTermInfos.Count > 0)
         {
             foreach (var totalTermInfo in newestTermInfos)
             {
                 ssqdbentities.TotalTermInfos.Add(totalTermInfo);
                 //ssqdbentities.Set<TotalTermInfos>();
                 //ssqdbentities.ChangeTracker.Entries();
             }
             ssqdbentities.SaveChanges();
         }
     }
 }