OddsJob.cs 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995
  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.ZCLotteryGames
  17. {
  18. public class OddsJob : CommonJob, IJob,IDisposable
  19. {
  20. public OddsJob()
  21. {
  22. logName = "OddsJob";
  23. log = new LogHelper();
  24. services = IOC.Resolve<IDTOpenCode>();
  25. }
  26. public void Execute(IJobExecutionContext context)
  27. {
  28. //Config = CommonHelper.GetConfigFromDataMap(context.JobDetail.JobDataMap);
  29. // Click();
  30. }
  31. private List<int> listCuringint = new List<int>();
  32. private List<int> listDetailint = new List<int>();
  33. private List<int> listAnalysisint = new List<int>();
  34. private List<string> listGameId = new List<string>();
  35. public List<string> urllist = new List<string>();
  36. public List<string> urllist1 = new List<string>();
  37. public List<string> Companylist = new List<string>();//所有公司
  38. public List<BankerCompany> bclist = new List<BankerCompany>();
  39. public List<BankerCompanyRelation> bcrlist = new List<BankerCompanyRelation>();
  40. public static List<F_CuringAnalysis> calist = new List<F_CuringAnalysis>();
  41. public List<F_Team> teamlist = new List<F_Team>();
  42. public static List<F_SeasonAnalysis> salist = new List<F_SeasonAnalysis>();
  43. public static List<F_OddsCuring> oclist = new List<F_OddsCuring>();
  44. public List<F_OddsCuring> oclist_new = new List<F_OddsCuring>();
  45. public static List<F_Compensate> csalist = new List<F_Compensate>();
  46. public List<F_Compensate> csalist_new = new List<F_Compensate>();
  47. private List<F_Compensate> listDetailId = new List<F_Compensate>();
  48. //公司类型
  49. public static string a1 = "c06f47ca4f8ee811af5a2c4d54d3f5a9", a2 = "00ae03d14f8ee811af5a2c4d54d3f5a9", a3 = "30d122dc4f8ee811af5a2c4d54d3f5a9", a4 = "f08de6e64f8ee811af5a2c4d54d3f5a9", a5 = "904f40ef4f8ee811af5a2c4d54d3f5a9";
  50. //百家欧赔 c06f47ca4f8ee811af5a2c4d54d3f5a9
  51. //主流公司 00ae03d14f8ee811af5a2c4d54d3f5a9 0
  52. //交易公司 30d122dc4f8ee811af5a2c4d54d3f5a9 1
  53. //亚洲公司 f08de6e64f8ee811af5a2c4d54d3f5a9 2
  54. //普通公司 904f40ef4f8ee811af5a2c4d54d3f5a9 5
  55. //欧赔固化分析大小值类型
  56. public static string b1 = "b1b112fa278ee811a04200ac6a4a134f", b2 = "b2b112fa278ee811a04200ac6a4a134f", b3 = "b1bf8c08288ee811a04200ac6a4a134f";
  57. //平均值 b1b112fa278ee811a04200ac6a4a134f
  58. //最小值 b2b112fa278ee811a04200ac6a4a134f
  59. //最大值 b1bf8c08288ee811a04200ac6a4a134f
  60. public void Click(List<F_Games> Gamelistq)
  61. {
  62. CommonHelper.LogBD(typeof(OddsJob), () =>
  63. {
  64. try
  65. {
  66. string Season = DateTime.Now.ToString("yyyy");
  67. //Gamelistq = glist;
  68. teamlist = services.Query<F_Team>().ToList();
  69. int number = Gamelistq.Count;
  70. int page = number % 1000 == 0 ? number / 1000 : number / 1000 + 1;
  71. //要删除的
  72. //插入之前 获取要删除的旧数据的所有PK
  73. for (int i = 0; i < Gamelistq.Count; i++)
  74. {
  75. listGameId.Add(Gamelistq[i].Id);
  76. }
  77. if (Gamelistq.Count > 0)
  78. {
  79. var query1 = new List<F_Compensate>();
  80. foreach (var item in Gamelistq)
  81. {
  82. try
  83. {
  84. query1.AddRange(services.Query<F_Compensate>(" and (GameId = ('" + item.Id + "')) ").Where(a => a.ChangeDateTime > Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"))).ToList());
  85. }
  86. catch (Exception)
  87. {
  88. }
  89. try
  90. {
  91. query1.AddRange(services.Query<F_Compensate>(" and (GameId = ('" + item.Id + "') and CompensateType =('a1bfa33cd96ae811ab3100ac6a4a134f') )").ToList());
  92. }
  93. catch (Exception)
  94. {
  95. }
  96. try
  97. {
  98. query1.AddRange(services.Query<F_Compensate>(" and (GameId = ('" + item.Id + "') and CompensateType =('21f77e31d96ae811ab3100ac6a4a134f') )").ToList());
  99. }
  100. catch (Exception)
  101. {
  102. }
  103. try
  104. {
  105. query1.AddRange(services.Query<F_Compensate>(" and (GameId = ('" + item.Id + "') and CompensateType =('20f77e31d96ae811ab3100ac6a4a134f') )").ToList());
  106. }
  107. catch (Exception)
  108. {
  109. }
  110. }
  111. listDetailId = query1;
  112. for (int i = 0; i < query1.Count; i++)
  113. {
  114. listDetailint.Add(query1[i].PK);
  115. }
  116. var query2 = services.Query<F_OddsCuring>(" and GameId in ('" + string.Join("','", listGameId) + "')") == null ? new List<F_OddsCuring>() : services.Query<F_OddsCuring>(" and GameId in ('" + string.Join("','", listGameId) + "')").ToList();
  117. for (int i = 0; i < query2.Count; i++)
  118. {
  119. listCuringint.Add(query2[i].PK);
  120. }
  121. var query3 = services.Query<F_CuringAnalysis>(" and GameId in ('" + string.Join("','", listGameId) + "') and CuringType='0046feff428ee811af5a2c4d54d3f5a9'") == null ? new List<F_CuringAnalysis>() : services.Query<F_CuringAnalysis>(" and GameId in ('" + string.Join("','", listGameId) + "') and CuringType='0046feff428ee811af5a2c4d54d3f5a9'").ToList();
  122. for (int i = 0; i < query3.Count; i++)
  123. {
  124. listAnalysisint.Add(query3[i].PK);
  125. }
  126. }
  127. for (int j = 0; j < page; j++)
  128. {
  129. Trace.WriteLine("第几个J 开始 OddsJob :" + (j + 1));
  130. threadCount = Gamelistq.Count;
  131. finishcount = 0;
  132. Gamelistq.ForEach(async p =>
  133. {
  134. await Task.Run(() =>
  135. {
  136. Getbjop_new(p.Remark, p);
  137. });
  138. lock (locker)
  139. {
  140. finishcount++;
  141. Monitor.Pulse(locker); //完成,通知等待队列,告知已完,执行下一个。
  142. }
  143. });
  144. lock (locker)
  145. {
  146. while (finishcount != threadCount)
  147. {
  148. Thread.Sleep(5000);
  149. Monitor.Wait(locker);//等待
  150. }
  151. }
  152. Companylist = Companylist.Distinct().ToList();
  153. InsertBankerCompany(Companylist);
  154. InsertBankerCompany1();
  155. {
  156. List<F_SeasonAnalysis> teamSeasonAnalysislist = new List<F_SeasonAnalysis>();
  157. try
  158. {
  159. teamSeasonAnalysislist = services.Query<F_SeasonAnalysis>().ToList();
  160. }
  161. catch (Exception e)
  162. {
  163. }
  164. salist = salist.Distinct().ToList();
  165. salist = salist.Where((x, i) => salist.FindIndex(z => z.TeamId == x.TeamId) == i).ToList();//Lambda表达式去重
  166. List<F_SeasonAnalysis> salist2 = new List<F_SeasonAnalysis>();
  167. foreach (var item in salist)
  168. {
  169. if (teamSeasonAnalysislist.Where(a => a.TeamId == item.TeamId).ToList().Count == 0)
  170. salist2.Add(item);
  171. }
  172. Trace.WriteLine("插入赛季分析数据 开始:" + salist2.Count);
  173. if (salist2.Count != 0)
  174. services.SqlBulkCopyAdd(salist2);
  175. }
  176. List<BankerCompany> listbk = new List<BankerCompany>();
  177. try
  178. {
  179. listbk = services.Query<BankerCompany>().ToList();
  180. }
  181. catch (Exception e)
  182. {
  183. }
  184. Thread.Sleep(5000);
  185. oclist = oclist.Where(a => a != null).ToList();
  186. foreach (var item in oclist)
  187. {
  188. F_OddsCuring oc_new = new F_OddsCuring();
  189. oc_new = item;
  190. lock (listbk)
  191. {
  192. var listbkdetail = listbk.Where(a => a.Name == item.BankerCompanyId).FirstOrDefault();
  193. oc_new.BankerCompanyId = listbkdetail == null ? "" : listbkdetail.Id;
  194. }
  195. lock (oclist_new)
  196. {
  197. oclist_new.Add(oc_new);
  198. }
  199. }
  200. csalist = csalist.Where(a => a != null).ToList();
  201. foreach (var item in csalist)
  202. {
  203. if (item != null)
  204. {
  205. F_Compensate cp = new F_Compensate();
  206. cp = item;
  207. lock (listbk)
  208. {
  209. var listbkdetail = listbk.Where(a => a.Name == item.BankerCompanyId).FirstOrDefault();
  210. cp.BankerCompanyId = listbkdetail == null ? "" : listbkdetail.Id;
  211. }
  212. lock (oclist_new)
  213. {
  214. csalist_new.Add(cp);
  215. }
  216. }
  217. }
  218. }
  219. {
  220. Trace.WriteLine("插入欧赔固化数据 开始:" + oclist_new.Count);
  221. if (oclist_new.Count != 0)
  222. services.SqlBulkCopyAdd(oclist_new);
  223. Trace.WriteLine("插入固化分析数据 开始:" + calist.Count);
  224. if (calist.Count != 0)
  225. services.SqlBulkCopyAdd(calist);
  226. var list_com = new List<F_Compensate>();
  227. foreach (var item in Gamelistq)
  228. {
  229. var count = listDetailId.Where(a => a.GameId == item.Id).ToList().Count;
  230. var count_new = csalist_new.Where(a => a.GameId == item.Id).ToList().Count;
  231. if (count_new == 0 && count == 0)
  232. continue;
  233. if (count < count_new)
  234. {
  235. list_com.AddRange(csalist_new.Where(a => a.GameId == item.Id).ToList());
  236. }
  237. else
  238. {
  239. List<F_Compensate> intlist = new List<F_Compensate>();
  240. foreach (var item3 in listDetailId.Where(a => a.GameId == item.Id).ToList())
  241. {
  242. var items = item3;
  243. items.PK = 0;
  244. intlist.Add(items);
  245. }
  246. list_com.AddRange(intlist);
  247. }
  248. }
  249. Trace.WriteLine("插入欧赔详情数据 开始:" + list_com.Count);
  250. if (list_com.Count != 0)
  251. {
  252. int page1 = list_com.Count % 1000 == 0 ? list_com.Count / 1000 : list_com.Count / 1000 + 1;
  253. for (int i = 0; i < page1; i++)
  254. {
  255. var querylist = list_com.Skip(i * 1000).Take(1000).ToList();
  256. Trace.WriteLine("插入欧赔详情数据 开始:" + querylist.Count);
  257. services.SqlBulkCopyAdd(querylist);
  258. }
  259. }
  260. urllist = new List<string>();
  261. urllist1 = new List<string>();
  262. Companylist = new List<string>();//所有公司
  263. bclist = new List<BankerCompany>();
  264. bcrlist = new List<BankerCompanyRelation>();
  265. calist = new List<F_CuringAnalysis>();
  266. salist = new List<F_SeasonAnalysis>();
  267. oclist = new List<F_OddsCuring>();
  268. oclist_new = new List<F_OddsCuring>();
  269. csalist = new List<F_Compensate>();
  270. csalist_new = new List<F_Compensate>();
  271. }
  272. Trace.WriteLine("删除数据 F_CuringAnalysis 开始:" + listAnalysisint.Count);
  273. if (listAnalysisint.Count > 0)
  274. services.Delete<F_CuringAnalysis>(" and PK in (" + string.Join(",", listAnalysisint) + ")");
  275. Trace.WriteLine("删除数据 F_CuringAnalysis 结束:" + listAnalysisint.Count);
  276. listAnalysisint = new List<int>();
  277. Trace.WriteLine("删除数据 F_Compensate 开始:" + listDetailint.Count);
  278. if (listDetailint.Count > 0)
  279. {
  280. if (listDetailint.Count > 1000)
  281. {
  282. int pages = listDetailint.Count % 1000 == 0 ? listDetailint.Count / 1000 : listDetailint.Count / 1000 + 1;
  283. for (int i = 0; i < pages; i++)
  284. {
  285. var listDetailint1 = listDetailint.Skip(i * 1000).Take(1000).ToList();
  286. services.Delete<F_Compensate>(" and PK in (" + string.Join(",", listDetailint1) + ")");
  287. Trace.WriteLine("删除数据 F_OddsCuring 结束中:" + listDetailint1.Count);
  288. }
  289. }
  290. else
  291. {
  292. services.Delete<F_Compensate>(" and PK in (" + string.Join(",", listDetailint) + ")");
  293. }
  294. }
  295. Trace.WriteLine("删除数据 F_Compensate 结束:" + listDetailint.Count);
  296. listDetailint = new List<int>();
  297. Trace.WriteLine("删除数据 F_OddsCuring 开始:" + listCuringint.Count);
  298. if (listCuringint.Count > 0)
  299. {
  300. if (listCuringint.Count > 1000)
  301. {
  302. int pages = listCuringint.Count % 1000 == 0 ? listCuringint.Count / 1000 : listCuringint.Count / 1000 + 1;
  303. for (int i = 0; i < pages; i++)
  304. {
  305. var listCuringint1 = listCuringint.Skip(i * 1000).Take(1000).ToList();
  306. services.Delete<F_OddsCuring>(" and PK in (" + string.Join(",", listCuringint1) + ")");
  307. Trace.WriteLine("删除数据 F_OddsCuring 结束中:" + listCuringint1.Count);
  308. }
  309. }
  310. else
  311. {
  312. services.Delete<F_OddsCuring>(" and PK in (" + string.Join(",", listCuringint) + ")");
  313. }
  314. }
  315. Trace.WriteLine("删除数据 F_OddsCuring 结束:" + listCuringint.Count);
  316. listCuringint = new List<int>();
  317. Gamelistq = new List<F_Games>();
  318. teamlist = new List<F_Team>();
  319. }
  320. catch (Exception e)
  321. {
  322. CommonHelper.LogBD(e.Message, logName);
  323. CommonHelper.LogBD(e.Source, logName);
  324. CommonHelper.LogBD(e.StackTrace, logName);
  325. EmailHelper.Send("赔率报错", e.Message);
  326. Thread.Sleep(1000 * 60 * 5);
  327. urllist = new List<string>();
  328. urllist1 = new List<string>();
  329. Companylist = new List<string>();//所有公司
  330. bclist = new List<BankerCompany>();
  331. bcrlist = new List<BankerCompanyRelation>();
  332. calist = new List<F_CuringAnalysis>();
  333. salist = new List<F_SeasonAnalysis>();
  334. oclist = new List<F_OddsCuring>();
  335. oclist_new = new List<F_OddsCuring>();
  336. csalist = new List<F_Compensate>();
  337. csalist_new = new List<F_Compensate>();
  338. Click(Gamelistq);
  339. }
  340. });
  341. }
  342. /// <summary>
  343. /// 插入数据公司
  344. /// </summary>
  345. /// <param name="data"></param>
  346. /// <param name="Id"></param>
  347. /// <param name="Season"></param>
  348. public void InsertBankerCompany(List<string> Companylist)
  349. {
  350. List<BankerCompany> listbk = new List<BankerCompany>();
  351. try
  352. {
  353. listbk = services.Query<BankerCompany>().ToList();
  354. }
  355. catch (Exception e)
  356. {
  357. }
  358. foreach (var item in Companylist)
  359. {
  360. if (item.IsEmpty())
  361. continue;
  362. var query = item.Split('|');
  363. if (listbk.Where(a => a.Name == query[0]).ToList().Count > 0)
  364. continue;
  365. BankerCompany bc = new BankerCompany();
  366. bc.CreateDateTime = DateTime.Now;
  367. bc.Id = CommonHelper.GetGuid().ToString();
  368. bc.Name = query[0];
  369. bclist.Add(bc);
  370. }
  371. List<BankerCompany> bclist1 = bclist.Where((x, i) => bclist.FindIndex(z => z.Name == x.Name) == i).ToList();//Lambda表达式去重
  372. Trace.WriteLine("插入公司数据 开始:" + bclist1.Count);
  373. if(bclist1.Count!=0)
  374. services.SqlBulkCopyAdd(bclist1);
  375. }
  376. public void InsertBankerCompany1()
  377. {
  378. List<BankerCompany> listbk = new List<BankerCompany>();
  379. List<BankerCompanyRelation> listbkrs = new List<BankerCompanyRelation>();
  380. try
  381. {
  382. listbk = services.Query<BankerCompany>().ToList();
  383. listbkrs = services.Query<BankerCompanyRelation>().ToList();
  384. }
  385. catch (Exception e)
  386. {
  387. }
  388. foreach (var item in Companylist)
  389. {
  390. if (item.IsEmpty())
  391. continue;
  392. var query = item.Split('|');
  393. // bclist1
  394. if (listbk.Where(a => a.Name == query[0]).ToList().Count > 0)
  395. {
  396. var query2 = query[1].Split(',');
  397. foreach (var item1 in query2)
  398. {
  399. //if (!item1.Trim().IsEmpty())
  400. {
  401. BankerCompanyRelation bcr = new BankerCompanyRelation();
  402. bcr.BankerCompanyId = listbk.Where(a => a.Name == query[0]).FirstOrDefault().Id;
  403. if (item1 == "0")
  404. bcr.BankerCompanyType = a2;
  405. if (item1 == "1")
  406. bcr.BankerCompanyType = a3;
  407. if (item1 == "2")
  408. bcr.BankerCompanyType = a4;
  409. if (item1 == "5")
  410. bcr.BankerCompanyType = a5;
  411. if (item1 == "")
  412. bcr.BankerCompanyType = a1;
  413. if (item1 == "X")
  414. bcr.BankerCompanyType = a1;
  415. bcr.Remark = "";
  416. bcr.Id = CommonHelper.GetGuid().ToString();
  417. bcr.CreateDateTime = DateTime.Now;
  418. if (listbkrs.Where(a => a.BankerCompanyType == bcr.BankerCompanyType && a.BankerCompanyId == bcr.BankerCompanyId).ToList().Count == 0)
  419. {
  420. bcrlist.Add(bcr);
  421. }
  422. }
  423. }
  424. }
  425. }
  426. Trace.WriteLine("插入公司分类数据 开始:" + bcrlist.Count);
  427. if (bcrlist.Count!=0)
  428. services.SqlBulkCopyAdd(bcrlist);
  429. }
  430. /// <summary>
  431. /// 插入数据欧赔数据
  432. /// </summary>
  433. /// <param name="data"></param>
  434. /// <param name="Id"></param>
  435. /// <param name="Season"></param>
  436. public void InsertCompensate(string data, F_OddsCuring oc, string url)
  437. {
  438. try
  439. {
  440. var query = data.Replace("↓", "").Replace("↑", "").Split('|');
  441. F_Compensate ca = new F_Compensate();
  442. ca.BankerCompanyId = oc.BankerCompanyId;
  443. ca.ChangeDateTime = Convert.ToDateTime(query[1]);
  444. ca.CompensateType = "a0bfa33cd96ae811ab3100ac6a4a134f";//即时赔率 a0bfa33cd96ae811ab3100ac6a4a134f
  445. ca.CreateDateTime = DateTime.Now;
  446. ca.SOdd = Convert.ToDouble(query[3]);
  447. ca.POdd = Convert.ToDouble(query[4]);
  448. ca.FOdd = Convert.ToDouble(query[5]);
  449. ca.Remark = url;
  450. ca.Id = CommonHelper.GetGuid().ToString();
  451. ca.GameId = oc.GameId;
  452. csalist.Add(ca);
  453. ca = new F_Compensate();
  454. ca.BankerCompanyId = oc.BankerCompanyId;
  455. ca.ChangeDateTime = Convert.ToDateTime(query[1]);
  456. ca.CompensateType = "20f77e31d96ae811ab3100ac6a4a134f";//概率 20f77e31d96ae811ab3100ac6a4a134f
  457. ca.CreateDateTime = DateTime.Now;
  458. ca.SOdd = Convert.ToDouble(query[6]);
  459. ca.POdd = -1;
  460. ca.FOdd = Convert.ToDouble(query[7]);
  461. ca.Remark = url;
  462. ca.Id = CommonHelper.GetGuid().ToString();
  463. ca.GameId = oc.GameId;
  464. csalist.Add(ca);
  465. ca = new F_Compensate();
  466. ca.BankerCompanyId = oc.BankerCompanyId;
  467. ca.ChangeDateTime = Convert.ToDateTime(query[1]);
  468. ca.CompensateType = "21f77e31d96ae811ab3100ac6a4a134f";//凯利指数 21f77e31d96ae811ab3100ac6a4a134f
  469. ca.CreateDateTime = DateTime.Now;
  470. ca.SOdd = Convert.ToDouble(query[8]);
  471. ca.POdd = -1;
  472. ca.FOdd = Convert.ToDouble(query[9]);
  473. ca.Remark = url;
  474. ca.Id = CommonHelper.GetGuid().ToString();
  475. ca.GameId = oc.GameId;
  476. csalist.Add(ca);
  477. ca = new F_Compensate();
  478. ca.BankerCompanyId = oc.BankerCompanyId;
  479. ca.ChangeDateTime = Convert.ToDateTime(query[1]);
  480. ca.CompensateType = "a1bfa33cd96ae811ab3100ac6a4a134f";//赔付率 a1bfa33cd96ae811ab3100ac6a4a134f
  481. ca.CreateDateTime = DateTime.Now;
  482. ca.SOdd = Convert.ToDouble(query[10]);
  483. ca.POdd = -1;
  484. ca.FOdd = -1;
  485. ca.Remark = url;
  486. ca.Id = CommonHelper.GetGuid().ToString();
  487. ca.GameId = oc.GameId;
  488. csalist.Add(ca);
  489. }
  490. catch (Exception e)
  491. {
  492. }
  493. }
  494. /// <summary>
  495. /// 插入数据欧赔固化分析数据
  496. /// </summary>
  497. /// <param name="data"></param>
  498. /// <param name="Id"></param>
  499. /// <param name="Season"></param>
  500. public F_CuringAnalysis InsertCuringAnalysis_new(string data, string Id, string url)
  501. {
  502. var query = data.Split('|');
  503. F_CuringAnalysis ca = new F_CuringAnalysis();
  504. ca.Remark = url;
  505. ca.Id = CommonHelper.GetGuid().ToString();
  506. ca.CreateDateTime = DateTime.Now;
  507. ca.CuringType = "0046feff428ee811af5a2c4d54d3f5a9";
  508. if (query[1] == "平均值")
  509. ca.CuringAnalysisType = b1;
  510. if (query[1] == "最大值")
  511. ca.CuringAnalysisType = b2;
  512. if (query[1] == "最小值")
  513. ca.CuringAnalysisType = b3;
  514. ca.GameId = Id;
  515. ca.Init_SOdd = Convert.ToDouble(query[2]);
  516. ca.Init_POdd = Convert.ToDouble(query[3]);
  517. ca.Init_FOdd = Convert.ToDouble(query[4]);
  518. ca.Newest_SOdd = Convert.ToDouble(query[5]);
  519. ca.Newest_POdd = Convert.ToDouble(query[6]);
  520. ca.Newest_FOdd = Convert.ToDouble(query[7]);
  521. ca.Probability_SOdd = Convert.ToDouble(query[9]);
  522. ca.Probability_POdd = Convert.ToDouble(query[10]);
  523. ca.Probability_FOdd = Convert.ToDouble(query[11]);
  524. ca.Kelly_SOdd = Convert.ToDouble(query[12]);
  525. ca.Kelly_POdd = Convert.ToDouble(query[13]);
  526. ca.Kelly_FOdd = Convert.ToDouble(query[14]);
  527. ca.Loss_Odd = Convert.ToDouble(query[15]);
  528. return ca;
  529. }
  530. /// <summary>
  531. /// 插入数据赛季分析表
  532. /// </summary>
  533. /// <param name="data"></param>
  534. /// <param name="Id"></param>
  535. /// <param name="Season"></param>
  536. public F_SeasonAnalysis InsertSeasonAnalysis_new(string data, string Id, string url, string Season)
  537. {
  538. // List<F_SeasonAnalysis> salist1 = salist;
  539. //if (salist1.Where(a => a.Id == Id).ToList().Count > 0)
  540. //return;
  541. var query = data.Split('|');
  542. try
  543. {
  544. F_SeasonAnalysis sa = new F_SeasonAnalysis();
  545. sa.Remark = url;
  546. sa.Id = CommonHelper.GetGuid().ToString();
  547. sa.CreateDateTime = DateTime.Now;
  548. sa.Season = Season;
  549. sa.TeamId = Id;
  550. sa.OldRanking = query[0].TryToInt32();
  551. sa.NowOldRanking = query[1].TryToInt32();
  552. sa.Win = query[2].TryToInt32();
  553. sa.Draw = query[3].TryToInt32();
  554. sa.Lose = query[4].TryToInt32();
  555. sa.Number = query[5].TryToInt32();
  556. //salist.Add(sa);
  557. return sa;
  558. }
  559. catch (Exception e)
  560. {
  561. return new F_SeasonAnalysis();
  562. }
  563. }
  564. #region 更新
  565. public void Getbjop_new(string url, F_Games game)
  566. {
  567. using (OddsJob c = new OddsJob())
  568. {
  569. c.UseLimitedResource(url, game);
  570. }
  571. }
  572. /// <summary>
  573. /// 插入数据欧赔固化数据
  574. /// </summary>
  575. /// <param name="data"></param>
  576. /// <param name="Id"></param>
  577. /// <param name="Season"></param>
  578. public op InsertOddsCuring_new2(string data, string Id, string url, DateTime date, string HomeTeamId, string VisitingTeamId, string HomeTeamName, string VisitingTeamName, string jsonall, DateTime lastdate)
  579. {
  580. try
  581. {
  582. op op = new op();
  583. var query = data.Replace("↓", "").Replace("↑", "").Split('|');
  584. F_OddsCuring oc = new F_OddsCuring();
  585. oc.Init_SOdd = Convert.ToDouble(query[2]);
  586. oc.Init_POdd = Convert.ToDouble(query[3]);
  587. oc.Init_FOdd = Convert.ToDouble(query[4]);
  588. oc.Newest_SOdd = Convert.ToDouble(query[5]);
  589. oc.Newest_POdd = Convert.ToDouble(query[6]);
  590. oc.Newest_FOdd = Convert.ToDouble(query[7]);
  591. oc.Probability_SOdd = Convert.ToDouble(query[9]);
  592. oc.Probability_POdd = Convert.ToDouble(query[10]);
  593. oc.Probability_FOdd = Convert.ToDouble(query[11]);
  594. oc.Kelly_SOdd = Convert.ToDouble(query[12]);
  595. oc.Kelly_POdd = Convert.ToDouble(query[13]);
  596. oc.Kelly_FOdd = Convert.ToDouble(query[14]);
  597. oc.Loss_Odd = Convert.ToDouble(query[15]);
  598. oc.BankerCompanyName = query[1];
  599. oc.BankerCompanyId = query[1];
  600. oc.Remark = url;
  601. oc.Id = CommonHelper.GetGuid().ToString();
  602. oc.CreateDateTime = DateTime.Now;
  603. oc.GameId = Id;
  604. oc.ChangeDateTime = Convert.ToDateTime(query[8]);
  605. oc.HomeTeamId = HomeTeamId;
  606. oc.HomeTeamName = HomeTeamName;
  607. oc.VisitingTeamId = VisitingTeamId;
  608. oc.VisitingTeamName = VisitingTeamName;
  609. op.odds = oc;
  610. F_Compensate ca = new F_Compensate();
  611. ca.BankerCompanyId = oc.BankerCompanyId;
  612. ca.ChangeDateTime = lastdate;
  613. ca.CompensateType = "20f77e31d96ae811ab3100ac6a4a134f";//概率 20f77e31d96ae811ab3100ac6a4a134f
  614. ca.CreateDateTime = DateTime.Now;
  615. ca.SOdd = Convert.ToDouble(query[9]);
  616. ca.POdd = Convert.ToDouble(query[10]);
  617. ca.FOdd = Convert.ToDouble(query[11]);
  618. ca.Remark = url;
  619. ca.Id = CommonHelper.GetGuid().ToString();
  620. ca.GameId = oc.GameId;
  621. op.oddsdetail.Add(ca);
  622. ca = new F_Compensate();
  623. ca.BankerCompanyId = oc.BankerCompanyId;
  624. ca.ChangeDateTime = lastdate;
  625. ca.CompensateType = "21f77e31d96ae811ab3100ac6a4a134f";//凯利指数 21f77e31d96ae811ab3100ac6a4a134f
  626. ca.CreateDateTime = DateTime.Now;
  627. ca.SOdd = Convert.ToDouble(query[12]);
  628. ca.POdd = Convert.ToDouble(query[13]);
  629. ca.FOdd = Convert.ToDouble(query[14]);
  630. ca.Remark = url;
  631. ca.Id = CommonHelper.GetGuid().ToString();
  632. ca.GameId = oc.GameId;
  633. op.oddsdetail.Add(ca);
  634. ca = new F_Compensate();
  635. ca.BankerCompanyId = oc.BankerCompanyId;
  636. ca.ChangeDateTime = lastdate;
  637. ca.CompensateType = "a1bfa33cd96ae811ab3100ac6a4a134f";//赔付率 a1bfa33cd96ae811ab3100ac6a4a134f
  638. ca.CreateDateTime = DateTime.Now;
  639. ca.SOdd = Convert.ToDouble(query[15]);
  640. ca.POdd = -1;
  641. ca.FOdd = -1;
  642. ca.Remark = url;
  643. ca.Id = CommonHelper.GetGuid().ToString();
  644. ca.GameId = oc.GameId;
  645. op.oddsdetail.Add(ca);
  646. ca = new F_Compensate();
  647. ca.BankerCompanyId = oc.BankerCompanyId;
  648. ca.ChangeDateTime = lastdate;
  649. ca.CompensateType = "a0bfa33cd96ae811ab3100ac6a4a134f";//即时赔率 a0bfa33cd96ae811ab3100ac6a4a134f
  650. ca.CreateDateTime = DateTime.Now;
  651. ca.SOdd = Convert.ToDouble(query[2]); ;
  652. ca.POdd = Convert.ToDouble(query[3]); ;
  653. ca.FOdd = Convert.ToDouble(query[4]); ;
  654. ca.Remark = "";
  655. ca.Id = CommonHelper.GetGuid().ToString();
  656. ca.GameId = oc.GameId;
  657. op.oddsdetail.Add(ca);
  658. var c_list=Getbjopdetail_new_json2(jsonall, oc.BankerCompanyName, lastdate, oc);
  659. op.oddsdetail.AddRange(c_list);
  660. return op;
  661. }
  662. catch (Exception e)
  663. {
  664. return new op();
  665. }
  666. }
  667. //欧赔详情
  668. public List<F_Compensate> Getbjopdetail_new_json2(string jsonurl, string BankerCompanyName, DateTime lastdate, F_OddsCuring oc)
  669. {
  670. List<F_Compensate> c_list = new List<F_Compensate>();
  671. var obj = JsonConvert.DeserializeObject<JObject>(jsonurl);
  672. var list = obj["company5List"];
  673. var objw = JsonConvert.DeserializeObject<List<company5List>>(list.ToString());
  674. var objw1 = objw.Where(a => a.attribute.name == BankerCompanyName).FirstOrDefault();
  675. if (objw1 == null)
  676. return new List<F_Compensate>();
  677. foreach (var item in objw1.c)
  678. {
  679. if (lastdate == item.attribute.wdate.TryToDateTime())
  680. continue;
  681. if (item.attribute.wdate.TryToDateTime() > Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd")))
  682. {
  683. F_Compensate ca = new F_Compensate();
  684. ca.BankerCompanyId = oc.BankerCompanyId;
  685. ca.ChangeDateTime = Convert.ToDateTime(item.attribute.wdate.TryToDateTime());
  686. ca.CompensateType = "a0bfa33cd96ae811ab3100ac6a4a134f";//即时赔率 a0bfa33cd96ae811ab3100ac6a4a134f
  687. ca.CreateDateTime = DateTime.Now;
  688. ca.SOdd = Convert.ToDouble(item.attribute.win);
  689. ca.POdd = Convert.ToDouble(item.attribute.same);
  690. ca.FOdd = Convert.ToDouble(item.attribute.lost);
  691. ca.Remark = "";
  692. ca.Id = CommonHelper.GetGuid().ToString();
  693. ca.GameId = oc.GameId;
  694. c_list.Add(ca);
  695. }
  696. else
  697. {
  698. var s1 = item.attribute.wdate.TryToDateTime();
  699. var s2 = Convert.ToDateTime(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"));
  700. }
  701. }
  702. return c_list;
  703. }
  704. public class company5List
  705. {
  706. public company5List()
  707. {
  708. c = new List<sk>();
  709. }
  710. public Attribute attribute { get; set; }
  711. public List<sk> c { get; set; }
  712. }
  713. public class Attribute
  714. {
  715. public string name { get; set; }
  716. public string cid { get; set; }
  717. }
  718. public class sk
  719. {
  720. public sk2 attribute { get; set; }
  721. public string value { get; set; }
  722. }
  723. public class op
  724. {
  725. public op()
  726. {
  727. oddsdetail = new List<F_Compensate>();
  728. }
  729. public F_OddsCuring odds { get; set; }
  730. public List<F_Compensate> oddsdetail { get; set; }
  731. }
  732. public class sk2
  733. {
  734. public string lost { get; set; }
  735. public string lostch { get; set; }
  736. public string arq { get; set; }
  737. public string wdate { get; set; }
  738. public string win { get; set; }
  739. public string wdate1 { get; set; }
  740. public string same { get; set; }
  741. public string cid { get; set; }
  742. public string samech { get; set; }
  743. public string alost { get; set; }
  744. public string awin { get; set; }
  745. public string winch { get; set; }
  746. public string returnPer { get; set; }
  747. public string arq_num { get; set; }
  748. public string same_handicap { get; set; }
  749. }
  750. public void UseLimitedResource(string url, F_Games game)
  751. {
  752. try
  753. {
  754. List<F_SeasonAnalysis> sa_new = new List<F_SeasonAnalysis>();
  755. url = url.Replace(":80", "").Replace("ypdb", "bjop");
  756. string yurl = url;
  757. string jsonall = CommonHelper.GetHtmlString(url.Replace("fenxi.zgzcw.com", "fenxi.zgzcw.com/json"), "", 5 * 1000);
  758. var htmlResource = CommonHelper.GetHtmlString(url, "", 5 * 1000);
  759. HtmlDocument doc = new HtmlDocument();
  760. if (htmlResource == null)
  761. return;
  762. if (htmlResource == ConfigurationManager.AppSettings["HttpException"].ToString())
  763. return;
  764. doc.LoadHtml(htmlResource);
  765. //赔率集合
  766. HtmlNodeCollection bjopHtml = doc.DocumentNode.SelectNodes("//*[@class='bf-tab-02']/tr");
  767. if (bjopHtml == null)
  768. return;
  769. string HomeTeamName = "";
  770. HtmlNodeCollection homenameHtml = doc.DocumentNode.SelectNodes("//*[@class='host-name']/a");
  771. if (homenameHtml != null)
  772. {
  773. var q1 = teamlist.Where(a => a.Name == homenameHtml[0].InnerText.Trim()).FirstOrDefault();
  774. string data = "";
  775. if (q1 != null)
  776. {
  777. HomeTeamName = q1.Name;
  778. HtmlNodeCollection homepmHtml = doc.DocumentNode.SelectNodes("//*[@class='team-add-info-zd']");
  779. if (homepmHtml[0].InnerText.Trim().Contains("上赛季排名"))
  780. {
  781. data = "" + string.Join("|", homepmHtml[0].InnerText.Trim().Replace("上赛季排名:", "").Replace("本赛季排名", "").Split(':'));
  782. HtmlNodeCollection homedfHtml = doc.DocumentNode.SelectNodes("//*[@class='team-info-h']");
  783. data += "|" + homedfHtml[0].InnerText.Trim().Replace("主队:", "").Replace("胜", "|").Replace("平", "|").Replace("负", "|").Replace("分", "");
  784. }
  785. else
  786. {
  787. data = "" + homepmHtml[0].InnerText.Trim().Replace("FIFA排名:", "");
  788. HtmlNodeCollection homedfHtml = doc.DocumentNode.SelectNodes("//*[@class='team-info-h']");
  789. data += "|" + homedfHtml[0].InnerText.Trim().Replace("主队:", "").Replace("胜", "|").Replace("平", "|").Replace("负", "|").Replace("分", "").Replace("积分", "");
  790. }
  791. var sa_sea=InsertSeasonAnalysis_new(data, q1.Id, url, game.Season);
  792. if (sa_sea != null)
  793. sa_new.Add(sa_sea);
  794. }
  795. }
  796. string VisitingTeamName = "";
  797. HtmlNodeCollection visitingnameHtml = doc.DocumentNode.SelectNodes("//*[@class='visit-name']/a");
  798. if (visitingnameHtml != null)
  799. {
  800. string data = "";
  801. var q2 = teamlist.Where(a => a.Name == visitingnameHtml[0].InnerText.Trim()).FirstOrDefault();
  802. if (q2 != null)
  803. {
  804. VisitingTeamName = q2.Name;
  805. HtmlNodeCollection homepmkHtml = doc.DocumentNode.SelectNodes("//*[@class='team-add-info-kd']");
  806. if (homepmkHtml[0].InnerText.Trim().Contains("上赛季排名"))
  807. {
  808. data = "" + string.Join("|", homepmkHtml[0].InnerText.Trim().Replace("上赛季排名:", "").Replace("本赛季排名", "").Split(':'));
  809. HtmlNodeCollection homedfkHtml = doc.DocumentNode.SelectNodes("//*[@class='team-info-v']");
  810. data += "|" + homedfkHtml[0].InnerText.Trim().Replace("客队:", "").Replace("胜", "|").Replace("平", "|").Replace("负", "|").Replace("分", "");
  811. }
  812. else
  813. {
  814. data = "" + homepmkHtml[0].InnerText.Trim().Replace("FIFA排名:", "");
  815. HtmlNodeCollection homedfkHtml = doc.DocumentNode.SelectNodes("//*[@class='team-info-v']");
  816. data += "|" + homedfkHtml[0].InnerText.Trim().Replace("主队:", "").Replace("胜", "|").Replace("平", "|").Replace("负", "|").Replace("分", "").Replace("积分", "");
  817. }
  818. var sa_sea = InsertSeasonAnalysis_new(data, q2.Id, url, game.Season);
  819. if (sa_sea != null)
  820. sa_new.Add(sa_sea);
  821. }
  822. }
  823. salist.AddRange(sa_new);
  824. List<string> listdetail = new List<string>();
  825. foreach (var item in bjopHtml)
  826. {
  827. HtmlDocument doc1 = new HtmlDocument();
  828. doc1.LoadHtml(item.InnerHtml);
  829. HtmlNodeCollection bjoptdHtml = doc1.DocumentNode.SelectNodes("//td");
  830. int i = 1;
  831. string shuju = "", nurl = "", lasttime = "";
  832. foreach (var item1 in bjoptdHtml)
  833. {
  834. if (i == 2)
  835. {
  836. // shuju += item1.InnerText.Trim()+"|";
  837. try
  838. {
  839. String SD = item1.InnerText.Trim() + "|" + item1.Attributes["data"].Value;
  840. Companylist.Add(SD);
  841. }
  842. catch (Exception e)
  843. {
  844. string aa = item1.InnerText.Trim(), ss = item1.Attributes["data"].Value;
  845. }
  846. }
  847. if (i == 6)
  848. {
  849. shuju += item1.InnerText.Trim() + "|";
  850. nurl = item1.SelectNodes("//a")[0].Attributes["href"].Value.Trim();
  851. }
  852. else if (i == 9)
  853. {
  854. shuju += item.Attributes["firsttime"].Value + "|";
  855. lasttime = item.Attributes["lasttime"].Value;
  856. }
  857. else
  858. {
  859. shuju += item1.InnerText.Trim() + "|";
  860. }
  861. i++;
  862. }
  863. DateTime lastdate = CommonHelper.ConvertIntToDateTime(lasttime);
  864. var op=InsertOddsCuring_new2(shuju, game.Id, nurl, game.StartDateTime.TryToDateTime(), game.HomeTeamId, game.VisitingTeamId, HomeTeamName, VisitingTeamName, jsonall, Convert.ToDateTime(lastdate));
  865. oclist.Add(op.odds);
  866. csalist.AddRange(op.oddsdetail);
  867. }
  868. //class="bf-tab-03"
  869. HtmlNodeCollection bjopfxHtml = doc.DocumentNode.SelectNodes("//*[@class='bf-tab-03']/tr");
  870. if (bjopfxHtml == null)
  871. return;
  872. foreach (var item in bjopfxHtml)
  873. {
  874. HtmlDocument doc1 = new HtmlDocument();
  875. doc1.LoadHtml(item.InnerHtml);
  876. HtmlNodeCollection bjopfxtdHtml = doc1.DocumentNode.SelectNodes("//td");
  877. if (bjopfxtdHtml.Count == 17)
  878. {
  879. string shuju = "";
  880. foreach (var item1 in bjopfxtdHtml)
  881. {
  882. shuju += item1.InnerText.Trim() + "|";
  883. }
  884. var ca_n=InsertCuringAnalysis_new(shuju, game.Id, url);
  885. calist.Add(ca_n);
  886. }
  887. }
  888. }
  889. catch (Exception e)
  890. {
  891. Trace.WriteLine("报错开始 开始:" + url);
  892. }
  893. }
  894. void IDisposable.Dispose()
  895. {
  896. // Console.WriteLine("我在释放");
  897. }
  898. #endregion
  899. }
  900. }