B_TeamStatisticsJob.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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_TeamStatisticsJob : CommonJob, IJob
  22. {
  23. private List<B_TeamStatistics> TeamStatisticsList = new List<B_TeamStatistics>();
  24. private List<DataItemDetail> DateItem = new List<DataItemDetail>();
  25. private List<B_Team> TeamList = new List<B_Team>();
  26. B_TeamStatistics g;
  27. private string cbaEventId = "";
  28. private string nbaEventId = "";
  29. public B_TeamStatisticsJob()
  30. {
  31. g = new B_TeamStatistics();
  32. cbaEventId = services.Query<B_Events>("and Name ='CBA赛事'", "").FirstOrDefault().Id;
  33. nbaEventId = services.Query<B_Events>("and Name ='NBA赛事'", "").FirstOrDefault().Id;
  34. }
  35. public void Execute(IJobExecutionContext context)
  36. {
  37. Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap);
  38. }
  39. #region 更新数据
  40. /// <summary>
  41. /// 获取所有数据
  42. /// </summary>
  43. public void GetAll()
  44. {
  45. GetSqlString("");
  46. }
  47. /// <summary>
  48. /// 更新数据
  49. /// </summary>
  50. /// <param name="Year"></param>
  51. public void Click(string Year = "")
  52. {
  53. if (Year == "")
  54. {
  55. Year = DateTime.Now.Year.ToString().Substring(2, 2); ;
  56. }
  57. GetSqlString(Year);
  58. }
  59. #endregion
  60. /// <summary>
  61. /// 解析数据
  62. /// </summary>
  63. /// <param name="sqlstring"></param>
  64. private void GetSqlString(string Year)
  65. {
  66. TeamList = services.Query<B_Team>().ToList();
  67. var dataItem = services.GetDataItem(DataItemDetailEnum.BasketballGameType);
  68. var ds = services.Query<B_Grouping>("and Remark is not null", "", "distinct EventId,Season,Remark").ToList();
  69. if (Year != "")
  70. {
  71. ds = services.Query<B_Grouping>("and Remark is not null and Season like '%" + Year + "%'", "", "distinct EventId,Season,Remark").ToList();
  72. }
  73. int max = ds.Count;
  74. int num = 0;
  75. ds.ForEach(async p =>
  76. {
  77. await Task.Run(() =>
  78. {
  79. var eventId = p.EventId;
  80. var season = p.Season;
  81. var url = p.Remark.ToString().Replace("saiAll.do", "1/teamStatistics.do");
  82. GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "1").First().Id.ToString());
  83. url = p.Remark.ToString().Replace("saiAll.do", "2/teamStatistics.do");
  84. GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "2").First().Id.ToString());
  85. url = p.Remark.ToString().Replace("saiAll.do", "3/teamStatistics.do");
  86. GetData(url, eventId, season, dataItem.Where(o => o.ItemValue == "3").First().Id.ToString());
  87. });
  88. lock (g)
  89. {
  90. num++;
  91. Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
  92. }
  93. });
  94. lock (g)
  95. {
  96. while (num < max)
  97. {
  98. Monitor.Wait(g);//等待
  99. }
  100. }
  101. Trace.WriteLine("获取GoalSingleDbListJob 完结");
  102. try
  103. {
  104. if (Year != "")
  105. {
  106. services.Delete<B_TeamStatistics>("and EventId='" + nbaEventId + "' and Season like '%" + Year + "%'");
  107. }
  108. services.SqlBulkCopyAdd<B_TeamStatistics>(TeamStatisticsList);
  109. Trace.WriteLine("B_TeamStatistics更新完毕");
  110. }
  111. catch (Exception ex)
  112. {
  113. throw;
  114. }
  115. }
  116. /// <summary>
  117. /// 解析排行榜数据
  118. /// </summary>
  119. /// <param name="url"></param>
  120. /// <param name="eventId"></param>
  121. /// <param name="season"></param>
  122. private void GetData(string url, string eventId, string season, string gameType)
  123. {
  124. HtmlParameterDTO dtomodel = new HtmlParameterDTO();
  125. dtomodel.Url = url;
  126. HtmlDocument doc = CommonHelper.GetHtmlHtmlDocument(dtomodel);
  127. if (doc.DocumentNode.InnerHtml == "Termination" || doc.DocumentNode.InnerHtml == "" || doc.DocumentNode.SelectNodes("//*[@class='paiming']") == null)
  128. {
  129. return;
  130. }
  131. var team = doc.DocumentNode.SelectNodes("//*[@class='paiming']").First();
  132. HtmlDocument itemdoc = new HtmlDocument();
  133. itemdoc.LoadHtml(team.InnerHtml);
  134. var trList = itemdoc.DocumentNode.SelectNodes("//table/tr").ToList();
  135. trList.ForEach(p =>
  136. {
  137. if (!p.InnerHtml.Contains("<th"))
  138. {
  139. HtmlDocument trdoc = new HtmlDocument();
  140. trdoc.LoadHtml(p.InnerHtml);
  141. var tdList = trdoc.DocumentNode.InnerHtml.Contains("td") ? trdoc.DocumentNode.SelectNodes("//td").ToList() : null;
  142. if (tdList != null && tdList.Count() > 1)
  143. {
  144. B_TeamStatistics teamStatistics = new B_TeamStatistics();
  145. teamStatistics.Id = Guid.NewGuid().ToString();
  146. teamStatistics.TeamId = TeamList.Where(o => o.Name == tdList[0].InnerText.Trim().ToString()).Count() > 0 ? TeamList.Where(o => o.Name == tdList[0].InnerText.Trim().ToString()).FirstOrDefault().Id : "";
  147. teamStatistics.EventId = eventId;
  148. teamStatistics.Season = season;
  149. teamStatistics.GameType = gameType;
  150. teamStatistics.Sum = int.Parse(tdList[1].InnerText.Trim().ToString());
  151. teamStatistics.ScoreAvg = tdList[2].InnerText.Trim().ToString();
  152. teamStatistics.LossAvg = tdList[3].InnerText.Trim().ToString();
  153. teamStatistics.ShootingHitRate = tdList[4].InnerText.Trim().ToString();
  154. teamStatistics.TrisectionHitRate = tdList[5].InnerText.Trim().ToString();
  155. teamStatistics.PenaltyKickHitRate = tdList[6].InnerText.Trim().ToString();
  156. teamStatistics.AvgBasketball = tdList[7].InnerText.Trim().ToString();
  157. teamStatistics.AvgAssists = tdList[8].InnerText.Trim().ToString();
  158. teamStatistics.AvgBlocks = tdList[9].InnerText.Trim().ToString();
  159. teamStatistics.AvgSteals = tdList[10].InnerText.Trim().ToString();
  160. teamStatistics.AvgMiss = tdList[11].InnerText.Trim().ToString();
  161. teamStatistics.AvgFoul = tdList[12].InnerText.Trim().ToString();
  162. TeamStatisticsList.Add(teamStatistics);
  163. }
  164. }
  165. });
  166. }
  167. }
  168. }