SizeIndexJob.cs 62 KB

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