public LotteryJobEventArgs(string lotteryCode, string lotteryId, LotteryFinalDataDto lotteryFinalData) { _lotteryCode = lotteryCode; _lotteryId = lotteryId; _lotteryFinalData = lotteryFinalData; }
public bool FinalPeriodIsLottery(LotteryFinalDataDto finalData) { var todayActLotteryCount = finalData.FinalPeriod - finalData.TodayFirstPeriod + 1; // 当前期数还未开奖 if (todayActLotteryCount < TodayCurrentCount) { return(false); } return(true); }
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(); }
/// <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; } } } } } }