Fcxj18x7.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621
  1. using CP.Common;
  2. using MC.ORM;
  3. using MySql.Data.MySqlClient;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace CP.Model
  10. {
  11. /// <summary>
  12. /// 新疆18选7
  13. /// </summary>
  14. [TableName("fcxj18x7"), PrimaryKey("id")]
  15. public class Fcxj18x7Info
  16. {
  17. /// <summary>
  18. /// 开奖信息自动编号
  19. /// </summary>
  20. public int id { get; set; }
  21. /// <summary>
  22. /// 期数
  23. /// </summary>
  24. public int qi { get; set; }
  25. /// <summary>
  26. /// 开奖号第1位
  27. /// </summary>
  28. public int n1 { get; set; }
  29. /// <summary>
  30. /// 开奖号第2位
  31. /// </summary>
  32. public int n2 { get; set; }
  33. /// <summary>
  34. /// 开奖号第3位
  35. /// </summary>
  36. public int n3 { get; set; }
  37. /// <summary>
  38. /// 开奖号第4位
  39. /// </summary>
  40. public int n4 { get; set; }
  41. /// <summary>
  42. /// 开奖号第5位
  43. /// </summary>
  44. public int n5 { get; set; }
  45. /// <summary>
  46. /// 开奖号第6位
  47. /// </summary>
  48. public int n6 { get; set; }
  49. /// <summary>
  50. /// 开奖号第7位
  51. /// </summary>
  52. public int n7 { get; set; }
  53. /// <summary>
  54. /// 和值
  55. /// </summary>
  56. public int hz { get; set; }
  57. /// <summary>
  58. /// 跨度
  59. /// </summary>
  60. public int kd { get; set; }
  61. /// <summary>
  62. /// AC值
  63. /// </summary>
  64. public int ac { get; set; }
  65. /// <summary>
  66. /// 星期
  67. /// </summary>
  68. public int week { get; set; }
  69. /// <summary>
  70. /// 开奖日期
  71. /// </summary>
  72. public DateTime date { get; set; }
  73. /// <summary>
  74. /// 在列表中的排名..
  75. /// 用于遗漏计算.
  76. /// </summary>
  77. [Ignore]
  78. public int rank { get; set; }
  79. /// <summary>
  80. /// 一等奖注数
  81. /// </summary>
  82. public string zj1 { get; set; }
  83. /// <summary>
  84. /// 一等奖金额
  85. /// </summary>
  86. public string jo1 { get; set; }
  87. /// <summary>
  88. /// 二等奖注数
  89. /// </summary>
  90. public string zj2 { get; set; }
  91. /// <summary>
  92. /// 二等奖金额
  93. /// </summary>
  94. public string jo2 { get; set; }
  95. /// <summary>
  96. /// 三等奖注数
  97. /// </summary>
  98. public string zj3 { get; set; }
  99. /// <summary>
  100. /// 三等奖金额
  101. /// </summary>
  102. public string jo3 { get; set; }
  103. /// <summary>
  104. /// 开奖详情json
  105. /// </summary>
  106. public string winbonus { set; get; }
  107. /// <summary>
  108. /// 添加开奖日期
  109. /// </summary>
  110. public DateTime addtime { get; set; }
  111. /// <summary>
  112. /// 投注金额
  113. /// </summary>
  114. public string tzmoney { get; set; }
  115. /// <summary>
  116. /// 奖池
  117. /// </summary>
  118. public string nextmoney { get; set; }
  119. /// <summary>
  120. ///是否复查
  121. /// </summary>
  122. public int ischeck { get; set; }
  123. /// <summary>
  124. /// 号码
  125. /// </summary>
  126. public string opencode { get; set; }
  127. }
  128. #region 18选7完整模型
  129. /// <summary>
  130. /// 福彩新疆25选7完整模型
  131. /// </summary>
  132. [TableName("fcxj18x7"), PrimaryKey("id")]
  133. public class Fcxj18x7LongInfo : Fcxj18x7Info
  134. {
  135. /// <summary>
  136. /// 自动编号
  137. /// </summary>
  138. public int id { get; set; }
  139. /// <summary>
  140. /// 特等奖注数
  141. /// </summary>
  142. public string zj { get; set; }
  143. /// <summary>
  144. /// 特等奖金额
  145. /// </summary>
  146. public string jo { get; set; }
  147. /// <summary>
  148. /// 一等奖注数
  149. /// </summary>
  150. public string zj1 { get; set; }
  151. /// <summary>
  152. /// 一等奖金额
  153. /// </summary>
  154. public string jo1 { get; set; }
  155. /// <summary>
  156. /// 二等奖注数
  157. /// </summary>
  158. public string zj2 { get; set; }
  159. /// <summary>
  160. /// 二等奖金额
  161. /// </summary>
  162. public string jo2 { get; set; }
  163. /// <summary>
  164. /// 三等奖注数
  165. /// </summary>
  166. public string zj3 { get; set; }
  167. /// <summary>
  168. /// 三等奖金额
  169. /// </summary>
  170. public string jo3 { get; set; }
  171. /// <summary>
  172. /// 四等奖注数
  173. /// </summary>
  174. public string zj4 { get; set; }
  175. /// <summary>
  176. /// 四等奖金额
  177. /// </summary>
  178. public string jo4 { get; set; }
  179. /// <summary>
  180. /// 五等奖注数
  181. /// </summary>
  182. public string zj5 { get; set; }
  183. /// <summary>
  184. /// 五等奖金额
  185. /// </summary>
  186. public string jo5 { get; set; }
  187. /// <summary>
  188. /// 六等奖注数
  189. /// </summary>
  190. public string zj6 { get; set; }
  191. /// <summary>
  192. /// 六等奖金额
  193. /// </summary>
  194. public string jo6 { get; set; }
  195. /// <summary>
  196. /// 七等奖注数
  197. /// </summary>
  198. public string zj7 { get; set; }
  199. /// <summary>
  200. /// 七等奖金额
  201. /// </summary>
  202. public string jo7 { get; set; }
  203. /// <summary>
  204. /// 开奖详情json
  205. /// </summary>
  206. public string winbonus { set; get; }
  207. /// <summary>
  208. /// 添加时间
  209. /// </summary>
  210. public DateTime addtime { get; set; }
  211. /// <summary>
  212. /// 下期奖池
  213. /// </summary>
  214. public string nextmoney { get; set; }
  215. /// <summary>
  216. /// 当期投注金额
  217. /// </summary>
  218. public string tzmoney { get; set; }
  219. /// <summary>
  220. /// 是否复查开奖号
  221. /// </summary>
  222. public int ischeck { get; set; }
  223. /// <summary>
  224. /// 第1步(开奖号)状态 -1:未添加 2:完成 3:复查完成
  225. /// </summary>
  226. public int step1state { set; get; }
  227. /// <summary>
  228. /// 第2步(开奖详情)状态 -1:未添加 1:完成一半 2:完成 3:复查完成
  229. /// </summary>
  230. public int step2state { set; get; }
  231. [Ignore]
  232. public string isComplete
  233. {
  234. get
  235. {
  236. if (step2state == 3)
  237. return "<span style='color:green;'>是</span>";
  238. return "<span style='color:red;'>否</span>";
  239. }
  240. }
  241. }
  242. #endregion
  243. /// <summary>
  244. /// 新疆18选7的数据库操作.
  245. /// </summary>
  246. public class Fcxj18x7Data : DataConnect
  247. {
  248. /// <summary>
  249. /// 根据期数获取某期开奖信息
  250. /// </summary>
  251. /// <param name="qi"></param>
  252. /// <returns></returns>
  253. public static Fcxj18x7Info GetQi(int qi)
  254. {
  255. string sql = string.Empty;
  256. if (qi == 0)
  257. sql = string.Format("order by qi desc limit 1");
  258. else
  259. sql = string.Format("where qi={0} limit 1", qi);
  260. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  261. {
  262. Fcxj18x7Info info = db.SingleOrDefault<Fcxj18x7Info>(sql);
  263. return info;
  264. }
  265. }
  266. #region 开奖号抓取相关数据层方法
  267. private static readonly object _lock = new object();
  268. public static void Add(Fcxj18x7Info info)
  269. {
  270. if (info == null)
  271. return;
  272. if (info.qi <= 0)
  273. return;
  274. info.opencode = $"{info.n1:00},{info.n2:00},{info.n3:00},{info.n4:00},{info.n5:00},{info.n6:00},{info.n7:00}";
  275. //和值
  276. info.hz = info.n1 + info.n2 + info.n3 + info.n4 + info.n5 + info.n6 + info.n7;
  277. //星期
  278. info.week = Utils.GetIntWeek(info.date.DayOfWeek.ToString());
  279. //AC值
  280. string[] kjhstr = { info.n1.ToString(), info.n2.ToString(), info.n3.ToString(), info.n4.ToString(), info.n5.ToString(), info.n6.ToString(), info.n7.ToString() };
  281. info.ac = ToolUtils.GetAC(kjhstr);
  282. int[] arr = { info.n1, info.n2, info.n3, info.n4, info.n5, info.n6, info.n7 };
  283. info.kd = arr.Max() - arr.Min();
  284. lock (_lock)
  285. {
  286. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  287. {
  288. if (db.Exists<Fcxj18x7Info>($"where qi={info.qi}"))
  289. return;
  290. db.Insert(info);
  291. try
  292. {
  293. //更新api
  294. DoHttpHelp.UpdateWebApi(DFEnum.fcxj18x7.ToString());
  295. }
  296. catch (Exception) { }
  297. }
  298. }
  299. }
  300. public static void Update(Fcxj18x7Info model)
  301. {
  302. if (model == null)
  303. return;
  304. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  305. {
  306. var entity = db.SingleOrDefault<Fcxj18x7Info>(model.id);
  307. db.Update(entity);
  308. }
  309. }
  310. public static Fcxj18x7Info GetLastOne()
  311. {
  312. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  313. {
  314. var entity = db.SingleOrDefault<Fcxj18x7Info>($"order by qi desc limit 1");
  315. return entity ?? new Fcxj18x7Info();
  316. }
  317. }
  318. /// <summary>
  319. /// 获取开奖列表
  320. /// </summary>
  321. /// <param name="n">条数</param>
  322. /// <param name="type">默认0只有开奖号数据 1 带有开机号 2 带有试机号</param>
  323. /// <returns></returns>
  324. public static List<Fcxj18x7Info> GetList(int n = 30, bool isall = false)
  325. {
  326. string sql = $"where n1 > -1 order by qi desc limit {n}";
  327. if (isall)
  328. {
  329. sql = $"where n1 > -1 order by qi desc";
  330. }
  331. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  332. {
  333. return db.Fetch<Fcxj18x7Info>(sql);
  334. }
  335. }
  336. #endregion
  337. /// <summary>
  338. /// 数据库中取出所有 新疆25选7数据
  339. /// </summary>
  340. /// <returns></returns>
  341. public static List<Fcxj18x7Info> GetFcxj18x7List()
  342. {
  343. List<Fcxj18x7Info> list = new List<Fcxj18x7Info>();
  344. string sql = string.Format("order by qi asc");
  345. DataConnect dc = new DataConnect();
  346. list = dc.db.Fetch<Fcxj18x7Info>(sql);
  347. if (list != null && list.Count > 0)
  348. {
  349. for (int i = 0; i < list.Count; i++)
  350. {
  351. list[i].rank = i + 1;
  352. }
  353. }
  354. return list;
  355. }
  356. #region 开奖公告相关方法
  357. /// <summary>
  358. /// 获取最新开奖信息
  359. /// </summary>
  360. /// <returns></returns>
  361. public static Fcxj18x7LongInfo GetFcxj25X7NewInfo()
  362. {
  363. string sql = string.Format("where n1>-1 order by qi desc limit 1 ");
  364. DataConnect dc = new DataConnect();
  365. return dc.db.SingleOrDefault<Fcxj18x7LongInfo>(sql);
  366. }
  367. /// <summary>
  368. /// 获取最新30条开奖信息
  369. /// </summary>
  370. /// <returns></returns>
  371. public static List<Fcxj18x7LongInfo> GetFcxj18x7Top30(int n = 30)
  372. {
  373. string sql = string.Format($"order by qi desc limit {n}");
  374. DataConnect dc = new DataConnect();
  375. return dc.db.Fetch<Fcxj18x7LongInfo>(sql);
  376. }
  377. #region 根据期数获取某期开奖信息
  378. /// <summary>
  379. /// 根据期数获取某期开奖信息
  380. /// </summary>
  381. /// <param name="qi"></param>
  382. /// <returns></returns>
  383. public static Fcxj18x7LongInfo GetFcxj18x7InfoByQi(int qi)
  384. {
  385. string sql = string.Empty;
  386. if (qi == 0)
  387. sql = string.Format("order by qi desc limit 1");
  388. else
  389. sql = string.Format("where qi={0} limit 1", qi);
  390. DataConnect dc = new DataConnect();
  391. Fcxj18x7LongInfo info = dc.db.SingleOrDefault<Fcxj18x7LongInfo>(sql);
  392. return info;
  393. }
  394. #endregion
  395. #region 根据年份取出当年所有期数
  396. /// <summary>
  397. /// 根据年份取出当年所有期数
  398. /// </summary>
  399. /// <param name="year"></param>
  400. /// <returns></returns>
  401. public static List<int> GetFcxj18x7QiListByYear(int year)
  402. {
  403. List<int> rlist = new List<int>();
  404. string sql = string.Format("where qi like '{0}%' order by qi desc", year);
  405. DataConnect dc = new DataConnect();
  406. var list = dc.db.Fetch<Fcxj18x7Info>(sql);
  407. if (list != null && list.Count > 0)
  408. {
  409. for (int i = 0; i < list.Count; i++)
  410. {
  411. rlist.Add(list[i].qi);
  412. }
  413. }
  414. return rlist;
  415. }
  416. #endregion
  417. #endregion
  418. #region 开奖号抓取相关数据层方法
  419. public static void Add(Fcxj18x7LongInfo info)
  420. {
  421. if (info == null)
  422. return;
  423. if (info.qi <= 0)
  424. return;
  425. info.opencode = $"{info.n1:00},{info.n2:00},{info.n3:00},{info.n4:00},{info.n5:00},{info.n6:00},{info.n7:00}";
  426. //和值
  427. info.hz = info.n1 + info.n2 + info.n3 + info.n4 + info.n5 + info.n6 + info.n7;
  428. //星期
  429. info.week = Utils.GetIntWeek(info.date.DayOfWeek.ToString());
  430. List<int> kjh = new List<int> { info.n1, info.n2, info.n3, info.n4, info.n5, info.n6, info.n7 };
  431. kjh.Sort();
  432. info.n1 = kjh[0];
  433. info.n2 = kjh[1];
  434. info.n3 = kjh[2];
  435. info.n4 = kjh[3];
  436. info.n5 = kjh[4];
  437. info.n6 = kjh[5];
  438. info.n7 = kjh[6];
  439. //AC值
  440. string[] kjhstr = { info.n1.ToString(), info.n2.ToString(), info.n3.ToString(), info.n4.ToString(), info.n5.ToString(), info.n6.ToString(), info.n7.ToString() };
  441. //检查开奖号是否有重复值
  442. int[] array = { info.n1, info.n2, info.n3, info.n4, info.n5, info.n6, info.n7 };
  443. info.ac = ToolUtils.GetAC(kjhstr);
  444. info.kd = info.n7 - info.n1;
  445. lock (_lock)
  446. {
  447. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  448. {
  449. if (db.Exists<Fcxj18x7LongInfo>($"where qi={info.qi}"))
  450. return;
  451. db.Insert(info);
  452. try
  453. {
  454. //更新api
  455. DoHttpHelp.UpdateWebApi(DFEnum.fcxj25x7.ToString());
  456. }
  457. catch (Exception) { }
  458. }
  459. }
  460. }
  461. public static void Update(Fcxj18x7LongInfo model)
  462. {
  463. if (model == null)
  464. return;
  465. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  466. {
  467. var entity = db.SingleOrDefault<Fcxj18x7LongInfo>(model.id);
  468. db.Update(entity);
  469. }
  470. }
  471. #endregion
  472. }
  473. #region 新疆18选7遗漏模型
  474. /// <summary>
  475. /// 25选7出号走势图上的遗漏模型
  476. /// </summary>
  477. public class Fcxj18x7MissInfo
  478. {
  479. /// <summary>
  480. /// 名称
  481. /// </summary>
  482. public string name { get; set; }
  483. /// <summary>
  484. /// 号码遗漏
  485. /// </summary>
  486. public int[] ch { get; set; }
  487. }
  488. /// <summary>
  489. /// 和值遗漏模型
  490. /// </summary>
  491. public class Fcxj18x7HzMissInfo
  492. {
  493. public string name { get; set; }
  494. public int[] hz { get; set; }
  495. public int[] hzjo { get; set; }
  496. public int[] hw { get; set; }
  497. public int[] hwdx { get; set; }
  498. public int[] hwjo { get; set; }
  499. }
  500. /// <summary>
  501. /// 跨度值遗漏模型
  502. /// </summary>
  503. public class Fcxj18x7KdMissInfo
  504. {
  505. /// <summary>
  506. /// 名称
  507. /// </summary>
  508. public string name { get; set; }
  509. /// <summary>
  510. /// 跨度
  511. /// </summary>
  512. public int[] kd { get; set; }
  513. /// <summary>
  514. ///跨度奇偶
  515. /// </summary>
  516. public int[] jo { get; set; }
  517. /// <summary>
  518. /// 跨度大小
  519. /// </summary>
  520. public int[] dx { get; set; }
  521. /// <summary>
  522. /// 跨度质合
  523. /// </summary>
  524. public int[] zh { get; set; }
  525. }
  526. #endregion
  527. }