PlayersGameDataJob.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Diagnostics;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. using FCS.Common;
  10. using FCS.Interface;
  11. using FCS.Models;
  12. using HtmlAgilityPack;
  13. using Quartz;
  14. namespace FCS.Crawler.PlayersGameData
  15. {
  16. class PlayersGameDataJob : CommonJob, IJob
  17. {
  18. public PlayersGameDataJob()
  19. {
  20. log = new LogHelper();
  21. services = IOC.Resolve<IDTOpenCode>();
  22. }
  23. public void Execute(IJobExecutionContext context)
  24. {
  25. //Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap);
  26. // Click();
  27. }
  28. /// <summary>
  29. /// 跟新服务
  30. /// </summary>
  31. public void Click()
  32. {
  33. playerslist = services.Query<F_Players>().ToList();
  34. teamlist = services.Query<F_Team>().ToList();
  35. eventlist = services.Query<F_Events>().ToList();
  36. int num = 0;
  37. int max = playerslist.Count;
  38. playerslist.ForEach(async p =>
  39. {
  40. await Task.Run(() =>
  41. {
  42. Trace.WriteLine("获取球员数据 开始:" + playerslist.IndexOf(p));
  43. Getbjop(p.Remark, p.Id);
  44. });
  45. lock (g)
  46. {
  47. num++;
  48. Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
  49. }
  50. });
  51. lock (g)
  52. {
  53. while (num != max)
  54. {
  55. Monitor.Wait(g);//等待
  56. }
  57. }
  58. num = 0;
  59. max = GameData.Count;
  60. GameData.ForEach(async p =>
  61. {
  62. await Task.Run(() =>
  63. {
  64. Trace.WriteLine("更换Id 开始:" + GameData.IndexOf(p));
  65. F_PlayersGameData pd = new F_PlayersGameData();
  66. pd = p;
  67. var events = eventlist.Where(a => a.Name.Trim() == p.EventName).FirstOrDefault();
  68. pd.EventId = events == null ? "" : events.Id;
  69. var team = teamlist.Where(a => a.Name.Trim() == p.HomeTeamName).FirstOrDefault();
  70. pd.HomeTeamId = team == null ? "" : team.Id;
  71. team = teamlist.Where(a => a.Name.Trim() == p.VisitingTeamName).FirstOrDefault();
  72. pd.VisitingTeamId = team == null ? "" : team.Id;
  73. lock (GameData_New)
  74. {
  75. GameData_New.Add(p);
  76. }
  77. });
  78. lock (g)
  79. {
  80. num++;
  81. Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
  82. }
  83. });
  84. lock (g)
  85. {
  86. while (num != max)
  87. {
  88. Monitor.Wait(g);//等待
  89. }
  90. }
  91. var sss = Convert.ToDateTime(DateTime.Now.ToShortDateString());
  92. //只插入当前天数的球员比赛数据
  93. GameData_New = GameData_New.Where(a => a.RaceTime > Convert.ToDateTime(DateTime.Now.AddDays(-30).ToShortDateString())).ToList();
  94. Trace.WriteLine("插入球员记录数据 开始:" + GameData_New.Count);
  95. if (GameData_New.Count > 0)
  96. services.SqlBulkCopyAdd(GameData_New);
  97. }
  98. F_PlayersGameData g = new F_PlayersGameData();
  99. public void DoMainUrl()
  100. {
  101. playerslist = services.Query<F_Players>().Take(70000).ToList();
  102. teamlist = services.Query<F_Team>().ToList();
  103. eventlist= services.Query<F_Events>().ToList();
  104. int num = 0;
  105. int max = playerslist.Count;
  106. playerslist.ForEach(async p =>
  107. {
  108. await Task.Run(() =>
  109. {
  110. Trace.WriteLine("获取球员数据 开始:" + playerslist.IndexOf(p));
  111. Getbjop(p.Remark,p.Id);
  112. });
  113. lock (g)
  114. {
  115. num++;
  116. Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
  117. }
  118. });
  119. lock (g)
  120. {
  121. while (num != max)
  122. {
  123. Monitor.Wait(g);//等待
  124. }
  125. }
  126. num = 0;
  127. max = GameData.Count;
  128. GameData.ForEach(async p =>
  129. {
  130. await Task.Run(() =>
  131. {
  132. Trace.WriteLine("更换Id 开始:" + GameData.IndexOf(p));
  133. F_PlayersGameData pd = new F_PlayersGameData();
  134. pd = p;
  135. var events = eventlist.Where(a => a.Name.Trim() == p.EventName).FirstOrDefault();
  136. pd.EventId = events==null?"": events.Id;
  137. var team = teamlist.Where(a => a.Name.Trim() == p.HomeTeamName).FirstOrDefault();
  138. pd.HomeTeamId = team == null ? "" : team.Id;
  139. team = teamlist.Where(a => a.Name.Trim() == p.VisitingTeamName).FirstOrDefault();
  140. pd.VisitingTeamId = team == null ? "" : team.Id;
  141. lock (GameData_New)
  142. {
  143. GameData_New.Add(p);
  144. }
  145. });
  146. lock (g)
  147. {
  148. num++;
  149. Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
  150. }
  151. });
  152. lock (g)
  153. {
  154. while (num != max)
  155. {
  156. Monitor.Wait(g);//等待
  157. }
  158. }
  159. Trace.WriteLine("插入球员记录数据 开始:" + GameData_New.Count);
  160. if (GameData_New.Count > 0)
  161. services.SqlBulkCopyAdd(GameData_New);
  162. DoMainUrl1();
  163. }
  164. public void DoMainUrl1()
  165. {
  166. GameData_New = new List<F_PlayersGameData>();
  167. playerslist = services.Query<F_Players>().Skip(70000).ToList();
  168. int num = 0;
  169. int max = playerslist.Count;
  170. playerslist.ForEach(async p =>
  171. {
  172. await Task.Run(() =>
  173. {
  174. Trace.WriteLine("获取球员数据 开始:" + playerslist.IndexOf(p));
  175. Getbjop(p.Remark, p.Id);
  176. });
  177. lock (g)
  178. {
  179. num++;
  180. Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
  181. }
  182. });
  183. lock (g)
  184. {
  185. while (num != max)
  186. {
  187. Monitor.Wait(g);//等待
  188. }
  189. }
  190. num = 0;
  191. max = GameData.Count;
  192. GameData.ForEach(async p =>
  193. {
  194. await Task.Run(() =>
  195. {
  196. Trace.WriteLine("更换Id 开始:" + GameData.IndexOf(p));
  197. F_PlayersGameData pd = new F_PlayersGameData();
  198. pd = p;
  199. var events = eventlist.Where(a => a.Name.Trim() == p.EventName).FirstOrDefault();
  200. pd.EventId = events == null ? "" : events.Id;
  201. var team = teamlist.Where(a => a.Name.Trim() == p.HomeTeamName).FirstOrDefault();
  202. pd.HomeTeamId = team == null ? "" : team.Id;
  203. team = teamlist.Where(a => a.Name.Trim() == p.VisitingTeamName).FirstOrDefault();
  204. pd.VisitingTeamId = team == null ? "" : team.Id;
  205. lock (GameData_New)
  206. {
  207. GameData_New.Add(p);
  208. }
  209. });
  210. lock (g)
  211. {
  212. num++;
  213. Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
  214. }
  215. });
  216. lock (g)
  217. {
  218. while (num != max)
  219. {
  220. Monitor.Wait(g);//等待
  221. }
  222. }
  223. Trace.WriteLine("插入球员记录数据 开始:" + GameData_New.Count);
  224. if (GameData_New.Count > 0)
  225. services.SqlBulkCopyAdd(GameData_New);
  226. }
  227. public static List<F_PlayersGameData> GameData = new List<F_PlayersGameData>();
  228. public static List<F_PlayersGameData> GameData_New = new List<F_PlayersGameData>();
  229. public static List<F_Players> playerslist = new List<F_Players>();
  230. public static List<F_Team> teamlist = new List<F_Team>();
  231. public static List<F_Events> eventlist = new List<F_Events>();
  232. public void Getbjop(string url,string Id)
  233. {
  234. url = url.Replace(":80", "");
  235. var htmlResource = CommonHelper.GetHtmlString(url, "足彩");
  236. HtmlDocument doc = new HtmlDocument();
  237. if (htmlResource == null)
  238. return;
  239. doc.LoadHtml(htmlResource);
  240. //球员集合
  241. HtmlNodeCollection sjHtml = doc.DocumentNode.SelectNodes("//*[@class='zstab']/tr");
  242. if (sjHtml == null)
  243. return;
  244. for (int i = 0; i < sjHtml.Count; i++)
  245. {
  246. if (i == 0 || i == sjHtml.Count - 1)
  247. continue;
  248. string p = sjHtml[i].InnerHtml;
  249. HtmlDocument doc1 = new HtmlDocument();
  250. doc1.LoadHtml(p);
  251. try
  252. {
  253. HtmlNodeCollection Htmltd = doc.DocumentNode.SelectNodes("//td");
  254. if (Htmltd == null)
  255. return;
  256. F_PlayersGameData data = new F_PlayersGameData();
  257. data.Id = CommonHelper.GetGuid();
  258. data.EventName = Htmltd[0].InnerText.Trim();
  259. data.EventId = Htmltd[0].InnerText.Trim();
  260. data.RaceTime = Convert.ToDateTime(Htmltd[1].InnerText.Trim());
  261. data.HomeTeamName = Htmltd[2].InnerText.Trim();
  262. data.VisitingTeamName = Htmltd[4].InnerText.Trim();
  263. data.HomeTeamId = Htmltd[2].InnerText.Trim();
  264. data.VisitingTeamId = Htmltd[4].InnerText.Trim();
  265. data.Score = Htmltd[3].InnerText.Trim();
  266. data.Goal = Convert.ToInt32(Htmltd[5].InnerText.Trim());
  267. data.PenaltyKick = Convert.ToInt32(Htmltd[6].InnerText.Trim());
  268. data.Oolong = Convert.ToInt32(Htmltd[7].InnerText.Trim());
  269. data.YellowCard = Convert.ToInt32(Htmltd[8].InnerText.Trim());
  270. data.RedCard = Convert.ToInt32(Htmltd[9].InnerText.Trim());
  271. data.Remark = url;
  272. data.PlayersId = Id;
  273. data.CreateDateTime = DateTime.Now;
  274. Insert(data);
  275. }
  276. catch (Exception e)
  277. {
  278. continue;
  279. }
  280. }
  281. }
  282. /// <summary>
  283. /// 插入数据
  284. /// </summary>
  285. /// <param name="data"></param>
  286. /// <param name="Id"></param>
  287. /// <param name="Season"></param>
  288. public void Insert(F_PlayersGameData data)
  289. {
  290. lock (GameData)
  291. {
  292. GameData.Add(data);
  293. }
  294. }
  295. }
  296. }