| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Xml;
 
- using HtmlAgilityPack;
 
- using Newtonsoft.Json.Linq;
 
- using Quartz;
 
- using SCC.Common;
 
- using SCC.Crawler.Tools;
 
- using SCC.Interface;
 
- using SCC.Models;
 
- using SCC.Services;
 
- namespace SCC.Crawler.GP
 
- {
 
-     
 
-     
 
-     
 
-     [DisallowConcurrentExecution]
 
-     [PersistJobDataAfterExecution]
 
-     public class AH11X5Job : IJob
 
-     {
 
-       
 
-         
 
-         
 
-         
 
-         public AH11X5Job()
 
-         {
 
-             log = new LogHelper();
 
-             services = IOC.Resolve<IOpen5Code>();
 
-             email = IOC.Resolve<IEmail>();
 
-         }
 
-         
 
-         
 
-         
 
-         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 + currentLottery, ex.Message));
 
-             }
 
-             
 
-             context.JobDetail.JobDataMap["LatestQiHao"] = LatestQiHao;
 
-         }
 
-         
 
-         
 
-         
 
-         private void CheckingYesterdayTheLotteryData()
 
-         {
 
-             if (Config.SkipDate.Contains(CommonHelper.SCCSysDateTime.AddDays(-1).ToString("yyyyMMdd")))
 
-                 return; 
 
-             
 
-             FailedQiHaoList = services.GetYesterdayFailQQList(currentLottery, Config.TimesPerDay);
 
-             if (FailedQiHaoList.Count > 0)
 
-             {
 
-                 DoYesterdayFailedListByMainUrl();
 
-                 DoYesterdayFailedListByBackUrl();
 
-                 
 
-                 
 
-                 
 
-                 
 
-                 
 
-                 
 
-             }
 
-         }
 
-         
 
-         
 
-         
 
-         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 total = OpenList.Count;
 
-                 var getQiHao = string.Empty;
 
-                 for (var i = startQiNum; i <= newestQiNum; i++)
 
