/// <summary> /// 从备用地址执行今天任务 /// </summary> private void DoTodayJobByBackUrl() { if (!string.IsNullOrEmpty(Config.BackUrl)) { var OpenList = GetDocByBackUrl(); if (OpenList.Count == 0) { return; //无抓取数据 } var newestQiHao = OpenList.Max(w => w.Id).ToString(); var startQiNum = Convert.ToInt32(LatestQiHao.Substring(6)) + 1; var newestQiNum = Convert.ToInt32(newestQiHao.Substring(6)); if (startQiNum > newestQiNum) { return; //无最新数据 } //处理最新开奖数据 var getQiHao = string.Empty; for (var i = startQiNum; i <= newestQiNum; i++) { getQiHao = CommonHelper.GenerateTodayQiHaoYYMMDDQQQ(i); var matchItem = OpenList.Where(R => R.Id.ToString() == getQiHao).FirstOrDefault(); if (matchItem != null && SaveRecord(matchItem)) { //处理成功写入日志 log.Info(GetType(), CommonHelper.GetJobBackLogInfo(Config, getQiHao)); LatestQiHao = getQiHao; } } } }
/// <summary> /// 核实最新一期期号是否为今天的期号 /// </summary> /// <returns></returns> private bool CheckLatestQiHaoIsTodayTerm() { var datepart = CommonHelper.SCCSysDateTime - new DateTime(CommonHelper.SCCSysDateTime.Year, 1, 1); var t = Config.SkipDate.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var todayPrefix = CommonHelper.SCCSysDateTime.Year + (datepart.Days - t.Length + 1).ToString().PadLeft(3, '0'); return(LatestQiHao.StartsWith(todayPrefix)); }
/// <summary> /// 通过主站点抓取开奖数据 /// </summary> private void DoTodayJobByMainUrl() { var OpenList = GetDocByMainUrl(); if (OpenList.Count == 0) { return; //无抓取数据 } var newestQiHao = OpenList.Max(W => W.QiHao); var startQiNum = Convert.ToInt32(LatestQiHao.Substring(6)) + 1; var newestQiNum = Convert.ToInt32(newestQiHao.Substring(6)); if (startQiNum > newestQiNum) { return; //无最新数据 } //抓取到的开奖号总记录数 var total = OpenList.Count; var getQiHao = string.Empty; for (var i = startQiNum; i <= newestQiNum; i++) { getQiHao = CommonHelper.GenerateTodayQiHaoYYMMDDQQ(i); var matchItem = OpenList.Where(R => R.QiHao.ToString() == getQiHao).FirstOrDefault(); var step = 0; var nowQiHao = Convert.ToInt32(getQiHao); while (matchItem == null) { if (step <= total) { nowQiHao++; step++; matchItem = OpenList.Where(R => R.QiHao.ToString() == nowQiHao.ToString()).FirstOrDefault(); } else { matchItem = null; break; } } if (matchItem.QiHao != null && SaveRecord(matchItem)) { //处理成功写入日志 log.Info(GetType(), CommonHelper.GetJobMainLogInfo(Config, getQiHao)); LatestQiHao = getQiHao; } } }
/// <summary> /// 通过主站点抓取开奖数据 /// (广西福彩官网) /// </summary> private void DoTodayJobByMainUrl() { if (!string.IsNullOrEmpty(Config.MainUrl)) { var OpenList = GetDocByMainUrl(); if (OpenList.Count == 0) { return; //无抓取数据 } var newestQiHao = OpenList.Max(w => w.Key); var startQiNum = Convert.ToInt32(LatestQiHao.Substring(7)) + 1; var newestQiNum = Convert.ToInt32(newestQiHao.Substring(7)); if (startQiNum > newestQiNum) { return; //无最新数据 } //处理最新开奖数据 var total = OpenList.Count; //处理最新开奖数据 var getQiHao = string.Empty; for (var i = startQiNum; i <= newestQiNum; i++) { getQiHao = CommonHelper.GenerateGXKL10FQiHao(CommonHelper.SCCSysDateTime, Config.SkipDate, i); var matchItem = OpenList.Where(R => R.Key == getQiHao).FirstOrDefault(); var step = 0; var nowQiHao = Convert.ToInt32(getQiHao); while (matchItem.Key == null) { if (step <= total) { nowQiHao++; step++; matchItem = OpenList.Where(R => R.Key.ToString() == nowQiHao.ToString()).FirstOrDefault(); } else { break; } } if (matchItem.Key != null && SaveRecord(getQiHao, matchItem.Value, false)) { //处理成功写入日志 log.Info(GetType(), CommonHelper.GetJobMainLogInfo(Config, getQiHao)); LatestQiHao = getQiHao; } } } }
/// <summary> /// 通过备用站点抓取开奖数据 /// (彩乐乐) /// </summary> private void DoTodayJobByBackUrl() { if (!string.IsNullOrEmpty(Config.BackUrl)) { var OpenList = GetTodayOpenListFromBackUrl(); if (OpenList.Count == 0) { return; //无抓取数据 } var newestQiHao = OpenList.Last().Key; var startQiNum = Convert.ToInt32(LatestQiHao.Substring(6)) + 1; var total = OpenList.Count; var newestQiNum = Convert.ToInt32(newestQiHao.Substring(6)); if (startQiNum > newestQiNum) { return; //无最新数据 } //处理最新开奖数据 var getQiHao = string.Empty; for (var i = startQiNum; i <= newestQiNum; i++) { getQiHao = CommonHelper.GenerateTodayQiHaoYYMMDDQQQ(i); var matchItem = OpenList.Where(R => R.Key == getQiHao).FirstOrDefault(); var step = 0; var nowQiHao = Convert.ToInt32(getQiHao); while (matchItem.Key == null) { if (step <= total) { nowQiHao++; step++; matchItem = OpenList.Where(R => R.Key.ToString() == nowQiHao.ToString()).FirstOrDefault(); } else { break; } } if (matchItem.Key != null && SaveRecord(getQiHao, matchItem.Value, false)) { //处理成功写入日志 log.Info(GetType(), CommonHelper.GetJobBackLogInfo(Config, getQiHao)); LatestQiHao = getQiHao; } } } }
/// <summary> /// 作业执行入口 /// </summary> /// <param name="context">作业执行上下文</param> public void Execute(IJobExecutionContext context) { Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap); //预设节假日不开奖 if (Config.SkipDate.Contains(CommonHelper.SCCSysDateTime.ToString("yyyyMMdd"))) { return; } LatestQiHao = context.JobDetail.JobDataMap.GetString("LatestQiHao"); try { //服务启动时配置初始数据 if (string.IsNullOrEmpty(LatestQiHao)) { var lastItem = services.GetLastItem(currentLottery); if (lastItem != null) { LatestQiHao = lastItem.Term.ToString(); } } //第一次启动服务或最新期号为昨天的开奖期号,则自检昨天开奖数据是否抓取完毕(否则插入邮件数据),并重置当天期号和失败列表 if (string.IsNullOrEmpty(LatestQiHao) || !LatestQiHao.StartsWith(CommonHelper.SCCSysDateTime.ToString("yyMMdd"))) { CheckingYesterdayTheLotteryData(); LatestQiHao = CommonHelper.GenerateTodayQiHaoYYMMDDQQ(0); } //当最新期号不符合当天总期数,执行当天作业 if (Convert.ToInt32(LatestQiHao.Substring(6)) != Config.TimesPerDay) { DoTodayJobByMainUrl(); DoTodayJobByBackUrl(); } } catch (Exception ex) { log.Error(GetType(), string.Format("【{0}】抓取时发生错误,错误信息【{1}】", Config.Area + Config.LotteryName, ex.Message)); } //保存最新期号和失败期号列表 context.JobDetail.JobDataMap["LatestQiHao"] = LatestQiHao; }