Ejemplo n.º 1
0
        void 时间到达执行的事件(object sender, System.Timers.ElapsedEventArgs e)
        {
            Console.WriteLine(延迟读取秒数 + "秒后,准备读取开奖信息" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            Action <long> 异步执行 = (期号) =>
            {
                Thread.Sleep(延迟读取秒数 * 1000);
                读取开奖号和修改数据库开奖信息(期号);
            };

            异步执行.BeginInvoke(开奖列表[0].期号代码, null, null);
            lock (开奖列表)
            {
                定时器.Stop();
                开奖列表.RemoveAt(0);
                if (开奖列表 == null || 开奖列表.Count == 0)
                {
                    当天日期 = 当天日期.AddDays(1);
                    开奖列表 = 读取配置文件生产日期(当天日期);
                }
                MyTcpChannel.NoticNextOpenTime(时时彩客户端ID, new NextOpenTime
                {
                    OpenTime = 开奖列表[0].开奖日期,
                    Expect   = 开奖列表[0].期号代码
                });
                var 次执行间隔 = (开奖列表[0].开奖日期 - DateTime.Now).TotalMilliseconds;
                定时器.Interval = 次执行间隔;
                定时器.Start();
            }
        }
Ejemplo n.º 2
0
        public void 修改数据库开奖信息(开奖实体 开奖信息, DateTime?日期 = null, Boolean Notice = true)
        {
            if (!日期.HasValue)
            {
                日期 = DateTime.Today;
            }
            var 开奖数组   = 开奖信息.开奖号.Split(',');
            var 开奖用户信息 = new List <CountUserDTO>();
            var 当前彩种ID = 0;

            using (var 数据库实体 = new LotteryDbContext())
            {
                数据库实体.Transaction(() =>
                {
                    var 彩票类型      = 数据库实体.LotteryTypes.Where(x => x.LotteryTypeGUID.Equals(时时彩客户端标识)).FirstOrDefault();
                    var 玩法        = 数据库实体.PlayTypes.Where(x => x.LotteryTypeID.Equals(彩票类型.LotteryTypeID));
                    var 数据库当前期号实体 = 数据库实体.LotteryInfos.Where(x => x.LotteryInfoCode.Equals(开奖信息.期号代码)).FirstOrDefault();

                    当前彩种ID = 彩票类型.LotteryTypeID;

                    if (数据库当前期号实体 == null)
                    {
                        数据库当前期号实体 = new LotteryInfos
                        {
                            LotteryInfoCode     = 开奖信息.期号代码,
                            LotteryInfoDate     = 日期.Value,
                            LotteryInfoOpenCode = 开奖信息.开奖号,
                            LotteryInfoOpenTime = null,
                            LotteryTypeID       = 彩票类型.LotteryTypeID
                        };
                        数据库实体.LotteryInfos.AddObject(数据库当前期号实体);
                        数据库实体.SaveChanges();
                    }
                    foreach (var 玩法详细 in 玩法)
                    {
                        var 当前玩法开奖号 = new StringBuilder();

                        for (int i = 玩法详细.PlayTypeStartIdx; i <= 玩法详细.PlayTypeEndIdx; i++)
                        {
                            当前玩法开奖号.Append(开奖数组[i]);
                        }
                        当前玩法开奖号.Append("|");
                        var 开奖字符串   = 当前玩法开奖号.ToString();
                        var 猜中的用户ID = 数据库实体.UserLotterys.Where(x =>
                                                               x.UserLotteryExpect.Equals(开奖信息.期号代码) &&
                                                               x.LotteryTypeID.Equals(彩票类型.LotteryTypeID) &&
                                                               x.Content.Contains(开奖字符串) &&
                                                               x.PlayTypeID.Equals(玩法详细.PlayTypeID) &&
                                                               x.IsWin.Equals(0)).Select(x => x.UserId).ToList();

                        if (猜中的用户ID.Count > 0)
                        {
                            数据库实体.UserLotterys.Where(x =>
                                                     x.UserLotteryExpect.Equals(开奖信息.期号代码) &&
                                                     x.LotteryTypeID.Equals(彩票类型.LotteryTypeID) &&
                                                     猜中的用户ID.Contains(x.UserId) &&
                                                     x.PlayTypeID.Equals(玩法详细.PlayTypeID) &&
                                                     x.IsWin.Equals(0)).Update(x => new UserLotterys
                            {
                                IsWin = 1
                            });
                            数据库实体.SaveChanges();
                            foreach (var 用户ID in 猜中的用户ID)
                            {
                                开奖用户信息.Add(new CountUserDTO
                                {
                                    playTypeId   = 玩法详细.PlayTypeID,
                                    playTypeName = 玩法详细.PlayTypeName,
                                    IsWin        = 1,
                                    userId       = 用户ID,
                                });
                                var 用户统计信息 = 数据库实体.UserCounts.Where(x =>
                                                                    x.userId.Equals(用户ID) &&
                                                                    x.LotteryTypeId.Equals(彩票类型.LotteryTypeID) &&
                                                                    x.PlayTypeId.Equals(玩法详细.PlayTypeID)).FirstOrDefault();
                                用户统计信息.WinNum      += 1;
                                用户统计信息.MathHistory += "1";
                            }
                            数据库实体.SaveChanges();
                        }
                        //.UserRules.Where(x => 猜中的用户ID.Contains(x.UserID)).Update(x => new UserRules
                        //{
                        //    UserWinNum = x.UserWinNum + 1
                        //});


                        var 未猜中的用户ID = 数据库实体.UserLotterys.Where(x =>
                                                                x.UserLotteryExpect.Equals(开奖信息.期号代码) &&
                                                                x.IsWin.Equals(0) &&
                                                                x.LotteryTypeID.Equals(彩票类型.LotteryTypeID) &&
                                                                !x.Content.Contains(开奖字符串) &&
                                                                x.PlayTypeID.Equals(玩法详细.PlayTypeID)).Select(x => x.UserId).ToList();

                        if (未猜中的用户ID.Count > 0)
                        {
                            数据库实体.UserLotterys.Where(x =>
                                                     x.UserLotteryExpect.Equals(开奖信息.期号代码) &&
                                                     未猜中的用户ID.Contains(x.UserId) &&
                                                     x.LotteryTypeID.Equals(彩票类型.LotteryTypeID) &&
                                                     x.PlayTypeID.Equals(玩法详细.PlayTypeID) &&
                                                     x.IsWin.Equals(0)).Update(x => new UserLotterys
                            {
                                IsWin = 2
                            });
                            数据库实体.SaveChanges();
                            foreach (var 用户ID in 未猜中的用户ID)
                            {
                                开奖用户信息.Add(new CountUserDTO
                                {
                                    playTypeId   = 玩法详细.PlayTypeID,
                                    playTypeName = 玩法详细.PlayTypeName,
                                    IsWin        = 2,
                                    userId       = 用户ID,
                                });
                                var 用户统计信息 = 数据库实体.UserCounts.Where(x =>
                                                                    x.userId.Equals(用户ID) &&
                                                                    x.LotteryTypeId.Equals(彩票类型.LotteryTypeID) &&
                                                                    x.PlayTypeId.Equals(玩法详细.PlayTypeID)).FirstOrDefault();
                                用户统计信息.MathHistory += "2";
                            }
                            数据库实体.SaveChanges();
                        }
                    }
                });
            }
            if (Notice)
            {
                var 通知开奖实体 = new LotteyInfo
                {
                    Expect   = 开奖信息.期号代码,
                    OpenCode = 开奖信息.开奖号
                };
                var 中奖数据 = from p in 开奖用户信息
                           group p by p.userId into g
                           select new
                {
                    Key   = g.Key,
                    Value = g.Select(x => new CountSendDTO
                    {
                        IsWin        = x.IsWin,
                        playTypeId   = x.playTypeId,
                        playTypeName = x.playTypeName
                    })
                };
                var 输参数 = 中奖数据.ToDictionary(x => x.Key, x => x.Value.ToList());

                MyTcpChannel.OpenLotteyNotic(当前彩种ID, 通知开奖实体, 输参数);
            }
        }