Example #1
0
 public LotteryJobEventArgs(string lotteryCode,
                            string lotteryId,
                            LotteryFinalDataDto lotteryFinalData)
 {
     _lotteryCode      = lotteryCode;
     _lotteryId        = lotteryId;
     _lotteryFinalData = lotteryFinalData;
 }
Example #2
0
        public bool FinalPeriodIsLottery(LotteryFinalDataDto finalData)
        {
            var todayActLotteryCount = finalData.FinalPeriod - finalData.TodayFirstPeriod + 1;

            // 当前期数还未开奖
            if (todayActLotteryCount < TodayCurrentCount)
            {
                return(false);
            }
            return(true);
        }
Example #3
0
 protected RunLotteryAbstractJob()
 {
     PreInitialize();
     LastStart                     = DateTime.Now;
     _lotteryQueryService          = ObjectContainer.Resolve <ILotteryQueryService>();
     _lotteryFinalDataQueryService = ObjectContainer.Resolve <ILotteryFinalDataQueryService>();
     _commandService               = ObjectContainer.Resolve <ICommandService>();
     _lotteryDataQueryService      = ObjectContainer.Resolve <ILotteryDataQueryService>();
     _lotteryInfo                  = _lotteryQueryService.GetLotteryInfoByCode(_lotteryCode);
     _timeRuleManager              = new TimeRuleManager(_lotteryInfo);
     _lotteryFinalData             = _lotteryFinalDataQueryService.GetFinalData(_lotteryInfo.Id);
     _dataUpdateItems              = DataUpdateContext.GetDataUpdateItems(_lotteryInfo.Id);
     _isStart = true;
     PostinItialize();
 }
Example #4
0
        /// <summary>
        /// 执行定时任务
        /// </summary>
        public virtual void Execute()
        {
            // 处于开奖期间,或是最后一期开奖
            if (_timeRuleManager.IsLotteryDuration || _timeRuleManager.IsTodayFinalPeriod)
            {
                DateTime nextDateTime;

                if (_timeRuleManager.ParseNextLotteryTime(out nextDateTime))
                {
                    if (!JudgeCurrentPeriodIsLottery() || _isStart)
                    {
                        IList <LotteryDataDto> lotteryDatas = null;
                        if (!_isCrawling)
                        {
                            _isCrawling = true;
                            lock (_objLock)
                            {
                                // 抓取新的数据
                                foreach (var updateItem in _dataUpdateItems)
                                {
                                    var crawlNewDatas = updateItem.CrawlDatas(LotteryFinalData.FinalPeriod);
                                    if (crawlNewDatas.Safe().Any())
                                    {
                                        lotteryDatas = crawlNewDatas.Safe().OrderBy(p => p.Period).ToList();
                                        break;
                                    }
                                }

                                if (lotteryDatas.Safe().Any())
                                {
                                    var crawlFinalData = lotteryDatas.Last();

                                    VerifyTodayFirstPeriod(crawlFinalData);

                                    foreach (var lotteryData in lotteryDatas)
                                    {
                                        if (lotteryData.Period > LotteryFinalData.FinalPeriod)
                                        {
                                            var thisPeriodLotteryData =
                                                _lotteryDataQueryService.GetPredictPeriodData(_lotteryInfo.Id,
                                                                                              lotteryData.Period);
                                            if (thisPeriodLotteryData == null)
                                            {
                                                CommandExecute(new AddLotteryDataCommand(Guid.NewGuid().ToString(), lotteryData));
                                                Thread.Sleep(LotteryDataDelay);
                                                _lotteryFinalData = _lotteryFinalDataQueryService.GetFinalData(lotteryData.LotteryId);
                                            }
                                        }
                                    }
                                    if (_timeRuleManager.IsTodayFinalPeriod)
                                    {
                                        var todayLastLotteryData =
                                            lotteryDatas.OrderByDescending(p => p.Period).First();
                                        UpdateNextFirstPeriod(todayLastLotteryData);
                                    }

                                    EachTaskExcuteAfterHandler?.Invoke(this, new LotteryJobEventArgs(_lotteryCode, _lotteryInfo.Id, _lotteryFinalData));
                                    //int dayFirstPeriod = 0;
                                    //if (IsNeedSetFirstPeriod(out dayFirstPeriod))
                                    //{
                                    //    SendCommandAsync(new UpdateNextDayFirstPeriodCommand(LotteryFinalData.Id, LotteryFinalData.LotteryId, dayFirstPeriod));
                                    //}
                                }
                            }

                            _isCrawling = false;
                            if (_isStart)
                            {
                                _isStart = false;
                            }
                        }
                    }
                }
            }
        }