Ejemplo n.º 1
0
        public int WriteStatsToDB(LotteryPeriod lp)
        {
            using var con = new NpgsqlConnection(cs);
            con.Open();
            int periodID;
            var cmd = new NpgsqlCommand("insert into period (grandprizeamt,startts,endts)" +
                                        "VALUES (:gpAmt, :bTS,:eTS) returning id", con);

            cmd.Parameters.Add(new NpgsqlParameter("gpAmt", lp.GrandPrizeAmount));
            cmd.Parameters.Add(new NpgsqlParameter("bTS", lp.PeriodBeginTS));
            cmd.Parameters.Add(new NpgsqlParameter("eTS", DateTime.Now));
            periodID = (int)cmd.ExecuteScalar(); //PERIOD table 1-record

            var unionResult = lp.losingTicketsL.Union(lp.winningTicketsL).ToList();

            while (unionResult.Any())
            {
                var sqlstr = new StringBuilder("insert into ticketsale " +
                                               "(period_id,ballstring,ball1,ball2,ball3,ball4,ball5,powerball,winlevel,winamount,type,player) values ");
                using var cmd2 = new NpgsqlCommand();

                int batchSize = Math.Min(5000, unionResult.Count);
                foreach (var i in Enumerable.Range(0, batchSize))
                {
                    var l = unionResult[i];
                    sqlstr.Append($"(@pid{i},@bs{1},@b1{i},@b2{i},@b3{i},@b4{i},@b5{i},@bpower{i},@winL{i},@wina{i},@t{i},@pn{i})\n");
                    cmd2.Parameters.Add(new NpgsqlParameter($"pid{i}", periodID));
                    cmd2.Parameters.Add(new NpgsqlParameter($"bs{i}",
                                                            l.balls[0].ToString("00") + l.balls[1].ToString("00") +
                                                            l.balls[2].ToString("00") + l.balls[3].ToString("00") +
                                                            l.balls[4].ToString("00") + l.powerBall.ToString("00")));
                    cmd2.Parameters.Add(new NpgsqlParameter($"b1{i}", l.balls[0]));
                    cmd2.Parameters.Add(new NpgsqlParameter($"b2{i}", l.balls[1]));
                    cmd2.Parameters.Add(new NpgsqlParameter($"b3{i}", l.balls[2]));
                    cmd2.Parameters.Add(new NpgsqlParameter($"b4{i}", l.balls[3]));
                    cmd2.Parameters.Add(new NpgsqlParameter($"b5{i}", l.balls[4]));
                    cmd2.Parameters.Add(new NpgsqlParameter($"bpower{i}", l.powerBall));
                    cmd2.Parameters.Add(new NpgsqlParameter($"winL{i}", l.winLevel));
                    cmd2.Parameters.Add(new NpgsqlParameter($"wina{i}", l.winAmtDollars));
                    cmd2.Parameters.Add(new NpgsqlParameter($"t{i}", l.Type));
                    cmd2.Parameters.Add(new NpgsqlParameter($"pn{i}", l.Player));

                    if (i < batchSize - 1)
                    {
                        sqlstr.Append(",");
                    }
                }
                cmd2.CommandText = sqlstr.ToString();
                cmd2.Connection  = con;
                cmd2.Prepare();
                cmd2.ExecuteNonQuery();
                unionResult.RemoveRange(0, batchSize);
            }
            con.Close();
            return(periodID);//returns period.id as assigned by identity column in DB
        }
Ejemplo n.º 2
0
 public void PurchaseTickets(LotteryPeriod period, int sellLimit)
 {
     if (sellLimit < 1)
     {
         throw new System.ArgumentException("Parameter cannot be <1", "sellLimit");
     }
     for (int i = 0; i < sellLimit; i++)
     {
         SellTicket("threadSpawned");
     }
 }
Ejemplo n.º 3
0
 public void PurchaseTickets(LotteryPeriod period, int sellLimit)
 {
     if (sellLimit < 1)
     {
         throw new System.ArgumentException("Parameter cannot be <1", "sellLimit");
     }
     for (int i = 0; i < sellLimit; i++)
     {
         LotteryTicket t1 = new LotteryTicket();
         ProcessSale(t1);
     }
 }
Ejemplo n.º 4
0
 public LotteryVendor(LotteryPeriod p)
 {
     this.p = p ?? throw new ArgumentNullException(nameof(p));
 }