AsianDishJob.cs 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422
  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 Newtonsoft.Json;
  14. using Newtonsoft.Json.Linq;
  15. using Quartz;
  16. namespace FCS.Crawler.ZCLotteryAsianDish
  17. {
  18. class AsianDishJob : CommonJob, IJob
  19. {
  20. public AsianDishJob()
  21. {
  22. log = new LogHelper();
  23. services = IOC.Resolve<IDTOpenCode>();
  24. }
  25. public void Execute(IJobExecutionContext context)
  26. {
  27. //Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap);
  28. // Click();
  29. }
  30. private static List<int> listCuringint = new List<int>();
  31. private static List<int> listDetailint = new List<int>();
  32. private static List<int> listAnalysisint = new List<int>();
  33. private static List<string> listGameId = new List<string>();
  34. private static List<F_AsianDish> listDetailId = new List<F_AsianDish>();
  35. public void Click(List<F_Games> glist, List<F_Games> listxg)
  36. {
  37. try
  38. {
  39. // Getbjop_new("http://fenxi.zgzcw.com/2435832/ypdb", null);
  40. string Season = DateTime.Now.ToString("yyyy");
  41. Gamelistq = glist;
  42. teamlist = services.Query<F_Team>().ToList();
  43. int number = glist.Count;
  44. int page = number % 1000 == 0 ? number / 1000 : number / 1000 + 1;
  45. //要删除的
  46. //插入之前 获取要删除的旧数据的所有PK
  47. for (int i = 0; i < listxg.Count; i++)
  48. {
  49. listGameId.Add(listxg[i].Id);
  50. }
  51. if (listGameId.Count > 0)
  52. {
  53. var query1 = services.Query<F_AsianDish>(" and GameId in ('" + string.Join("','", listGameId) + "') and ChangeDateTime>'" + Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd")).ToString("yyyy-MM-dd HH:mm:ss.fff") + "'") == null ? new List<F_AsianDish>() : services.Query<F_AsianDish>(" and GameId in ('" + string.Join("','", listGameId) + "') and ChangeDateTime>'" + Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd")).ToString("yyyy-MM-dd HH:mm:ss.fff") + "'").ToList();
  54. for (int i = 0; i < query1.Count; i++)
  55. {
  56. listDetailint.Add(query1[i].PK);
  57. }
  58. if (listDetailint.Count > 0)
  59. {
  60. var query2 = services.Query<F_AsianDishCuring>(" and GameId in ('" + string.Join("','", listGameId) + "')") == null ? new List<F_AsianDishCuring>() : services.Query<F_AsianDishCuring>(" and GameId in ('" + string.Join("','", listGameId) + "')").ToList();
  61. for (int i = 0; i < query2.Count; i++)
  62. {
  63. listCuringint.Add(query2[i].PK);
  64. }
  65. var query3 = services.Query<F_CuringAnalysis>(" and GameId in ('" + string.Join("','", listGameId) + "') and CuringType='c02e910a438ee811af5a2c4d54d3f5a9'") == null ? new List<F_CuringAnalysis>() : services.Query<F_CuringAnalysis>(" and GameId in ('" + string.Join("','", listGameId) + "') and CuringType='c02e910a438ee811af5a2c4d54d3f5a9'").ToList();
  66. for (int i = 0; i < query3.Count; i++)
  67. {
  68. listAnalysisint.Add(query3[i].PK);
  69. }
  70. }
  71. }
  72. for (int j = 0; j < page; j++)
  73. {
  74. Trace.WriteLine("第几个J 开始 AsianDishJob :" + (j + 1));
  75. Gamelist = Gamelistq.Skip(j * 1000).Take(1000).ToList();
  76. threadCount = Gamelist.Count;
  77. finishcount = 0;
  78. Gamelist.ForEach(async p =>
  79. {
  80. await Task.Run(() =>
  81. {
  82. // Trace.WriteLine("亚盘分析 开始:" + Gamelist.IndexOf(p));
  83. Getbjop_new(p.Remark, p);
  84. });
  85. lock (locker)
  86. {
  87. finishcount++;
  88. Monitor.Pulse(locker); //完成,通知等待队列,告知已完,执行下一个。
  89. }
  90. });
  91. lock (locker)
  92. {
  93. while (finishcount != threadCount)
  94. {
  95. Thread.Sleep(5000);
  96. Monitor.Wait(locker);//等待
  97. }
  98. }
  99. Companylist = Companylist.Distinct().ToList();
  100. InsertBankerCompany(Companylist);
  101. InsertBankerCompany1();
  102. {
  103. List<F_SeasonAnalysis> teamlist = new List<F_SeasonAnalysis>();
  104. try
  105. {
  106. teamlist = services.Query<F_SeasonAnalysis>().ToList();
  107. }
  108. catch (Exception e)
  109. {
  110. }
  111. salist = salist.Distinct().ToList();
  112. List<F_SeasonAnalysis> salist1 = salist.Where((x, i) => salist.FindIndex(z => z.TeamId == x.TeamId) == i).ToList();//Lambda表达式去重
  113. List<F_SeasonAnalysis> salist2 = new List<F_SeasonAnalysis>();
  114. foreach (var item in salist1)
  115. {
  116. if (teamlist.Where(a => a.TeamId == item.TeamId).ToList().Count == 0)
  117. salist2.Add(item);
  118. }
  119. Trace.WriteLine("插入赛季分析数据 开始:" + salist2.Count);
  120. if (salist2.Count != 0)
  121. services.SqlBulkCopyAdd(salist2);
  122. }
  123. var listbk = services.Query<BankerCompany>().ToList();
  124. Thread.Sleep(1000);
  125. var oclist_1 = oclist;
  126. oclist = new List<F_AsianDishCuring>();
  127. oclist_1 = oclist_1.Where(a => a != null).ToList();
  128. foreach (var item in oclist_1)
  129. {
  130. F_AsianDishCuring oc_new = new F_AsianDishCuring();
  131. if (item != null)
  132. {
  133. oc_new = item;
  134. oc_new.BankerCompanyId = listbk.Where(a => a.Name == item.BankerCompanyId).FirstOrDefault() == null ? "" : listbk.Where(a => a.Name == item.BankerCompanyId).FirstOrDefault().Id;
  135. //oc_new.BankerCompanyId = listbk.Where(a => a.Name == item.BankerCompanyId).FirstOrDefault().Id;
  136. lock (oclist_new)
  137. {
  138. oclist_new.Add(oc_new);
  139. }
  140. }
  141. }
  142. Thread.Sleep(1000);
  143. var csalist_1 = csalist;
  144. csalist = new List<F_AsianDish>();
  145. csalist_1 = csalist_1.Where(a => a != null).ToList();
  146. foreach (var item in csalist_1)
  147. {
  148. F_AsianDish cp = new F_AsianDish();
  149. cp = item;
  150. lock (listbk)
  151. {
  152. cp.BankerCompanyId = listbk.Where(a => a.Name == item.BankerCompanyId).FirstOrDefault() == null ? "" : listbk.Where(a => a.Name == item.BankerCompanyId).FirstOrDefault().Id;
  153. // cp.BankerCompanyId = listbk.Where(a => a.Name == item.BankerCompanyId).FirstOrDefault().Id;
  154. }
  155. lock (oclist_new)
  156. {
  157. csalist_new.Add(cp);
  158. }
  159. }
  160. }
  161. {
  162. List<F_CuringAnalysis> calist1 = calist.Where((x, i) => calist.FindIndex(z => z.GameId == x.GameId && z.CuringAnalysisType == x.CuringAnalysisType) == i).ToList();//Lambda表达式去重
  163. Trace.WriteLine("插入亚盘固化数据 开始:" + oclist_new.Count);
  164. if (oclist_new.Count > 0)
  165. services.SqlBulkCopyAdd(oclist_new);
  166. //Trace.WriteLine("插入亚盘详情数据 开始:" + csalist_new.Count);
  167. //if (csalist_new.Count > 0)
  168. // services.SqlBulkCopyAdd(csalist_new);
  169. Trace.WriteLine("插入固化分析数据 开始:" + calist1.Count);
  170. if (calist1.Count > 0)
  171. services.SqlBulkCopyAdd(calist1);
  172. var list_com = new List<F_AsianDish>();
  173. foreach (var item in Gamelistq)
  174. {
  175. var count = listDetailId.Where(a => a.GameId == item.Id).ToList().Count;
  176. var count_new = csalist_new.Where(a => a.GameId == item.Id).ToList().Count;
  177. if (count_new == 0 && count == 0)
  178. continue;
  179. if (count < count_new)
  180. {
  181. list_com.AddRange(csalist_new.Where(a => a.GameId == item.Id).ToList());
  182. }
  183. else
  184. {
  185. List<F_AsianDish> intlist = new List<F_AsianDish>();
  186. foreach (var item3 in listDetailId.Where(a => a.GameId == item.Id).ToList())
  187. {
  188. var items = item3;
  189. items.PK = 0;
  190. intlist.Add(items);
  191. }
  192. list_com.AddRange(intlist);
  193. }
  194. }
  195. Trace.WriteLine("插入亚盘详情数据 开始:" + list_com.Count);
  196. if (csalist_new.Count > 0)
  197. services.SqlBulkCopyAdd(list_com);
  198. urllist = new List<string>();
  199. urllist1 = new List<string>();
  200. Companylist = new List<string>();//所有公司
  201. bclist = new List<BankerCompany>();
  202. bcrlist = new List<BankerCompanyRelation>();
  203. calist = new List<F_CuringAnalysis>();
  204. salist = new List<F_SeasonAnalysis>();
  205. oclist = new List<F_AsianDishCuring>();
  206. oclist_new = new List<F_AsianDishCuring>();
  207. csalist = new List<F_AsianDish>();
  208. csalist_new = new List<F_AsianDish>();
  209. }
  210. Trace.WriteLine("删除数据 F_CuringAnalysis 开始:" + listAnalysisint.Count);
  211. if (listAnalysisint.Count > 0)
  212. services.Delete<F_CuringAnalysis>(" and PK in (" + string.Join(",", listAnalysisint) + ")");
  213. Trace.WriteLine("删除数据 F_CuringAnalysis 结束:" + listAnalysisint.Count);
  214. Trace.WriteLine("删除数据 F_AsianDish 初始数据 开始:" + listDetailint.Count);
  215. // if (listDetailint.Count > 0)
  216. // services.Delete<F_AsianDish>(" and PK in (" + string.Join(",", listDetailint) + ")");
  217. if (listDetailint.Count > 0)
  218. {
  219. if (listDetailint.Count > 1000)
  220. {
  221. int pages = listDetailint.Count % 1000 == 0 ? listDetailint.Count / 1000 : listDetailint.Count / 1000 + 1;
  222. for (int i = 0; i < pages; i++)
  223. {
  224. var listDetailint1 = listDetailint.Skip(i * 1000).Take(1000).ToList();
  225. services.Delete<F_AsianDish>(" and PK in (" + string.Join(",", listDetailint1) + ")");
  226. Trace.WriteLine("删除数据 F_AsianDish 结束中:" + listDetailint1.Count);
  227. }
  228. }
  229. else
  230. {
  231. services.Delete<F_AsianDish>(" and PK in (" + string.Join(",", listCuringint) + ")");
  232. }
  233. }
  234. Trace.WriteLine("删除数据 F_AsianDish 初始数据 结束:" + listDetailint.Count);
  235. Trace.WriteLine("删除数据 F_AsianDishCuring 开始:" + listCuringint.Count);
  236. if (listCuringint.Count > 0)
  237. services.Delete<F_AsianDishCuring>(" and PK in (" + string.Join(",", listCuringint) + ")");
  238. Trace.WriteLine("删除数据 F_AsianDishCuring 结束:" + listCuringint.Count);
  239. Gamelistq = new List<F_Games>();
  240. teamlist = new List<F_Team>();
  241. }
  242. catch (Exception e)
  243. {
  244. Click(glist, listxg);
  245. }
  246. }
  247. public void DoMainUrl()
  248. {
  249. teamlist = services.Query<F_Team>().ToList();
  250. Gamelistq = services.Query<F_Games>().ToList();
  251. int number = Gamelistq.Count;
  252. int page = number % 100 == 0 ? number / 100 : number / 100 + 1;
  253. ThreadPool.SetMinThreads(1, 1);
  254. ThreadPool.SetMaxThreads(300, 300);
  255. for (int j = 788; j < page; j++)
  256. {
  257. Trace.WriteLine("第几个J 开始:" + (j + 1));
  258. Gamelist = Gamelistq.Skip(j * 100).Take(100).ToList();
  259. Gamelist.ForEach(p =>
  260. {
  261. Task.Run(() =>
  262. {
  263. Trace.WriteLine("亚盘分析 开始:" + Gamelist.IndexOf(p));
  264. Getbjop(p.Remark, p);
  265. });
  266. });
  267. while (true)
  268. {
  269. if (CommonHelper.ThreadsFinsh())
  270. break;
  271. }
  272. Companylist = Companylist.Distinct().ToList();
  273. InsertBankerCompany(Companylist);
  274. InsertBankerCompany1();
  275. {
  276. List<F_SeasonAnalysis> teamlist = new List<F_SeasonAnalysis>();
  277. try
  278. {
  279. teamlist = services.Query<F_SeasonAnalysis>().ToList();
  280. }
  281. catch (Exception e)
  282. {
  283. }
  284. salist = salist.Distinct().ToList();
  285. List<F_SeasonAnalysis> salist1 = salist.Where((x, i) => salist.FindIndex(z => z.TeamId == x.TeamId) == i).ToList();//Lambda表达式去重
  286. List<F_SeasonAnalysis> salist2 = new List<F_SeasonAnalysis>();
  287. foreach (var item in salist1)
  288. {
  289. if (teamlist.Where(a => a.TeamId == item.TeamId).ToList().Count == 0)
  290. salist2.Add(item);
  291. }
  292. Trace.WriteLine("插入赛季分析数据 开始:" + salist2.Count);
  293. if (salist2.Count != 0)
  294. services.SqlBulkCopyAdd(salist2);
  295. }
  296. var listbk = services.Query<BankerCompany>().ToList();
  297. try
  298. {
  299. //oclist.ForEach(p =>
  300. //{
  301. // Task.Run(() =>
  302. // {
  303. // try
  304. // {
  305. // Trace.WriteLine("更换公司Id:");
  306. // F_AsianDishCuring oc_new = new F_AsianDishCuring();
  307. // if (p != null)
  308. // {
  309. // oc_new = p;
  310. // oc_new.BankerCompanyId = listbk.Where(a => a.Name == p.BankerCompanyId).FirstOrDefault().Id;
  311. // // Getbjop(p.Remark, p);
  312. // oclist_new.Add(oc_new);
  313. // }
  314. // }
  315. // catch (Exception e)
  316. // {
  317. // }
  318. // });
  319. //});
  320. Task[] processors = new Task[oclist.Count];
  321. for (int i = 0; i < oclist.Count; i++)
  322. {
  323. int processId = i;
  324. processors[i] = Task.Run(
  325. () => {
  326. try
  327. {
  328. Trace.WriteLine("更换公司Id:");
  329. F_AsianDishCuring oc_new = new F_AsianDishCuring();
  330. if (oclist[processId] != null)
  331. {
  332. oc_new = oclist[processId];
  333. oc_new.BankerCompanyId = listbk.Where(a => a.Name == oclist[processId].BankerCompanyId).FirstOrDefault().Id;
  334. // Getbjop(p.Remark, p);
  335. oclist_new.Add(oc_new);
  336. }
  337. }
  338. catch (Exception e)
  339. {
  340. }
  341. }
  342. );
  343. }
  344. }
  345. catch (Exception r)
  346. {
  347. }
  348. while (true)
  349. {
  350. if (CommonHelper.ThreadsFinsh())
  351. break;
  352. }
  353. csalist.ForEach(p =>
  354. {
  355. Task.Run(() =>
  356. {
  357. if (p != null)
  358. {
  359. lock (csalist)
  360. {
  361. Trace.WriteLine("更换公司Id:" + csalist.IndexOf(p));
  362. F_AsianDish cp = new F_AsianDish();
  363. cp = p;
  364. cp.BankerCompanyId = listbk.Where(a => a.Name == p.BankerCompanyId).FirstOrDefault().Id;
  365. // Getbjop(p.Remark, p);
  366. csalist_new.Add(cp);
  367. }
  368. }
  369. });
  370. });
  371. while (true)
  372. {
  373. if (CommonHelper.ThreadsFinsh())
  374. break;
  375. }
  376. List<F_CuringAnalysis> calist1 = calist.Where((x, i) => calist.FindIndex(z => z.GameId == x.GameId && z.CuringAnalysisType == x.CuringAnalysisType) == i).ToList();//Lambda表达式去重
  377. Trace.WriteLine("插入亚盘固化数据 开始:" + oclist_new.Count);
  378. if (oclist_new.Count > 0)
  379. services.SqlBulkCopyAdd(oclist_new);
  380. Trace.WriteLine("插入亚盘详情数据 开始:" + csalist_new.Count);
  381. if (csalist_new.Count > 0)
  382. services.SqlBulkCopyAdd(csalist_new);
  383. Trace.WriteLine("插入固化分析数据 开始:" + calist1.Count);
  384. if (calist1.Count > 0)
  385. services.SqlBulkCopyAdd(calist1);
  386. urllist = new List<string>();
  387. urllist1 = new List<string>();
  388. Companylist = new List<string>();//所有公司
  389. bclist = new List<BankerCompany>();
  390. bcrlist = new List<BankerCompanyRelation>();
  391. calist = new List<F_CuringAnalysis>();
  392. salist = new List<F_SeasonAnalysis>();
  393. oclist = new List<F_AsianDishCuring>();
  394. oclist_new = new List<F_AsianDishCuring>();
  395. csalist = new List<F_AsianDish>();
  396. csalist_new = new List<F_AsianDish>();
  397. }
  398. }
  399. public List<string> urllist = new List<string>();
  400. public List<string> urllist1 = new List<string>();
  401. public List<string> Companylist = new List<string>();//所有公司
  402. public static List<BankerCompany> bclist = new List<BankerCompany>();
  403. public static List<BankerCompanyRelation> bcrlist = new List<BankerCompanyRelation>();
  404. public static List<F_CuringAnalysis> calist = new List<F_CuringAnalysis>();
  405. public static List<F_Team> teamlist = new List<F_Team>();
  406. public static List<F_Games> Gamelist = new List<F_Games>();
  407. public static List<F_SeasonAnalysis> salist = new List<F_SeasonAnalysis>();
  408. public static List<F_AsianDishCuring> oclist = new List<F_AsianDishCuring>();
  409. public static List<F_AsianDishCuring> oclist_new = new List<F_AsianDishCuring>();
  410. public static List<F_AsianDish> csalist = new List<F_AsianDish>();
  411. public static List<F_Games> Gamelistq = new List<F_Games>();
  412. public static List<F_AsianDish> csalist_new = new List<F_AsianDish>();
  413. public void Getbjop(string url, F_Games game)
  414. {
  415. url = url.Replace(":80", "").Replace("ypdb", "ypdb");
  416. //class="bf-tab-02"
  417. // Trace.WriteLine("亚盘分析 开始:" + url);
  418. string yurl = url;
  419. ;
  420. var htmlResource = NetHelper.GetUrlResponse(url, Encoding.GetEncoding("utf-8"));
  421. HtmlDocument doc = new HtmlDocument();
  422. if (htmlResource == null)
  423. return;
  424. if (htmlResource.Contains("lg123456"))
  425. {
  426. urllist.Add(url + "|" + game.Id);
  427. return;
  428. }
  429. if (htmlResource.Contains("403 Forbidden"))
  430. {
  431. urllist.Add(url + "|" + game.Id);
  432. return;
  433. }
  434. doc.LoadHtml(htmlResource);
  435. //赔率集合
  436. HtmlNodeCollection bjopHtml = doc.DocumentNode.SelectNodes("//*[@class='bf-tab-02']/tr");
  437. if (bjopHtml == null)
  438. return;
  439. HtmlNodeCollection homenameHtml = doc.DocumentNode.SelectNodes("//*[@class='host-name']/a");
  440. var q1 = teamlist.Where(a => a.Name == homenameHtml[0].InnerText.Trim()).FirstOrDefault();
  441. string HomeTeamName = "";
  442. string data = "";
  443. if (q1 != null)
  444. {
  445. HomeTeamName = q1.Name;
  446. HtmlNodeCollection homepmHtml = doc.DocumentNode.SelectNodes("//*[@class='team-add-info-zd']");
  447. if (homepmHtml[0].InnerText.Trim().Contains("上赛季排名"))
  448. {
  449. data = "" + string.Join("|", homepmHtml[0].InnerText.Trim().Replace("上赛季排名:", "").Replace("本赛季排名", "").Split(':'));
  450. HtmlNodeCollection homedfHtml = doc.DocumentNode.SelectNodes("//*[@class='team-info-h']");
  451. data += "|" + homedfHtml[0].InnerText.Trim().Replace("主队:", "").Replace("胜", "|").Replace("平", "|").Replace("负", "|").Replace("分", "");
  452. }
  453. else {
  454. data = "" + homepmHtml[0].InnerText.Trim().Replace("FIFA排名:", "");
  455. HtmlNodeCollection homedfHtml = doc.DocumentNode.SelectNodes("//*[@class='team-info-h']");
  456. data += "|" + homedfHtml[0].InnerText.Trim().Replace("主队:", "").Replace("胜", "|").Replace("平", "|").Replace("负", "|").Replace("分", "").Replace("积分","");
  457. }
  458. InsertSeasonAnalysis(data, q1.Id, url, game.Season);
  459. }
  460. HtmlNodeCollection visitingnameHtml = doc.DocumentNode.SelectNodes("//*[@class='visit-name']/a");
  461. var q2 = teamlist.Where(a => a.Name == visitingnameHtml[0].InnerText.Trim()).FirstOrDefault();
  462. string VisitingTeamName = "";
  463. if (q2 != null)
  464. {
  465. VisitingTeamName = q2.Name;
  466. HtmlNodeCollection homepmkHtml = doc.DocumentNode.SelectNodes("//*[@class='team-add-info-kd']");
  467. if (homepmkHtml[0].InnerText.Trim().Contains("上赛季排名"))
  468. {
  469. data = "" + string.Join("|", homepmkHtml[0].InnerText.Trim().Replace("上赛季排名:", "").Replace("本赛季排名", "").Split(':'));
  470. HtmlNodeCollection homedfkHtml = doc.DocumentNode.SelectNodes("//*[@class='team-info-v']");
  471. data += "|" + homedfkHtml[0].InnerText.Trim().Replace("客队:", "").Replace("胜", "|").Replace("平", "|").Replace("负", "|").Replace("分", "");
  472. }
  473. else {
  474. data = "" + homepmkHtml[0].InnerText.Trim().Replace("FIFA排名:", "");
  475. HtmlNodeCollection homedfkHtml = doc.DocumentNode.SelectNodes("//*[@class='team-info-v']");
  476. data += "|" + homedfkHtml[0].InnerText.Trim().Replace("主队:", "").Replace("胜", "|").Replace("平", "|").Replace("负", "|").Replace("分", "").Replace("积分", "");
  477. }
  478. InsertSeasonAnalysis(data, q2.Id, url, game.Season);
  479. }
  480. List<string> listdetail = new List<string>();
  481. foreach (var item in bjopHtml)
  482. {
  483. HtmlDocument doc1 = new HtmlDocument();
  484. doc1.LoadHtml(item.InnerHtml);
  485. HtmlNodeCollection bjoptdHtml = doc1.DocumentNode.SelectNodes("//td");
  486. int i = 1;
  487. string shuju = "", nurl = "";
  488. foreach (var item1 in bjoptdHtml)
  489. {
  490. if (i == 2)
  491. {
  492. // shuju += item1.InnerText.Trim()+"|";
  493. Companylist.Add(item1.InnerText.Trim() + "|" + item1.Attributes["data"].Value);
  494. // Companylist = Companylist.Distinct().ToList();
  495. // InsertBankerCompany();
  496. }
  497. if (i == 6)
  498. {
  499. shuju += item1.InnerText.Trim() + "|";
  500. nurl = item1.SelectNodes("//a")[0].Attributes["href"].Value.Trim();
  501. }
  502. else if (i == 9)
  503. {
  504. HtmlDocument doc2 = new HtmlDocument();
  505. doc2.LoadHtml(item1.InnerHtml);
  506. HtmlNodeCollection timehtml = doc2.DocumentNode.SelectNodes("//em");
  507. shuju += item.Attributes["firsttime"].Value + "|";
  508. }
  509. else
  510. {
  511. shuju += item1.InnerText.Trim() + "|";
  512. }
  513. i++;
  514. }
  515. listdetail.Add(shuju + "@" + nurl);
  516. }
  517. listdetail.ForEach(p =>
  518. {
  519. Task.Run(() =>
  520. {
  521. try
  522. {
  523. var lis = p.Split('@')[0];
  524. //Trace.WriteLine("亚盘分析多线程 开始:" + listdetail.IndexOf(p));
  525. InsertOddsCuring(p.Split('@')[0], game.Id, p.Split('@')[1], game.StartDateTime.TryToDateTime(), game.HomeTeamId, game.VisitingTeamId, HomeTeamName, VisitingTeamName);
  526. }
  527. catch (Exception e)
  528. {
  529. Trace.WriteLine("亚盘分析多线程 报错:" + listdetail.IndexOf(p));
  530. }
  531. });
  532. });
  533. //class="bf-tab-03"
  534. HtmlNodeCollection bjopfxHtml = doc.DocumentNode.SelectNodes("//*[@class='bf-tab-03']/tr");
  535. foreach (var item in bjopfxHtml)
  536. {
  537. HtmlDocument doc1 = new HtmlDocument();
  538. doc1.LoadHtml(item.InnerHtml);
  539. HtmlNodeCollection bjopfxtdHtml = doc1.DocumentNode.SelectNodes("//td");
  540. if (bjopfxtdHtml.Count == 15)
  541. {
  542. string shuju = "";
  543. foreach (var item1 in bjopfxtdHtml)
  544. {
  545. shuju += item1.InnerText.Trim() + "|";
  546. }
  547. InsertCuringAnalysis(shuju, game.Id, url);
  548. }
  549. }
  550. }
  551. public void Getbjopdetail(string url, F_AsianDishCuring oc,string date)
  552. {
  553. try
  554. {
  555. //插入初始
  556. InsertCompensate_start(oc,date);
  557. //Trace.WriteLine("亚盘所有分析获取 开始:" + "http://fenxi.zgzcw.com" + url);
  558. string yurl = url;
  559. if (!url.Contains("http://fenxi.zgzcw.com"))
  560. url = "http://fenxi.zgzcw.com" + url.Replace(":80", "");
  561. var htmlResource = NetHelper.GetUrlResponse(url, Encoding.GetEncoding("utf-8"));
  562. HtmlDocument doc = new HtmlDocument();
  563. if (htmlResource == null)
  564. return;
  565. if (htmlResource.Contains("lg123456"))
  566. {
  567. urllist1.Add(url + "|" + oc.Id);
  568. return;
  569. }
  570. if (htmlResource.Contains("403 Forbidden"))
  571. {
  572. urllist1.Add(url + "|" + oc.Id);
  573. return;
  574. }
  575. doc.LoadHtml(htmlResource);
  576. HtmlNodeCollection detailHtml = doc.DocumentNode.SelectNodes("//*[@class='dxzkt-tab']/tr");
  577. if (detailHtml == null)
  578. return;
  579. int i = 0;
  580. foreach (var item in detailHtml)
  581. {
  582. if (i > 10)
  583. return;
  584. HtmlDocument doc1 = new HtmlDocument();
  585. doc1.LoadHtml(item.InnerHtml);
  586. HtmlNodeCollection bjopfxtdHtml = doc1.DocumentNode.SelectNodes("//td");
  587. if (bjopfxtdHtml != null)
  588. {
  589. if (bjopfxtdHtml.Count == 11)
  590. {
  591. string shuju = "";
  592. foreach (var item1 in bjopfxtdHtml)
  593. {
  594. shuju += item1.InnerText.Trim() + "|";
  595. }
  596. InsertCompensate(shuju, oc, url);
  597. }
  598. }
  599. i++;
  600. }
  601. }
  602. catch (Exception e)
  603. {
  604. Trace.WriteLine("报错开始 开始:" + "http://fenxi.zgzcw.com" + url);
  605. //Getbjopdetail(url, oc);
  606. }
  607. }
  608. /// <summary>
  609. /// 插入数据公司
  610. /// </summary>
  611. /// <param name="data"></param>
  612. /// <param name="Id"></param>
  613. /// <param name="Season"></param>
  614. public void InsertBankerCompany(List<string> Companylist)
  615. {
  616. List<BankerCompany> listbk = new List<BankerCompany>();
  617. try
  618. {
  619. listbk = services.Query<BankerCompany>().ToList();
  620. }
  621. catch (Exception e)
  622. {
  623. }
  624. foreach (var item in Companylist)
  625. {
  626. var query = item.Split('|');
  627. if (listbk.Where(a => a.Name == query[0]).ToList().Count > 0)
  628. continue;
  629. BankerCompany bc = new BankerCompany();
  630. bc.CreateDateTime = DateTime.Now;
  631. bc.Id = CommonHelper.GetGuid().ToString();
  632. bc.Name = query[0];
  633. bclist.Add(bc);
  634. }
  635. List<BankerCompany> bclist1 = bclist.Where((x, i) => bclist.FindIndex(z => z.Name == x.Name) == i).ToList();//Lambda表达式去重
  636. Trace.WriteLine("插入公司数据 开始:" + bclist1.Count);
  637. if (bclist1.Count != 0)
  638. services.SqlBulkCopyAdd(bclist1);
  639. }
  640. public void InsertBankerCompany1()
  641. {
  642. List<BankerCompany> listbk = new List<BankerCompany>();
  643. List<BankerCompanyRelation> listbkrs = new List<BankerCompanyRelation>();
  644. try
  645. {
  646. listbk = services.Query<BankerCompany>().ToList();
  647. listbkrs = services.Query<BankerCompanyRelation>().ToList();
  648. }
  649. catch (Exception e)
  650. {
  651. }
  652. foreach (var item in Companylist)
  653. {
  654. if (item.IsEmpty())
  655. continue;
  656. var query = item.Split('|');
  657. // bclist1
  658. if (listbk.Where(a => a.Name == query[0]).ToList().Count > 0)
  659. {
  660. var query2 = query[1].Split(',');
  661. foreach (var item1 in query2)
  662. {
  663. if (item.IsEmpty())
  664. continue;
  665. // if (!item1.Trim().IsEmpty())
  666. {
  667. BankerCompanyRelation bcr = new BankerCompanyRelation();
  668. bcr.BankerCompanyId = listbk.Where(a => a.Name == query[0]).FirstOrDefault().Id;
  669. bcr.BankerCompanyType = a4;
  670. bcr.Remark = "";
  671. bcr.Id = CommonHelper.GetGuid().ToString();
  672. bcr.CreateDateTime = DateTime.Now;
  673. if (listbkrs.Where(a => a.BankerCompanyType == bcr.BankerCompanyType && a.BankerCompanyId == bcr.BankerCompanyId).ToList().Count == 0)
  674. {
  675. bcrlist.Add(bcr);
  676. }
  677. }
  678. }
  679. }
  680. }
  681. Trace.WriteLine("插入公司分类数据 开始:" + bcrlist.Count);
  682. if (bcrlist.Count != 0)
  683. services.SqlBulkCopyAdd(bcrlist);
  684. }
  685. public static string a1 = "c06f47ca4f8ee811af5a2c4d54d3f5a9", a2 = "00ae03d14f8ee811af5a2c4d54d3f5a9", a3 = "30d122dc4f8ee811af5a2c4d54d3f5a9", a4 = "f08de6e64f8ee811af5a2c4d54d3f5a9", a5 = "904f40ef4f8ee811af5a2c4d54d3f5a9";
  686. //百家亚盘 c06f47ca4f8ee811af5a2c4d54d3f5a9
  687. //主流公司 00ae03d14f8ee811af5a2c4d54d3f5a9 0
  688. //交易公司 30d122dc4f8ee811af5a2c4d54d3f5a9 1
  689. //亚洲公司 f08de6e64f8ee811af5a2c4d54d3f5a9 2
  690. //普通公司 904f40ef4f8ee811af5a2c4d54d3f5a9 5
  691. /// <summary>
  692. /// 插入数据亚盘数据
  693. /// </summary>
  694. /// <param name="data"></param>
  695. /// <param name="Id"></param>
  696. /// <param name="Season"></param>
  697. public void InsertCompensate(string data, F_AsianDishCuring oc, string url)
  698. {
  699. try
  700. {
  701. var query = data.Replace("↓", "").Replace("↑", "").Split('|');
  702. F_AsianDish ca = new F_AsianDish();
  703. ca.BankerCompanyId = oc.BankerCompanyId;
  704. ca.ChangeDateTime = Convert.ToDateTime(query[1]);
  705. ca.AsianDishStatus = "913f7b12da6ae811ab3100ac6a4a134f";//及时盘口赔率 913f7b12da6ae811ab3100ac6a4a134f
  706. ca.CreateDateTime = DateTime.Now;
  707. ca.SOdd = Convert.ToDouble(query[3]);
  708. ca.POdd = -1;
  709. ca.Disc = Convert.ToString(query[4]) == null ? "" : Convert.ToString(query[4]);
  710. ca.FOdd = Convert.ToDouble(query[5]);
  711. ca.Remark = url;
  712. ca.Id = CommonHelper.GetGuid().ToString();
  713. ca.GameId = oc.GameId;
  714. csalist.Add(ca);
  715. }
  716. catch (Exception e)
  717. {
  718. }
  719. }
  720. /// <summary>
  721. /// 插入数据亚盘数据-初始
  722. /// </summary>
  723. /// <param name="data"></param>
  724. /// <param name="Id"></param>
  725. /// <param name="Season"></param>
  726. public void InsertCompensate_start(F_AsianDishCuring oc,string date)
  727. {
  728. try
  729. {
  730. F_AsianDish ca = new F_AsianDish();
  731. ca.BankerCompanyId = oc.BankerCompanyId;
  732. try
  733. {
  734. ca.ChangeDateTime = Convert.ToDateTime(date);
  735. }
  736. catch (Exception e)
  737. {
  738. ca.ChangeDateTime = Convert.ToDateTime("1999-01-01 00:01");
  739. }
  740. ca.AsianDishStatus = "903f7b12da6ae811ab3100ac6a4a134f";//初始盘口赔率 903f7b12da6ae811ab3100ac6a4a134f
  741. ca.CreateDateTime = DateTime.Now;
  742. ca.SOdd = Convert.ToDouble(oc.Init_SOdd);
  743. ca.POdd = -1;
  744. ca.Disc = oc.Init_DiscName;
  745. ca.FOdd = Convert.ToDouble(oc.Init_FOdd);
  746. ca.Remark = "";
  747. ca.Id = CommonHelper.GetGuid().ToString();
  748. ca.GameId = oc.GameId;
  749. csalist.Add(ca);
  750. }
  751. catch (Exception e)
  752. {
  753. }
  754. }
  755. /// <summary>
  756. /// 插入数据亚盘固化数据
  757. /// </summary>
  758. /// <param name="data"></param>
  759. /// <param name="Id"></param>
  760. /// <param name="Season"></param>
  761. public void InsertOddsCuring(string data, string Id, string url, DateTime date, string HomeTeamId, string VisitingTeamId, string HomeTeamName, string VisitingTeamName)
  762. {
  763. try
  764. {
  765. var query = data.Replace("↓", "").Replace("↑", "").Split('|');
  766. F_AsianDishCuring oc = new F_AsianDishCuring();
  767. oc.Init_SOdd = Convert.ToDouble(query[2]);
  768. oc.Init_DiscName = query[3];
  769. oc.Init_FOdd = Convert.ToDouble(query[4]);
  770. oc.Newest_SOdd = Convert.ToDouble(query[5]);
  771. oc.Newest_DiscName = query[6];
  772. oc.Newest_FOdd = Convert.ToDouble(query[7]);
  773. oc.Probability_SOdd = Convert.ToDouble(query[9]);
  774. oc.Probability_FOdd = Convert.ToDouble(query[10]);
  775. oc.Kelly_SOdd = Convert.ToDouble(query[11]);
  776. oc.Kelly_FOdd = Convert.ToDouble(query[12]);
  777. oc.Loss_Odd = Convert.ToDouble(query[13]);
  778. oc.BankerCompanyName = query[1];
  779. oc.BankerCompanyId = query[1];
  780. oc.Remark = url;
  781. oc.Id = CommonHelper.GetGuid().ToString();
  782. oc.CreateDateTime = DateTime.Now;
  783. oc.GameId = Id;
  784. try
  785. {
  786. oc.ChangeDateTime = Convert.ToDateTime(query[8]);
  787. }
  788. catch (Exception e)
  789. {
  790. oc.ChangeDateTime = DateTime.Now;
  791. }
  792. oc.HomeTeamId = HomeTeamId;
  793. oc.HomeTeamName = HomeTeamName;
  794. oc.VisitingTeamId = VisitingTeamId;
  795. oc.VisitingTeamName = VisitingTeamName;
  796. oclist.Add(oc);
  797. Getbjopdetail(url, oc,query[8]);
  798. }
  799. catch (Exception s)
  800. {
  801. }
  802. }
  803. public DateTime GetDate(string time, DateTime date)
  804. {
  805. time = time.Replace("更新时间:赛前", "").Replace("时", "|").Replace("分", "").Trim();
  806. var query = time.Split('|');
  807. if (query.Length == 1)
  808. date.AddMinutes(Convert.ToInt32(query[0]));
  809. if (query.Length == 2)
  810. date.AddMinutes(Convert.ToInt32(query[1])).AddHours(Convert.ToInt32(query[0]));
  811. return date;
  812. }
  813. /// <summary>
  814. /// 插入数据亚盘固化分析数据
  815. /// </summary>
  816. /// <param name="data"></param>
  817. /// <param name="Id"></param>
  818. /// <param name="Season"></param>
  819. public void InsertCuringAnalysis(string data, string Id, string url)
  820. {
  821. try
  822. {
  823. var query = data.Split('|');
  824. F_CuringAnalysis ca = new F_CuringAnalysis();
  825. ca.Remark = url;
  826. ca.Id = CommonHelper.GetGuid().ToString();
  827. ca.CreateDateTime = DateTime.Now;
  828. ca.CuringType = "c02e910a438ee811af5a2c4d54d3f5a9";
  829. if (query[1] == "平均值")
  830. ca.CuringAnalysisType = b1;
  831. if (query[1] == "最大值")
  832. ca.CuringAnalysisType = b2;
  833. if (query[1] == "最小值")
  834. ca.CuringAnalysisType = b3;
  835. ca.GameId = Id;
  836. ca.Init_SOdd = Convert.ToDouble(query[2]);
  837. ca.Init_POdd = -1;
  838. ca.Init_FOdd = Convert.ToDouble(query[4]);
  839. ca.Newest_SOdd = Convert.ToDouble(query[5]);
  840. ca.Newest_POdd = -1;
  841. ca.Newest_FOdd = Convert.ToDouble(query[7]);
  842. ca.Probability_SOdd = Convert.ToDouble(query[9]);
  843. ca.Probability_POdd = -1;
  844. ca.Probability_FOdd = Convert.ToDouble(query[10]);
  845. ca.Kelly_SOdd = Convert.ToDouble(query[11]);
  846. ca.Kelly_POdd = -1;
  847. ca.Kelly_FOdd = Convert.ToDouble(query[12]);
  848. ca.Loss_Odd = -1;
  849. calist.Add(ca);
  850. }
  851. catch (Exception e)
  852. {
  853. }
  854. }
  855. //public static string b1 = "c06f47ca4f8ee811af5a2c4d54d3f5a9", b2 = "00ae03d14f8ee811af5a2c4d54d3f5a9", b3 = "30d122dc4f8ee811af5a2c4d54d3f5a9";
  856. public static string b1 = "b1b112fa278ee811a04200ac6a4a134f", b2 = "b2b112fa278ee811a04200ac6a4a134f", b3 = "b1bf8c08288ee811a04200ac6a4a134f";
  857. //平均值 b1b112fa278ee811a04200ac6a4a134f
  858. //最小值 b2b112fa278ee811a04200ac6a4a134f
  859. //最大值 b1bf8c08288ee811a04200ac6a4a134f
  860. /// <summary>
  861. /// 插入数据赛季分析表
  862. /// </summary>
  863. /// <param name="data"></param>
  864. /// <param name="Id"></param>
  865. /// <param name="Season"></param>
  866. public void InsertSeasonAnalysis(string data, string Id, string url, string Season)
  867. {
  868. // List<F_SeasonAnalysis> salist1 = salist;
  869. //if (salist1.Where(a => a.Id == Id).ToList().Count > 0)
  870. //return;
  871. var query = data.Split('|');
  872. try
  873. {
  874. F_SeasonAnalysis sa = new F_SeasonAnalysis();
  875. sa.Remark = url;
  876. sa.Id = CommonHelper.GetGuid().ToString();
  877. sa.CreateDateTime = DateTime.Now;
  878. sa.Season = Season;
  879. sa.TeamId = Id;
  880. sa.OldRanking = query[0].TryToInt32();
  881. sa.NowOldRanking = query[1].TryToInt32();
  882. sa.Win = query[2].TryToInt32();
  883. sa.Draw = query[3].TryToInt32();
  884. sa.Lose = query[4].TryToInt32();
  885. sa.Number = query[5].TryToInt32();
  886. salist.Add(sa);
  887. }
  888. catch (Exception e)
  889. {
  890. F_SeasonAnalysis sa = new F_SeasonAnalysis();
  891. sa.Remark = url;
  892. sa.Id = CommonHelper.GetGuid().ToString();
  893. sa.CreateDateTime = DateTime.Now;
  894. sa.Season = Season;
  895. sa.TeamId = Id;
  896. sa.OldRanking = query[0].TryToInt32();
  897. sa.NowOldRanking = query[0].TryToInt32();
  898. sa.Win = 0;
  899. sa.Draw = 0;
  900. sa.Lose = 0;
  901. sa.Number = query[1].TryToInt32();
  902. salist.Add(sa);
  903. }
  904. }
  905. #region 更新
  906. public void Getbjop_new(string url, F_Games game)
  907. {
  908. try
  909. {
  910. url = url.Replace(":80", "");
  911. string jsonall = CommonHelper.GetHtmlString(url.Replace("fenxi.zgzcw.com", "fenxi.zgzcw.com/json"), "", 5 * 1000);
  912. var htmlResource = CommonHelper.GetHtmlString(url, "", 5 * 1000);
  913. HtmlDocument doc = new HtmlDocument();
  914. if (htmlResource == null)
  915. return;
  916. if (htmlResource == ConfigurationManager.AppSettings["HttpException"].ToString())
  917. return;
  918. doc.LoadHtml(htmlResource);
  919. //赔率集合
  920. HtmlNodeCollection bjopHtml = doc.DocumentNode.SelectNodes("//*[@class='bf-tab-02']/tr");
  921. if (bjopHtml == null)
  922. return;
  923. string HomeTeamName = "";
  924. HtmlNodeCollection homenameHtml = doc.DocumentNode.SelectNodes("//*[@class='host-name']/a");
  925. if (homenameHtml != null)
  926. {
  927. var q1 = teamlist.Where(a => a.Name == homenameHtml[0].InnerText.Trim()).FirstOrDefault();
  928. string data = "";
  929. if (q1 != null)
  930. {
  931. HomeTeamName = q1.Name;
  932. HtmlNodeCollection homepmHtml = doc.DocumentNode.SelectNodes("//*[@class='team-add-info-zd']");
  933. if (homepmHtml[0].InnerText.Trim().Contains("上赛季排名"))
  934. {
  935. data = "" + string.Join("|", homepmHtml[0].InnerText.Trim().Replace("上赛季排名:", "").Replace("本赛季排名", "").Split(':'));
  936. HtmlNodeCollection homedfHtml = doc.DocumentNode.SelectNodes("//*[@class='team-info-h']");
  937. data += "|" + homedfHtml[0].InnerText.Trim().Replace("主队:", "").Replace("胜", "|").Replace("平", "|").Replace("负", "|").Replace("分", "");
  938. }
  939. else
  940. {
  941. data = "" + homepmHtml[0].InnerText.Trim().Replace("FIFA排名:", "");
  942. HtmlNodeCollection homedfHtml = doc.DocumentNode.SelectNodes("//*[@class='team-info-h']");
  943. data += "|" + homedfHtml[0].InnerText.Trim().Replace("主队:", "").Replace("胜", "|").Replace("平", "|").Replace("负", "|").Replace("分", "").Replace("积分", "");
  944. }
  945. InsertSeasonAnalysis(data, q1.Id, url, game.Season);
  946. }
  947. }
  948. string VisitingTeamName = "";
  949. HtmlNodeCollection visitingnameHtml = doc.DocumentNode.SelectNodes("//*[@class='visit-name']/a");
  950. if (visitingnameHtml != null)
  951. {
  952. string data = "";
  953. var q2 = teamlist.Where(a => a.Name == visitingnameHtml[0].InnerText.Trim()).FirstOrDefault();
  954. if (q2 != null)
  955. {
  956. VisitingTeamName = q2.Name;
  957. HtmlNodeCollection homepmkHtml = doc.DocumentNode.SelectNodes("//*[@class='team-add-info-kd']");
  958. if (homepmkHtml[0].InnerText.Trim().Contains("上赛季排名"))
  959. {
  960. data = "" + string.Join("|", homepmkHtml[0].InnerText.Trim().Replace("上赛季排名:", "").Replace("本赛季排名", "").Split(':'));
  961. HtmlNodeCollection homedfkHtml = doc.DocumentNode.SelectNodes("//*[@class='team-info-v']");
  962. data += "|" + homedfkHtml[0].InnerText.Trim().Replace("客队:", "").Replace("胜", "|").Replace("平", "|").Replace("负", "|").Replace("分", "");
  963. }
  964. else
  965. {
  966. data = "" + homepmkHtml[0].InnerText.Trim().Replace("FIFA排名:", "");
  967. HtmlNodeCollection homedfkHtml = doc.DocumentNode.SelectNodes("//*[@class='team-info-v']");
  968. data += "|" + homedfkHtml[0].InnerText.Trim().Replace("主队:", "").Replace("胜", "|").Replace("平", "|").Replace("负", "|").Replace("分", "").Replace("积分", "");
  969. }
  970. InsertSeasonAnalysis(data, q2.Id, url, game.Season);
  971. }
  972. }
  973. DateTime lastdate = DateTime.Now;
  974. List<string> listdetail = new List<string>();
  975. foreach (var item in bjopHtml)
  976. {
  977. HtmlDocument doc1 = new HtmlDocument();
  978. doc1.LoadHtml(item.InnerHtml);
  979. HtmlNodeCollection bjoptdHtml = doc1.DocumentNode.SelectNodes("//td");
  980. int i = 1;
  981. string shuju = "", nurl = "";
  982. DateTime lasttime = DateTime.Now;
  983. foreach (var item1 in bjoptdHtml)
  984. {
  985. if (i == 2)
  986. {
  987. // shuju += item1.InnerText.Trim()+"|";
  988. Companylist.Add(item1.InnerText.Trim() + "|" + item1.Attributes["data"].Value);
  989. // Companylist = Companylist.Distinct().ToList();
  990. // InsertBankerCompany();
  991. }
  992. if (i == 6)
  993. {
  994. shuju += item1.InnerText.Trim() + "|";
  995. nurl = item1.SelectNodes("//a")[0].Attributes["href"].Value.Trim();
  996. }
  997. else if (i == 9)
  998. {
  999. HtmlDocument doc2 = new HtmlDocument();
  1000. doc2.LoadHtml(item1.InnerHtml);
  1001. HtmlNodeCollection timehtml = doc2.DocumentNode.SelectNodes("//em");
  1002. shuju += item.Attributes["firsttime"].Value + "|";
  1003. string datestring = timehtml[0].InnerText.Trim().Replace("更新时间:赛前", "").Replace("时", "|").Replace("分", "");
  1004. string Hours = "0";
  1005. string Minute = "0";
  1006. if (datestring.Split('|').Length == 2)
  1007. {
  1008. Hours = datestring.Split('|')[0];
  1009. Minute = datestring.Split('|')[1];
  1010. }
  1011. else if (datestring.Split('|').Length == 1)
  1012. {
  1013. Hours = "0";
  1014. Minute = datestring.Split('|')[0];
  1015. }
  1016. int Minutes = Minute.TryToInt32() + Hours.TryToInt32() * 60;
  1017. lasttime = Convert.ToDateTime(game.StartDateTime).AddMinutes(-Minutes);
  1018. }
  1019. else
  1020. {
  1021. shuju += item1.InnerText.Trim() + "|";
  1022. }
  1023. i++;
  1024. }
  1025. lastdate = lasttime;
  1026. DateTime date = Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"));
  1027. // if (lastdate > date)
  1028. {
  1029. listdetail.Add(shuju + "@" + nurl + "@" + lasttime);
  1030. }
  1031. InsertOddsCuring_new(shuju, game.Id, nurl, game.StartDateTime.TryToDateTime(), game.HomeTeamId, game.VisitingTeamId, HomeTeamName, VisitingTeamName, jsonall, Convert.ToDateTime(lasttime));
  1032. // listdetail.Add(shuju + "@" + nurl);
  1033. }
  1034. //class="bf-tab-03"
  1035. HtmlNodeCollection bjopfxHtml = doc.DocumentNode.SelectNodes("//*[@class='bf-tab-03']/tr");
  1036. if (bjopfxHtml == null)
  1037. return;
  1038. foreach (var item in bjopfxHtml)
  1039. {
  1040. HtmlDocument doc1 = new HtmlDocument();
  1041. doc1.LoadHtml(item.InnerHtml);
  1042. HtmlNodeCollection bjopfxtdHtml = doc1.DocumentNode.SelectNodes("//td");
  1043. if (bjopfxtdHtml.Count == 15)
  1044. {
  1045. string shuju = "";
  1046. foreach (var item1 in bjopfxtdHtml)
  1047. {
  1048. shuju += item1.InnerText.Trim() + "|";
  1049. }
  1050. InsertCuringAnalysis(shuju, game.Id, url);
  1051. }
  1052. }
  1053. }
  1054. catch (Exception e)
  1055. {
  1056. //throw;
  1057. }
  1058. }
  1059. public void Getbjopdetail_new(string url, F_AsianDishCuring oc, string date)
  1060. {
  1061. try
  1062. {
  1063. //插入初始
  1064. InsertCompensate_start(oc, date);
  1065. //Trace.WriteLine("亚盘所有分析获取 开始:" + "http://fenxi.zgzcw.com" + url);
  1066. string yurl = url;
  1067. if (!url.Contains("http://fenxi.zgzcw.com"))
  1068. url = "http://fenxi.zgzcw.com" + url.Replace(":80", "");
  1069. var htmlResource = NetHelper.GetUrlResponse(url, Encoding.GetEncoding("utf-8"));
  1070. HtmlDocument doc = new HtmlDocument();
  1071. if (htmlResource == null)
  1072. return;
  1073. if (htmlResource.Contains("lg123456"))
  1074. {
  1075. urllist1.Add(url + "|" + oc.Id);
  1076. return;
  1077. }
  1078. if (htmlResource.Contains("403 Forbidden"))
  1079. {
  1080. urllist1.Add(url + "|" + oc.Id);
  1081. return;
  1082. }
  1083. doc.LoadHtml(htmlResource);
  1084. HtmlNodeCollection detailHtml = doc.DocumentNode.SelectNodes("//*[@class='dxzkt-tab']/tr");
  1085. if (detailHtml == null)
  1086. return;
  1087. DateTime date1 = Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"));
  1088. DateTime jdate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"));
  1089. foreach (var item in detailHtml)
  1090. {
  1091. HtmlDocument doc1 = new HtmlDocument();
  1092. doc1.LoadHtml(item.InnerHtml);
  1093. HtmlNodeCollection bjopfxtdHtml = doc1.DocumentNode.SelectNodes("//td");
  1094. if (bjopfxtdHtml != null)
  1095. {
  1096. if (bjopfxtdHtml.Count == 11)
  1097. {
  1098. string shuju = "";
  1099. DateTime newdate=DateTime.Now;
  1100. int i = 0;
  1101. foreach (var item1 in bjopfxtdHtml)
  1102. {
  1103. shuju += item1.InnerText.Trim() + "|";
  1104. if (i == 1)
  1105. {
  1106. try
  1107. {
  1108. newdate = Convert.ToDateTime(item1.InnerText.Trim());
  1109. }
  1110. catch (Exception e)
  1111. {
  1112. }
  1113. }
  1114. i++;
  1115. }
  1116. if (newdate > date1 && newdate < jdate)
  1117. {
  1118. InsertCompensate(shuju, oc, url);
  1119. }
  1120. //InsertCompensate(shuju, oc, url);
  1121. }
  1122. }
  1123. }
  1124. }
  1125. catch (Exception e)
  1126. {
  1127. Trace.WriteLine("报错开始 开始:" + "http://fenxi.zgzcw.com" + url);
  1128. //Getbjopdetail(url, oc);
  1129. }
  1130. }
  1131. /// <summary>
  1132. /// 插入数据亚盘固化数据
  1133. /// </summary>
  1134. /// <param name="data"></param>
  1135. /// <param name="Id"></param>
  1136. /// <param name="Season"></param>
  1137. public void InsertOddsCuring_new(string data, string Id, string url, DateTime date, string HomeTeamId, string VisitingTeamId, string HomeTeamName, string VisitingTeamName,string jsonall,DateTime lastdate)
  1138. {
  1139. try
  1140. {
  1141. var query = data.Replace("↓", "").Replace("↑", "").Split('|');
  1142. F_AsianDishCuring oc = new F_AsianDishCuring();
  1143. oc.Init_SOdd = Convert.ToDouble(query[2]);
  1144. oc.Init_DiscName = query[3];
  1145. oc.Init_FOdd = Convert.ToDouble(query[4]);
  1146. oc.Newest_SOdd = Convert.ToDouble(query[5]);
  1147. oc.Newest_DiscName = query[6];
  1148. oc.Newest_FOdd = Convert.ToDouble(query[7]);
  1149. oc.Probability_SOdd = Convert.ToDouble(query[9]);
  1150. oc.Probability_FOdd = Convert.ToDouble(query[10]);
  1151. oc.Kelly_SOdd = Convert.ToDouble(query[11]);
  1152. oc.Kelly_FOdd = Convert.ToDouble(query[12]);
  1153. oc.Loss_Odd = Convert.ToDouble(query[13]);
  1154. oc.BankerCompanyName = query[1];
  1155. oc.BankerCompanyId = query[1];
  1156. oc.Remark = url;
  1157. oc.Id = CommonHelper.GetGuid().ToString();
  1158. oc.CreateDateTime = DateTime.Now;
  1159. oc.GameId = Id;
  1160. try
  1161. {
  1162. oc.ChangeDateTime = Convert.ToDateTime(query[8]);
  1163. }
  1164. catch (Exception e)
  1165. {
  1166. oc.ChangeDateTime = DateTime.Now;
  1167. }
  1168. oc.HomeTeamId = HomeTeamId;
  1169. oc.HomeTeamName = HomeTeamName;
  1170. oc.VisitingTeamId = VisitingTeamId;
  1171. oc.VisitingTeamName = VisitingTeamName;
  1172. lock (oclist)
  1173. {
  1174. oclist.Add(oc);
  1175. }
  1176. F_AsianDish ca = new F_AsianDish();
  1177. ca.BankerCompanyId = oc.BankerCompanyId;
  1178. ca.ChangeDateTime = lastdate;
  1179. ca.AsianDishStatus = "913f7b12da6ae811ab3100ac6a4a134f";//及时盘口赔率 913f7b12da6ae811ab3100ac6a4a134f
  1180. ca.CreateDateTime = DateTime.Now;
  1181. ca.SOdd = Convert.ToDouble(query[5]);
  1182. ca.POdd = -1;
  1183. ca.Disc = query[6];
  1184. ca.FOdd = Convert.ToDouble(query[7]);
  1185. ca.Remark = url;
  1186. ca.Id = CommonHelper.GetGuid().ToString();
  1187. ca.GameId = oc.GameId;
  1188. //csalist.Add(ca);
  1189. lock (oclist)
  1190. {
  1191. csalist.Add(ca);
  1192. }
  1193. // Getbjopdetail_new(url, oc, query[8]);
  1194. Getbjopdetail_new_json(jsonall, query[1], lastdate, oc);
  1195. }
  1196. catch (Exception s)
  1197. {
  1198. }
  1199. }
  1200. public void Getbjopdetail_new_json(string jsonurl,string BankerCompanyName,DateTime lastdate, F_AsianDishCuring oc)
  1201. {
  1202. var obj = JsonConvert.DeserializeObject<JObject>(jsonurl);
  1203. var list = obj["company5List"];
  1204. var objw = JsonConvert.DeserializeObject<List<company5List>>(list.ToString());
  1205. var objw1 = objw.Where(a => a.attribute.name == BankerCompanyName).FirstOrDefault();
  1206. foreach (var item in objw1.c)
  1207. {
  1208. if (lastdate == item.attribute.wdate.TryToDateTime())
  1209. continue;
  1210. if (item.attribute.wdate.TryToDateTime() > Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd")) )
  1211. {
  1212. F_AsianDish ca = new F_AsianDish();
  1213. ca.BankerCompanyId = oc.BankerCompanyId;
  1214. ca.ChangeDateTime = item.attribute.wdate.TryToDateTime();
  1215. ca.AsianDishStatus = "913f7b12da6ae811ab3100ac6a4a134f";//及时盘口赔率 913f7b12da6ae811ab3100ac6a4a134f
  1216. ca.CreateDateTime = DateTime.Now;
  1217. ca.SOdd = Convert.ToDouble(item.attribute.win);
  1218. ca.POdd = -1;
  1219. ca.Disc = item.attribute.same_handicap;
  1220. ca.FOdd = Convert.ToDouble(item.attribute.lost);
  1221. ca.Remark = "";
  1222. ca.Id = CommonHelper.GetGuid().ToString();
  1223. ca.GameId = oc.GameId;
  1224. lock (csalist)
  1225. {
  1226. csalist.Add(ca);
  1227. }
  1228. }else
  1229. {
  1230. var s1 = item.attribute.wdate.TryToDateTime();
  1231. var s2 = Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"));
  1232. }
  1233. }
  1234. }
  1235. public class company5List
  1236. {
  1237. public company5List()
  1238. {
  1239. c = new List<sk>();
  1240. }
  1241. public Attribute attribute { get; set; }
  1242. public List<sk> c { get; set; }
  1243. }
  1244. public class Attribute
  1245. {
  1246. public string name { get; set; }
  1247. public string cid { get; set; }
  1248. }
  1249. public class sk
  1250. {
  1251. public sk2 attribute { get; set; }
  1252. public string value { get; set; }
  1253. }
  1254. public class sk2
  1255. {
  1256. public string lost { get; set; }
  1257. public string lostch { get; set; }
  1258. public string arq { get; set; }
  1259. public string wdate { get; set; }
  1260. public string win { get; set; }
  1261. public string wdate1 { get; set; }
  1262. public string same { get; set; }
  1263. public string cid { get; set; }
  1264. public string samech { get; set; }
  1265. public string alost { get; set; }
  1266. public string awin { get; set; }
  1267. public string winch { get; set; }
  1268. public string returnPer { get; set; }
  1269. public string arq_num { get; set; }
  1270. public string same_handicap { get; set; }
  1271. }
  1272. #endregion
  1273. }
  1274. }