| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- using System;
- using System.Collections.Generic;
- using FCS.Common;
- using FCS.Crawler.Tools;
- using FCS.Interface;
- using FCS.Models;
- using HtmlAgilityPack;
- using Newtonsoft.Json;
- using Quartz;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Data.SqlClient;
- using System.Threading.Tasks;
- using System.Threading;
- using System.Diagnostics;
- namespace FCS.Crawler.ZCMatchRankingList
- {
- /// <summary>
- /// 积分排行榜
- /// </summary>
- public class RankingListJob : CommonJob, IJob
- {
- private List<F_Team> TeamList = new List<F_Team>();
- private List<DataItemDetail> DateItem = new List<DataItemDetail>();
- private List<F_IntegralRanking> RankingList = new List<F_IntegralRanking>();
- F_IntegralRanking g;
- public RankingListJob()
- {
- log = new LogHelper();
- services = IOC.Resolve<IDTOpenCode>();
- g = new F_IntegralRanking();
- }
- public void Execute(IJobExecutionContext context)
- {
- Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap);
- GetAll();
- }
- #region 更新数据
- /// <summary>
- /// 获取所有数据
- /// </summary>
- public void GetAll()
- {
- GetSqlString(GetAllEventUrl, "");
- }
- /// <summary>
- /// 更新数据
- /// </summary>
- /// <param name="Year"></param>
- public void Click(string Year = "")
- {
- CommonHelper.LogBD(typeof(RankingListJob), () =>
- {
- if (Year == "")
- {
- Year = DateTime.Now.Year.ToString();
- }
- var sql = string.Format(GetNewEventUrl, Year);
- GetSqlString(sql, Year);
- });
-
- }
- #endregion
- /// <summary>
- /// 解析数据
- /// </summary>
- /// <param name="sqlstring"></param>
- private void GetSqlString(string sqlstring, string Year)
- {
- TeamList = services.GetTeamList();
- var searchsql = "and Remark is not null ";
- if (Year != "")
- {
- searchsql += "and Season like '%" + Year + "%'";
- }
- var ds = services.Query<F_Grouping>(searchsql,"", "distinct EventId,Season,Remark").ToList();
- if (ds != null && ds.Count > 0)
- {
- //获取某赛事赛季的html ds.Tables[0].Rows.Count
- int max = ds.Count;
- int num = 0;
- ds.ForEach(async p =>
- {
- var url = p.Remark.ToString();
- var eventId = p.EventId.ToString();
- var season = p.Season.ToString();
- await Task.Run(() =>
- {
- if (!url.Contains("cup"))
- {
- GetRanking(url, eventId, season);
- }
- });
- lock (g)
- {
- num++;
- Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
- }
- });
- lock (g)
- {
- while (num < max)
- {
- Monitor.Wait(g);//等待
- }
- }
- Trace.WriteLine("获取RankingListJob 完结");
- try
- {
- if (Year != "" && services.Query<F_IntegralRanking>().ToList().Count() > 0)
- {
- services.Delete<F_IntegralRanking>(" and Season like '%" + Year + "%'");
- }
- services.SqlBulkCopyAdd<F_IntegralRanking>(RankingList);
- Trace.WriteLine("F_IntegralRanking更新完毕");
- }
- catch (Exception ex)
- {
- throw;
- }
- }
- }
- /// <summary>
- /// 读取积分榜信息
- /// </summary>
- /// <param name="url"></param>
- public bool GetRanking(string url, string eventId, string season)
- {
- if (url.Contains("wwaattssuunn"))
- {
- return false;
- }
- HtmlDocument doc = CommonHelper.GetHtml(url, new Dictionary<string, string>(), "", "", 10000, 100);
- //获取积分榜列表
- var TongJiListData = doc.DocumentNode.SelectNodes("//*[@class='tabs1_main_ul']");
- if (TongJiListData == null || TongJiListData.Count == 0) return false;
- DateItem = services.GetDataItem(DataItemDetailEnum.FootIntegralRankingType);
- //总榜
- var RankingAll = TongJiListData[0];
- Rankinga(RankingAll, eventId, season, FootIntegralRankingEnum.AllRanking);
- //主场
- if (TongJiListData.Count > 2)
- {
- var RankingMain = TongJiListData[1];
- Rankinga(RankingMain, eventId, season, FootIntegralRankingEnum.MainRanking);
- }
- //客场
- if (TongJiListData.Count > 3)
- {
- var RankingPassenger = TongJiListData[2];
- Rankinga(RankingPassenger, eventId, season, FootIntegralRankingEnum.PassengerRanking);
- }
- return true;
- }
- public void Rankinga(HtmlNode RankingAll, string eventId, string season, FootIntegralRankingEnum rankingEnum)
- {
- Task.Run(() =>
- {
- HtmlDocument doc1 = new HtmlDocument();
- doc1.LoadHtml(RankingAll.InnerHtml);
- var allmatchList = doc1.DocumentNode.SelectNodes("//table/tr");
- if (allmatchList == null || allmatchList.Count == 0) return;
- foreach (var allmatchItem in allmatchList)
- {
- try
- {
- HtmlDocument doc11 = new HtmlDocument();
- doc11.LoadHtml(allmatchItem.InnerHtml);
- var tdList = doc11.DocumentNode.SelectNodes("//td");
- if (tdList == null || tdList.Count == 0)
- {
- continue;
- }
- F_IntegralRanking f_IntegralRanking = new F_IntegralRanking();
- f_IntegralRanking.Id = Guid.NewGuid().ToString();
- f_IntegralRanking.EventId = eventId;
- f_IntegralRanking.Season = season;
- f_IntegralRanking.IntegralRankingType = DateItem.Where(o => o.ItemValue == ((int)rankingEnum).ToString()).Count() > 0 ? DateItem.Where(o => o.ItemValue == ((int)rankingEnum).ToString()).FirstOrDefault().Id : "";
- f_IntegralRanking.Sort = tdList.Count() > 1 ? tdList[0].InnerText.Trim() == null ? 0 : int.Parse(tdList[0].InnerText.Trim().ToString()) : 0;
- var TeamName = tdList.Count() > 2 ? tdList[1].InnerText.Trim().ToString() : "";
- var Team = TeamList.Where(o => o.Name == TeamName);
- f_IntegralRanking.TeamId = Team.Count() > 0 ? Team.FirstOrDefault().Id : TeamName;
- f_IntegralRanking.Game = tdList.Count() > 3 ? tdList[2].InnerText.Trim().ToString() : "";
- f_IntegralRanking.Win = tdList.Count() > 4 ? int.Parse(tdList[3].InnerText.Trim().ToString()) : 0;
- f_IntegralRanking.Flat = tdList.Count() > 5 ? int.Parse(tdList[4].InnerText.Trim().ToString()) : 0;
- f_IntegralRanking.Lose = tdList.Count() > 6 ? int.Parse(tdList[5].InnerText.Trim().ToString()) : 0;
- f_IntegralRanking.Score = tdList.Count() > 7 ? int.Parse(tdList[6].InnerText.Trim().ToString()) : 0;
- f_IntegralRanking.Loss = tdList.Count() > 8 ? int.Parse(tdList[7].InnerText.Trim().ToString()) : 0;
- f_IntegralRanking.NetScore = tdList.Count() > 9 ? int.Parse(tdList[8].InnerText.Trim().ToString()) : 0;
- f_IntegralRanking.ScoreAvg = tdList.Count() > 10 ? double.Parse(tdList[9].InnerText.Trim().ToString()) : 0;
- f_IntegralRanking.LossAvg = tdList.Count() > 11 ? double.Parse(tdList[10].InnerText.Trim().ToString()) : 0;
- f_IntegralRanking.WinRate = tdList.Count() > 12 ? double.Parse(tdList[11].InnerText.Trim().Replace("%", "").ToString()) / 100 : 0;
- f_IntegralRanking.FlatRate = tdList.Count() > 13 ? double.Parse(tdList[12].InnerText.Trim().Replace("%", "").ToString()) / 100 : 0;
- f_IntegralRanking.LoseRate = tdList.Count() > 14 ? double.Parse(tdList[13].InnerText.Trim().Replace("%", "").ToString()) / 100 : 0;
- f_IntegralRanking.Integral = tdList.Count() > 15 ? int.Parse(tdList[14].InnerText.Trim().ToString()) : 0;
- f_IntegralRanking.CreateDateTime = DateTime.Now;
- RankingList.Add(f_IntegralRanking);
- }
- catch (Exception ex)
- {
- throw;
- }
- }
- });
- }
- #region SQL语句
- /// <summary>
- /// 获取所有的赛事
- /// </summary>
- private static string GetAllEventUrl = @"select distinct EventId,Season,Remark from F_Grouping where Remark is not null";
- /// <summary>
- /// 获取最新两年的数据赛事
- /// </summary>
- private static string GetNewEventUrl = @"select distinct EventId,Season,Remark from F_Grouping where Remark is not null and Season like '%{0}%'";
- #endregion
- }
- }
|