-                 {
 
-                     getQiHao = CommonHelper.GenerateTodayQiHaoYYMMDDQQ(i);
 
-                     var matchItem = OpenList.Where(R => R.Id.ToString() == getQiHao).FirstOrDefault();
 
-                     var step = 0;
 
-                     var nowQiHao = Convert.ToInt32(getQiHao);
 
-                     while (matchItem == null)
 
-                         if (step <= total)
 
-                         {
 
-                             nowQiHao++;
 
-                             step++;
 
-                             matchItem = OpenList.Where(R => R.Id.ToString() == nowQiHao.ToString()).FirstOrDefault();
 
-                         }
 
-                         else
 
-                         {
 
-                             matchItem = null;
 
-                             break;
 
-                         }
 
-                     if (matchItem != null && SaveRecord(matchItem))
 
-                     {
 
-                         
 
-                         log.Info(GetType(), CommonHelper.GetJobBackLogInfo(Config, getQiHao));
 
-                         LatestQiHao = getQiHao;
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         
 
-         
 
-         
 
-         private void DoTodayJobByMainUrl()
 
-         {
 
-             var OpenList = GetDocByMainUrl();
 
-             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 total = OpenList.Count;
 
-             
 
-             var getQiHao = string.Empty;
 
-             for (var i = startQiNum; i <= newestQiNum; i++)
 
-             {
 
-                 getQiHao = CommonHelper.GenerateTodayQiHaoYYMMDDQQ(i);
 
-                 var matchItem = OpenList.Where(R => R.Id.ToString() == getQiHao).FirstOrDefault();
 
-                 var step = 0;
 
-                 var nowQiHao = Convert.ToInt32(getQiHao);
 
-                 while (matchItem == null)
 
-                     if (step <= total)
 
-                     {
 
-                         nowQiHao++;
 
-                         step++;
 
-                         matchItem = OpenList.Where(R => R.Id.ToString() == nowQiHao.ToString()).FirstOrDefault();
 
-                     }
 
-                     else
 
-                     {
 
-                         matchItem = null;
 
-                         break;
 
-                     }
 
-                 if (matchItem != null && SaveRecord(matchItem))
 
-                 {
 
-                     
 
-                     log.Info(GetType(), CommonHelper.GetJobMainLogInfo(Config, getQiHao));
 
-                     LatestQiHao = getQiHao;
 
-                 }
 
-             }
 
-         }
 
-         
 
-         
 
-         
 
-         public void DoYesterdayFailedListByBackUrl()
 
-         {
 
-             if (!string.IsNullOrEmpty(Config.BackUrl) && FailedQiHaoList.Count > 0)
 
-             {
 
-                 var OpenList = GetDocByBackUrl(false);
 
-                 if (OpenList.Count == 0) return; 
 
-                 var SuccessList = new List<string>();
 
-                 var total = OpenList.Count;
 
-                 foreach (var failedQiHao in FailedQiHaoList)
 
-                 {
 
-                     var matchItem = OpenList.Where(R => R.Id.ToString() == failedQiHao).FirstOrDefault();
 
-                     var step = 0;
 
-                     var nowQiHao = Convert.ToInt32(failedQiHao);
 
-                     while (matchItem == null)
 
-                         if (step <= total)
 
-                         {
 
-                             nowQiHao++;
 
-                             step++;
 
-                             matchItem = OpenList.Where(R => R.Id.ToString() == nowQiHao.ToString()).FirstOrDefault();
 
-                         }
 
-                         else
 
-                         {
 
-                             matchItem = null;
 
-                             break;
 
-                         }
 
-                     if (matchItem != null && SaveRecord(matchItem))
 
-                     {
 
-                         
 
-                         log.Info(GetType(), CommonHelper.GetJobBackLogInfo(Config, failedQiHao));
 
-                         SuccessList.Add(failedQiHao);
 
-                     }
 
-                 }
 
-                 foreach (var successQiHao in SuccessList) FailedQiHaoList.Remove(successQiHao);
 
-             }
 
-         }
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         private void DoYesterdayFailedListByMainUrl()
 
-         {
 
-             var OpenList = GetDocByMainUrl(false);
 
-             if (OpenList.Count == 0) return; 
 
-             var SuccessList = new List<string>();
 
-             var total = OpenList.Count;
 
-             foreach (var failedQiHao in FailedQiHaoList)
 
-             {
 
-                 var matchItem = OpenList.Where(R => R.Id.ToString() == failedQiHao).FirstOrDefault();
 
-                 var step = 0;
 
-                 var nowQiHao = Convert.ToInt32(failedQiHao);
 
-                 while (matchItem == null)
 
-                     if (step <= total)
 
-                     {
 
-                         nowQiHao++;
 
-                         step++;
 
-                         matchItem = OpenList.Where(R => R.Id.ToString() == nowQiHao.ToString()).FirstOrDefault();
 
-                     }
 
-                     else
 
-                     {
 
-                         matchItem = null;
 
-                         break;
 
-                     }
 
-                 if (matchItem != null && SaveRecord(matchItem))
 
-                 {
 
-                     
 
-                     log.Info(GetType(), CommonHelper.GetJobMainLogInfo(Config, failedQiHao));
 
-                     SuccessList.Add(failedQiHao);
 
-                 }
 
-             }
 
-             foreach (var successQiHao in SuccessList) FailedQiHaoList.Remove(successQiHao);
 
-         }
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         private List<AH11X5Enitity> GetDocByMainUrl(bool IsToday = true)
 
-         {
 
-             var list = new List<AH11X5Enitity>();
 
-             try
 
-             {
 
-                 var time = DateTime.Now;
 
-                 var arg = new OpenCaiApiArg
 
-                 {
 
-                     code = EnumHelper.GetLotteryCode(SCCLottery.AnHui11x5),
 
-                     
 
-                     date = time.ToString("yyyy-MM-dd")
 
-                 };
 
-                 if (!IsToday) arg.date = time.AddDays(-1).ToString("yyyy-MM-dd");
 
-                 var data = OpenCaiApiServices.GetOpenCaiApiData(arg);
 
-                 if (data == null) return list;
 
-                 if (data.data != null)
 
-                 {
 
-                     if (data.data.Count == 0) return list;
 
-                     for (var i = 0; i < data.data.Count; i++)
 
-                     {
 
-                         var tmp = new AH11X5Enitity
 
-                         {
 
-                             Id = int.Parse(data.data[i].GetTermStr()),
 
-                             OpenCode = data.data[i].GetOpenCodeStr(),
 
-                             OpenTime = DateTime.Parse(data.data[i].opentime)
 
-                         };
 
-                         list.Add(tmp);
 
-                     }
 
-                     var checkDataHelper = new CheckDataHelper();
 
-                     if (services.GetListIn(currentLottery, IsToday) == null)
 
-                     {
 
-                         log.Warn(GetType(), string.Format("【{0}】昨天没有数据更新,请检查【{0}】。", Config.Area + currentLottery));
 
-                         return list;
 
-                     }
 
-                     var dbdata = services.GetListIn(currentLottery, IsToday)
 
-                         .ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr());
 
-                     checkDataHelper.CheckData(dbdata, list.ToDictionary(w => w.Id.ToString(), w => w.OpenCode),
 
-                         Config.Area, currentLottery);
 
-                 }
 
-             }
 
-             catch (Exception ee)
 
-             {
 
-                 log.Error(GetType(),
 
-                     string.Format("【{0}】通过主站点抓取开奖列表时发生错误,错误信息【{1}】", Config.Area + currentLottery, ee.Message));
 
-             }
 
-             return list;
 
-         }
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         private List<AH11X5Enitity> GetDocByBackUrl(bool IsToday = true)
 
-         {
 
-             var list = new List<AH11X5Enitity>();
 
-             try
 
-             {
 
-                 var day = DateTime.Now.ToString("yyyyMMdd");
 
-                 if (!IsToday) day = DateTime.Now.AddDays(-1).ToString("yyyyMMdd");
 
-                 var url = string.Format(Config.BackUrl, day);
 
-                 var HtmlResource = NetHelper.GetUrlResponse(url);
 
-                 if (HtmlResource == null) return list;
 
-                 var doc = new XmlDocument();
 
-                 doc.LoadXml(HtmlResource);
 
-                 var records = doc.SelectNodes("//row");
 
-                 if (records == null) return list;
 
-                 foreach (XmlNode xmlnode in records)
 
-                 {
 
-                     if (xmlnode.Attributes["expect"] == null ||
 
-                         string.IsNullOrWhiteSpace(xmlnode.Attributes["expect"].Value) ||
 
-                         xmlnode.Attributes["opencode"] == null ||
 
-                         string.IsNullOrWhiteSpace(xmlnode.Attributes["opencode"].Value)) continue;
 
-                     var num = xmlnode.Attributes["expect"].Value.Replace("-", "");
 
-                     var opencode = xmlnode.Attributes["opencode"].Value;
 
-                     var opentime = xmlnode.Attributes["opentime"].Value;
 
-                     var tmp = new AH11X5Enitity
 
-                     {
 
-                         Id = int.Parse(num),
 
-                         OpenCode = opencode,
 
-                         OpenTime = DateTime.Parse(opentime)
 
-                     };
 
-                     list.Add(tmp);
 
-                 }
 
-                 var checkDataHelper = new CheckDataHelper();
 
-                 var dbdata = services.GetListIn(currentLottery, IsToday)
 
-                     .ToDictionary(w => w.Term.ToString(), w => w.GetCodeStr());
 
-                 checkDataHelper.CheckData(dbdata, list.ToDictionary(w => w.Id.ToString(), w => w.OpenCode), Config.Area,
 
-                     currentLottery);
 
-             }
 
-             catch (Exception ee)
 
-             {
 
-                 log.Error(GetType(),
 
-                     string.Format("【{0}】通过副站点抓取开奖列表时发生错误,错误信息【{1}】", Config.Area + currentLottery, ee.Message));
 
-             }
 
-             return list;
 
-         }
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         private bool SaveRecord(AH11X5Enitity data)
 
-         {
 
-             var model = new OpenCode5Model();
 
-             model.Term = Convert.ToInt64(data.Id); 
 
-             var haoMaArray = data.OpenCode.Split(',');
 
-             model.OpenCode1 = Convert.ToInt32(haoMaArray[0]);
 
-             model.OpenCode2 = Convert.ToInt32(haoMaArray[1]);
 
-             model.OpenCode3 = Convert.ToInt32(haoMaArray[2]);
 
-             model.OpenCode4 = Convert.ToInt32(haoMaArray[3]);
 
-             model.OpenCode5 = Convert.ToInt32(haoMaArray[4]);
 
-             model.OpenTime = data.OpenTime;
 
-             if (services.AddOpen5Code(currentLottery, model))
 
-             {
 
-                 GetMaxPeriodNum((int)model.Term); 
 
-                 return true;
 
-             }
 
-             return false;
 
-         }
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         
 
-         public string GetPeriodsNumberToDay(DateTime time, bool IsToday = false)
 
-         {
 
-             if (!IsToday) return Config.TimesPerDay.ToString();
 
-             int hc = 0, mc = 0;
 
-             if (time.Hour >= Config.StartHour) 
 
-             {
 
-                 hc = (time.Hour - Config.StartHour) * 6; 
 
-                 mc = time.Minute / 10; 
 
-                 if (Config.StartMinute == 0) mc += 1;
 
-             }
 
-             return hc + mc >= 10 ? (hc + mc).ToString() : "0" + (hc + mc); 
 
-         }
 
-         
 
-         
 
-         
 
-         
 
-         public void GetMaxPeriodNum(int PeriodNum)
 
-         {
 
-             var lastqihao = 0;
 
-             int.TryParse(LatestQiHao, out lastqihao);
 
-             if (lastqihao < PeriodNum) LatestQiHao = PeriodNum.ToString();
 
-         }
 
-         #region Attribute
 
-         
 
-         
 
-         
 
-         private SCCConfig Config;
 
-         
 
-         
 
-         
 
-         private string LatestQiHao;
 
-         
 
-         
 
-         
 
-         private List<string> FailedQiHaoList;
 
-         
 
-         
 
-         
 
-         private readonly LogHelper log;
 
-         
 
-         
 
-         
 
-         private readonly IOpen5Code services;
 
-         
 
-         
 
-         
 
-         private SCCLottery currentLottery => SCCLottery.AnHui11x5;
 
-         
 
-         
 
-         
 
-         private IEmail email;
 
-         #endregion
 
-     }
 
-     
 
-     
 
-     
 
-     public class AH11X5Enitity
 
-     {
 
-         public int Id { get; set; }
 
-         public string OpenCode { get; set; }
 
-         public DateTime OpenTime { get; set; }
 
-     }
 
- }
 
 
  |