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(); } }
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, 通知开奖实体, 输参数); } }