B_SizeBallRankingJob.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. using System;
  2. using FCS.Common;
  3. using FCS.Interface;
  4. using FCS.Models;
  5. using FCS.Models.Entity;
  6. using HtmlAgilityPack;
  7. using Quartz;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Diagnostics;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading;
  14. using System.Threading.Tasks;
  15. using FCS.Models.DTO;
  16. namespace FCS.Crawler.Basketball
  17. {
  18. /// <summary>
  19. /// 篮球大小盘路
  20. /// </summary>
  21. public class B_SizeBallRankingJob : CommonJob, IJob
  22. {
  23. private List<B_SizeBallRanking> SizeBallRankingList = new List<B_SizeBallRanking>();
  24. private List<DataItemDetail> DateItem = new List<DataItemDetail>();
  25. private List<B_Team> TeamList = new List<B_Team>();
  26. B_SizeBallRanking g;
  27. public B_SizeBallRankingJob()
  28. {
  29. g = new B_SizeBallRanking();
  30. }
  31. public void Execute(IJobExecutionContext context)
  32. {
  33. Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap);
  34. }
  35. #region 更新数据
  36. /// <summary>
  37. /// 获取所有数据
  38. /// </summary>
  39. public void GetAll()
  40. {
  41. GetSqlString("");
  42. }
  43. /// <summary>
  44. /// 更新数据
  45. /// </summary>
  46. /// <param name="Year"></param>
  47. public void Click(string Year = "")
  48. {
  49. if (Year == "")
  50. {
  51. Year = DateTime.Now.Year.ToString().Substring(2, 2); ;
  52. }
  53. GetSqlString(Year);
  54. }
  55. #endregion
  56. /// <summary>
  57. /// 解析数据
  58. /// </summary>
  59. /// <param name="sqlstring"></param>
  60. private void GetSqlString(string Year)
  61. {
  62. TeamList = services.Query<B_Team>().ToList();
  63. //SizeBallRankingList = services.Query<B_SizeBallRanking>().ToList();
  64. var dataItem = services.GetDataItem(DataItemDetailEnum.FootBallSizeBallType);
  65. var ds = services.Query<B_Grouping>("and Remark is not null", "", "distinct EventId,Season,Remark").ToList();
  66. if (Year != "")
  67. {
  68. ds = services.Query<B_Grouping>("and Remark is not null and Season like '%" + Year + "%'", "", "distinct EventId,Season,Remark").ToList();
  69. }
  70. int max = ds.Count;
  71. int num = 0;
  72. ds.ForEach(async p =>
  73. {
  74. await Task.Run(() =>
  75. {
  76. var eventId = p.EventId;
  77. var season = p.Season;
  78. var url = p.Remark.ToString().Replace("saiAll.do", "1/bigSmallBall.do");
  79. GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "1").First().Id.ToString());
  80. url = p.Remark.ToString().Replace("saiAll.do", "2/bigSmallBall.do");
  81. GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "2").First().Id.ToString());
  82. url = p.Remark.ToString().Replace("saiAll.do", "3/bigSmallBall.do");
  83. GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "3").First().Id.ToString());
  84. });
  85. lock (g)
  86. {
  87. num++;
  88. Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
  89. }
  90. });
  91. lock (g)
  92. {
  93. while (num < max)
  94. {
  95. Monitor.Wait(g);//等待
  96. }
  97. }
  98. Trace.WriteLine("获取B_SizeBallRanking 完结");
  99. try
  100. {
  101. if (Year != "")
  102. {
  103. services.Delete<B_SizeBallRanking>(" and Season like '%" + Year + "%'");
  104. }
  105. services.SqlBulkCopyAdd<B_SizeBallRanking>(SizeBallRankingList);
  106. Trace.WriteLine("B_SizeBallRanking更新完毕");
  107. }
  108. catch (Exception ex)
  109. {
  110. throw;
  111. }
  112. }
  113. /// <summary>
  114. /// 解析排行榜数据
  115. /// </summary>
  116. /// <param name="url"></param>
  117. /// <param name="eventId"></param>
  118. /// <param name="season"></param>
  119. private void GetData(string url, string eventId, string season, string sizeBallType)
  120. {
  121. HtmlParameterDTO dtomodel = new HtmlParameterDTO();
  122. dtomodel.Url = url;
  123. HtmlDocument doc = CommonHelper.GetHtmlHtmlDocument(dtomodel);
  124. if (doc.DocumentNode.InnerHtml == "Termination" || doc.DocumentNode.InnerHtml == "" || doc.DocumentNode.SelectNodes("//*[@class='paiming']") == null)
  125. {
  126. return;
  127. }
  128. var team = doc.DocumentNode.SelectNodes("//*[@class='paiming']").First();
  129. HtmlDocument itemdoc = new HtmlDocument();
  130. itemdoc.LoadHtml(team.InnerHtml);
  131. var trList = itemdoc.DocumentNode.SelectNodes("//table/tr").ToList();
  132. trList.ForEach(p =>
  133. {
  134. if (!p.InnerHtml.Contains("<th"))
  135. {
  136. HtmlDocument trdoc = new HtmlDocument();
  137. trdoc.LoadHtml(p.InnerHtml);
  138. var tdList = trdoc.DocumentNode.InnerHtml.Contains("td") ? trdoc.DocumentNode.SelectNodes("//td").ToList() : null;
  139. if (tdList != null && tdList.Count() > 1)
  140. {
  141. B_SizeBallRanking sizing = new B_SizeBallRanking();
  142. sizing.Id = Guid.NewGuid().ToString();
  143. sizing.Sort = int.Parse(tdList[0].InnerText.Trim().ToString());
  144. sizing.SizeBallType = sizeBallType;
  145. sizing.TeamId = TeamList.Where(o => o.Name == tdList[1].InnerText.Trim().ToString()).Count() > 0 ? TeamList.Where(o => o.Name == tdList[1].InnerText.Trim().ToString()).FirstOrDefault().Id : "";
  146. sizing.EventId = eventId;
  147. sizing.Season = season;
  148. sizing.Sum = int.Parse(tdList[2].InnerText.Trim().ToString());
  149. sizing.LargeNum = int.Parse(tdList[3].InnerText.Trim().ToString());
  150. sizing.GoNum = int.Parse(tdList[4].InnerText.Trim().ToString());
  151. sizing.SmallNum = int.Parse(tdList[5].InnerText.Trim().ToString());
  152. sizing.LargePercentage = tdList[6].InnerText.Trim().ToString();
  153. sizing.GoPercentage = tdList[7].InnerText.Trim().ToString();
  154. sizing.SmallPercentage = tdList[8].InnerText.Trim().ToString();
  155. SizeBallRankingList.Add(sizing);
  156. }
  157. }
  158. });
  159. }
  160. }
  161. }