using FCS.Common;
using FCS.Interface;
using FCS.Models;
using FCS.Models.DTO;
using FCS.Models.Entity;
using HtmlAgilityPack;
using Newtonsoft.Json;
using Quartz;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace FCS.Crawler.Basketball
{
///
/// 篮球联盟排名服务
///
public class B_LeagueRankingJob : CommonJob, IJob
{
private List LeagueRankingList = new List();
private List CBALeagueRankingList = new List();
private List DateItem = new List();
private List TeamList = new List();
B_LeagueRanking g;
private string cbaEventId = "";
private string nbaEventId = "";
public B_LeagueRankingJob()
{
log = new LogHelper();
services = IOC.Resolve();
g = new B_LeagueRanking();
cbaEventId = services.Query("and Name ='CBA赛事'", "").FirstOrDefault().Id;
nbaEventId = services.Query("and Name ='NBA赛事'", "").FirstOrDefault().Id;
}
public void Execute(IJobExecutionContext context)
{
Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap);
}
#region NBA
///
/// 获取所有数据 NBA
///
public void GetAll()
{
GetSqlString( "");
}
///
/// 更新数据NBA
///
///
public void Click(string Year = "")
{
if (Year == "")
{
Year = DateTime.Now.Year.ToString().Substring(2, 2);
}
GetSqlString( Year);
GetAll_CBA();
}
///
/// 解析数据
///
///
private void GetSqlString(string Year)
{
TeamList = services.Query().ToList();
var ds = services.Query("and EventId='"+nbaEventId+"' and Remark is not null", "", "distinct EventId,Season,Remark").ToList();
if (Year != "")
{
ds = services.Query(" and EventId='" + nbaEventId + "' and Remark is not null and Season like '%" + Year + "%'", "", "distinct EventId,Season,Remark").ToList();
}
int max = ds.Count;
int num = 0;
ds.ForEach(async p =>
{
await Task.Run(() =>
{
var url = p.Remark.ToString().Replace("saiAll.do", "pai.do");
var eventId = p.EventId;
var season = p.Season;
GetData(url, eventId, season);
});
lock (g)
{
num++;
Monitor.Pulse(g); //完成,通知等待队列,告知已完,执行下一个。
}
});
lock (g)
{
while (num < max)
{
Monitor.Wait(g);//等待
}
}
Trace.WriteLine("获取B_LeagueRanking 完结");
try
{
if (Year != "")
{
services.Delete("and EventId='" + nbaEventId + "' and Season like '%" + Year + "%'");
}
services.SqlBulkCopyAdd(LeagueRankingList);
}
catch (Exception ex)
{
throw;
}
}
///
/// 解析排行榜数据
///
///
///
///
private void GetData(string url, string eventId, string season)
{
HtmlParameterDTO dtomodel = new HtmlParameterDTO();
dtomodel.Url = url;
HtmlDocument doc = CommonHelper.GetHtmlHtmlDocument(dtomodel);
if (doc.DocumentNode.InnerHtml == "Termination" || doc.DocumentNode.InnerHtml == "" || doc.DocumentNode.SelectNodes("//*[@class='paiming']") == null)
{
return;
}
var team = doc.DocumentNode.SelectNodes("//*[@class='paiming']");
foreach (var item in team)
{
HtmlDocument itemdoc = new HtmlDocument();
itemdoc.LoadHtml(item.InnerHtml);
var trList = itemdoc.DocumentNode.SelectNodes("//table/tr").ToList();
var TypeName = "";
if (itemdoc.DocumentNode.InnerText.Contains("东部"))
{
TypeName = "东部排行";
}
else
{
TypeName = "西部排行";
}
trList.ForEach(p =>
{
if (!p.InnerText.Contains("