123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- using System;
- using System.Collections.Generic;
- using System.Configuration;
- using System.Diagnostics;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading;
- using System.Threading.Tasks;
- using FCS.Common;
- using FCS.Crawler.ZCLotteryIP;
- using FCS.Interface;
- using FCS.Models;
- using HtmlAgilityPack;
- using Quartz;
- namespace FCS.Crawler.ZCLotteryGames
- {
- public class GamesDetailsJob : CommonJob, IJob
- {
- private Dictionary<string, int> detailDict;//比赛类型关系
- private List<DataItemDetail> detailType;//比赛类型
- private List<F_Players> playersList;//球员信息
- private static object locker = new object();
- private static List<F_GamesDetails> result = new List<F_GamesDetails>();
- private static string homeTeamName = "zhudui";
- public GamesDetailsJob()
- {
- //new IPJob().GetIP();
- playersList = services.Query<F_Players>().ToList();
- detailType = services.GetDataItem(DataItemDetailEnum.FootBallDetailType);
- // < !--1 : 入球, 2 : 红牌, 3 : 黄牌, 7 : 点球, 8 : 乌龙, 9 : 两黄变红1111111-- >
- detailDict = new Dictionary<string, int> {
- {"1",1 },{"3",5 },
- {"2",6 },{"7",2 },
- {"8",3 },{"9",6 },
- {"11",9 }
- };
- }
- public void Execute(IJobExecutionContext context)
- {
- Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap);
- Click();
- }
- public void Click(string mainUrl = "http://fenxi.zgzcw.com")
- {
- var gamesList = services.Query<F_Games>(@" AND DateName(year,GetDate())=datename(year,StartDateTime)
- AND DateName(month, GetDate()) = datename(month, StartDateTime)
- AND DateName(day, GetDate()) = datename(day, StartDateTime)").ToList();
- var gamesDetailsList = services.Query<F_GamesDetails>(@"
- AND DateName(year,GetDate())=datename(year,b.StartDateTime)
- AND DateName(month, GetDate()) = datename(month, b.StartDateTime)
- AND DateName(day, GetDate()) = datename(day, b.StartDateTime)
- ", @"JOIN F_Games b ON a.GameId =b.Id") ?? new List<F_GamesDetails>();
- threadCount = gamesList.Count;
- gamesList.ForEach(p =>
- {
- Analysis(p);
- });
- lock (locker)
- {
- while (finishcount != threadCount)
- {
- Thread.Sleep(5000);
- Monitor.Wait(locker);//等待
- }
- }
- var data = new List<F_GamesDetails>();
- var addList = (from a in result
- where !(from b in gamesDetailsList orderby b.GameId select b.GameId).Contains(a.GameId)
- orderby a.GameId
- select a).ToList();
- data = data.Concat(addList).ToList();
- addList = (from a in result
- where !(from b in gamesDetailsList where a.GameId == b.GameId orderby b.GameId select b.Minutes).Contains(a.Minutes)
- && (from b in gamesDetailsList where a.GameId == b.GameId orderby b.GameId select b.GameId).Contains(a.GameId)
- orderby a.GameId
- select a).ToList();
- data = data.Concat(addList).ToList();
- services.SqlBulkCopyAdd(data);
- }
- public void GetALL(string mainUrl = "http://fenxi.zgzcw.com")
- {
- var gamesList = services.Query<F_Games>("AND (Season LIKE '{0}%' or Season LIKE '%{1}%')".FormatMe(DateTime.Now.Year, DateTime.Now.AddYears(1).Year)).ToList();
- var result = new List<F_GamesDetails>();
- // var _gamesList = gamesList.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
- gamesList.ForEach(p =>
- {
- Analysis(p);
- });
- while (true)
- {
- if (CommonHelper.ThreadsFinsh())
- break;
- }
- services.SqlBulkCopyAdd(result);
- }
- private async Task Analysis(F_Games p, string mainUrl = "http://fenxi.zgzcw.com")
- {
- await Task.Run(() =>
- {
- try
- {
- var number = p.Remark.Split('/')[p.Remark.Split('/').ToList().Count - 2];
- var url = mainUrl + "/" + number + "/zrtj";
- Trace.WriteLine("URL:" + url);
- var doc = CommonHelper.GetHtml(url, "足彩");
- var jstj = doc.DocumentNode.SelectSingleNode(".//div[@class='jstj']");
- if (jstj != null)
- {
- var li = jstj.SelectNodes(".//li");
- if (li != null)
- foreach (HtmlNode item in li)
- {
- var liclassList = item.Attributes["data"].Value.Split(',').ToList();
- var detail = string.Empty;
- if (detailDict.ContainsKey(liclassList[1]))
- detail = detailType.Where(q => q.ItemValue == detailDict[liclassList[1]].ToString()).ToList()[0].Id;
- else
- continue;
-
- lock (locker)
- {
-
- result.Add(new F_GamesDetails
- {
- Id = CommonHelper.GetGuid().ToString(),
- CreateDateTime = DateTime.Now,
- GameId = p.Id,
- Minutes = int.Parse(liclassList[0]),
- // PlayerId = playerId,
- DetailType = detail,
- Describe = liclassList[2],
- IsHomeTeam = item.ParentNode.Attributes["class"].Value == homeTeamName ? true : false
- });
- }
- }
- }
- }
- finally
- {
- lock (locker)
- {
- finishcount++;
- Monitor.Pulse(locker); //完成,通知等待队列,告知已完,执行下一个。
- }
- }
- });
- }
- }
- }
|