public IList <PredictDataDto> NewLotteryDataList(string lotteryId, string userId) { var lotteryInfo = _lotteryQueryService.GetLotteryInfoByCode(lotteryId); var finalLotteryData = _lotteryFinalDataQueryService.GetFinalData(lotteryId); var predictPeroid = finalLotteryData.FinalPeriod + 1; var predictDatas = new List <PredictDataDto>(); var userNorms = _normConfigQueryService.GetUserOrDefaultNormConfigs(lotteryId, userId); foreach (var userNorm in userNorms.Safe()) { predictDatas.AddRange(PredictNormData(lotteryInfo, userNorm, predictPeroid)); } return(predictDatas); }
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(); }
private int GetLastPredictNormPeriod(string lotteryId, NormConfigDto userNorm, string lotteryCode, out PredictDataDto lastPredictData, out bool isNewPredict) { var normPlanInfo = _planInfoQueryService.GetPlanInfoById(userNorm.PlanId); lastPredictData = _lotteryPredictDataQueryService.GetLastPredictData(userNorm.Id, normPlanInfo.PlanNormTable, lotteryCode); var lastLotteryData = _lotteryFinalDataQueryService.GetFinalData(lotteryId); var predictCount = userNorm.PlanCycle * userNorm.LookupPeriodCount; var theoryStartPredictPreoid = lastLotteryData.FinalPeriod - predictCount; if (lastPredictData != null) { var userNormPredictPeroid = lastPredictData.StartPeriod + lastPredictData.MinorCycle - 1; if (userNormPredictPeroid > theoryStartPredictPreoid) { isNewPredict = false; return(userNormPredictPeroid); } } isNewPredict = true; return(theoryStartPredictPreoid); }
/// <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; } } } } } }