Tczj20x5.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data;
  5. using CP.Common;
  6. using MC.ORM;
  7. using MySql.Data.MySqlClient;
  8. namespace CP.Model
  9. {
  10. #region 浙江20选5基本模型
  11. [TableName("tczj20x5"), PrimaryKey("id")]
  12. public class Tczj20x5Info
  13. {
  14. /// <summary>
  15. /// 期数
  16. /// </summary>
  17. public int qi { get; set; }
  18. /// <summary>
  19. /// 开奖号第1位
  20. /// </summary>
  21. public int n1 { get; set; }
  22. /// <summary>
  23. /// 开奖号第2位
  24. /// </summary>
  25. public int n2 { get; set; }
  26. /// <summary>
  27. /// 开奖号第3位
  28. /// </summary>
  29. public int n3 { get; set; }
  30. /// <summary>
  31. /// 开奖号第4位
  32. /// </summary>
  33. public int n4 { get; set; }
  34. /// <summary>
  35. /// 开奖号第5位
  36. /// </summary>
  37. public int n5 { get; set; }
  38. /// <summary>
  39. /// 和值
  40. /// </summary>
  41. public int hz { get; set; }
  42. /// <summary>
  43. /// 跨度
  44. /// </summary>
  45. public int kd { get; set; }
  46. /// <summary>
  47. /// AC值
  48. /// </summary>
  49. public int ac { get; set; }
  50. /// <summary>
  51. /// 星期
  52. /// </summary>
  53. public int week { get; set; }
  54. /// <summary>
  55. /// 开奖日期
  56. /// </summary>
  57. public DateTime date { get; set; }
  58. /// <summary>
  59. /// 在列表中的排名..
  60. /// 用于遗漏计算.
  61. /// </summary>
  62. [Ignore]
  63. public int rank { get; set; }
  64. /// <summary>
  65. /// 号码
  66. /// </summary>
  67. public string opencode { get; set; }
  68. ///end
  69. }
  70. #endregion
  71. #region 体彩浙江20选5开奖信息完整模型
  72. [TableName("tczj20x5"), PrimaryKey("id")]
  73. public class Tczj20x5LongInfo : Tczj20x5Info
  74. {
  75. /// <summary>
  76. /// 开奖信息自动编号
  77. /// </summary>
  78. public int id { 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. /// 第1步(开奖号)状态 -1:未添加 2:完成 3:复查完成
  125. /// </summary>
  126. public int step1state { set; get; }
  127. /// <summary>
  128. /// 第2步(开奖详情)状态 -1:未添加 1:完成一半 2:完成 3:复查完成
  129. /// </summary>
  130. public int step2state { set; get; }
  131. [Ignore]
  132. public string isComplete
  133. {
  134. get
  135. {
  136. if (step2state == 3)
  137. return "<span style='color:green;'>是</span>";
  138. return "<span style='color:red;'>否</span>";
  139. }
  140. }
  141. }
  142. #endregion
  143. #region 走势图上的遗漏模型
  144. /// <summary>
  145. /// 20x5出号走势图上的遗漏模型
  146. /// </summary>
  147. public class zj20x5ChzsMissInfo
  148. {
  149. public string name { get; set; }
  150. /// <summary>
  151. /// 出号
  152. /// </summary>
  153. public int[] ch { get; set; }
  154. /// <summary>
  155. /// 三连号
  156. /// </summary>
  157. public int[] _3lh { get; set; }
  158. }
  159. /// <summary>
  160. /// 和值走势图上的遗漏
  161. /// </summary>
  162. public class zj20x5hzMissInfo
  163. {
  164. public string name { get; set; }
  165. public int[] hz { get; set; }
  166. public int[] hzjo { get; set; }
  167. public int[] hw { get; set; }
  168. public int[] hwdx { get; set; }
  169. public int[] hwjo { get; set; }
  170. }
  171. /// <summary>
  172. /// 20x5AC值走势图遗漏模型
  173. /// </summary>
  174. public class zj20x5AcMissInfo
  175. {
  176. public string name { get; set; }
  177. public int[] ac { get; set; }
  178. public int[] dx { get; set; }
  179. public int[] jo { get; set; }
  180. public int[] zh { get; set; }
  181. public int[] _012 { get; set; }
  182. public int[] zf { get; set; }
  183. }
  184. /// <summary>
  185. /// 20x5 跨度走势图遗漏模型
  186. /// </summary>
  187. public class zj20x5KdMissInfo
  188. {
  189. public string name { get; set; }
  190. public int[] kd { get; set; }
  191. public int[] dx { get; set; }
  192. public int[] jo { get; set; }
  193. public int[] zh { get; set; }
  194. public int[] _012 { get; set; }
  195. /// <summary>
  196. /// 振幅
  197. /// </summary>
  198. public int[] zf { get; set; }
  199. }
  200. /// <summary>
  201. /// 012路走势图上的遗漏模型
  202. /// </summary>
  203. public class zj20x5012MissInfo
  204. {
  205. /// <summary>
  206. /// 名称
  207. /// </summary>
  208. public string name { get; set; }
  209. /// <summary>
  210. /// 号码1形态
  211. /// </summary>
  212. public int[] w1 { get; set; }
  213. /// <summary>
  214. /// 号码2形态
  215. /// </summary>
  216. public int[] w2 { get; set; }
  217. public int[] w3 { get; set; }
  218. public int[] w4 { get; set; }
  219. public int[] w5 { get; set; }
  220. /// <summary>
  221. /// 大个数走势
  222. /// </summary>
  223. public int[] xt1 { get; set; }
  224. /// <summary>
  225. /// 小个数
  226. /// </summary>
  227. public int[] xt2 { get; set; }
  228. /// <summary>
  229. /// 3个数
  230. /// </summary>
  231. public int[] xt3 { get; set; }
  232. }
  233. /// <summary>
  234. /// 大小走势图上的遗漏模型
  235. /// </summary>
  236. public class zj20x5DxMissInfo
  237. {
  238. /// <summary>
  239. /// 名称
  240. /// </summary>
  241. public string name { get; set; }
  242. /// <summary>
  243. /// 号码1形态
  244. /// </summary>
  245. public int[] w1 { get; set; }
  246. /// <summary>
  247. /// 号码2形态
  248. /// </summary>
  249. public int[] w2 { get; set; }
  250. public int[] w3 { get; set; }
  251. public int[] w4 { get; set; }
  252. public int[] w5 { get; set; }
  253. /// <summary>
  254. /// 比值走势
  255. /// </summary>
  256. public int[] bz { get; set; }
  257. /// <summary>
  258. /// 大个数走势
  259. /// </summary>
  260. public int[] xt1 { get; set; }
  261. /// <summary>
  262. /// 小个数
  263. /// </summary>
  264. public int[] xt2 { get; set; }
  265. }
  266. #endregion
  267. /// <summary>
  268. /// 浙江20选5选数据库操作
  269. /// </summary>
  270. public class Tczj20x5Data : DataConnect
  271. {
  272. /// <summary>
  273. /// 所有的浙江20选5的数据
  274. /// </summary>
  275. /// <returns></returns>
  276. public static List<Tczj20x5Info> GetTczj20x5List()
  277. {
  278. List<Tczj20x5Info> list = new List<Tczj20x5Info>();
  279. string sql = string.Format("order by qi asc");
  280. DataConnect dc = new DataConnect();
  281. list = dc.db.Fetch<Tczj20x5Info>(sql);
  282. if (list != null && list.Count > 0)
  283. {
  284. for (int i = 0; i < list.Count; i++)
  285. {
  286. list[i].rank = i + 1;
  287. }
  288. }
  289. return list;
  290. }
  291. #region 开奖公告相关方法
  292. /// <summary>
  293. /// 获取开奖列表
  294. /// </summary>
  295. /// <param name="n">条数</param>
  296. /// <param name="type">默认0只有开奖号数据 1 带有开机号 2 带有试机号</param>
  297. /// <returns></returns>
  298. public static List<Tczj20x5LongInfo> GetList(int n = 30, bool isall = false)
  299. {
  300. string sql = $"where n1 > -1 order by qi desc limit {n}";
  301. if (isall)
  302. {
  303. sql = $"where n1 > -1 order by qi desc";
  304. }
  305. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  306. {
  307. return db.Fetch<Tczj20x5LongInfo>(sql);
  308. }
  309. }
  310. /// <summary>
  311. /// 获取最新开奖信息
  312. /// </summary>
  313. /// <returns></returns>
  314. public static Tczj20x5LongInfo GetTczj20X5NewInfo()
  315. {
  316. string sql = string.Format("where n1>-1 order by qi desc limit 1 ");
  317. DataConnect dc = new DataConnect();
  318. return dc.db.SingleOrDefault<Tczj20x5LongInfo>(sql);
  319. }
  320. /// <summary>
  321. /// 获取最新30条开奖信息
  322. /// </summary>
  323. /// <returns></returns>
  324. public static List<Tczj20x5LongInfo> GetTczj20x5Top30(int n = 30)
  325. {
  326. string sql = string.Format($"order by qi desc limit {n}");
  327. DataConnect dc = new DataConnect();
  328. return dc.db.Fetch<Tczj20x5LongInfo>(sql);
  329. }
  330. #region 根据期数获取某期开奖信息
  331. /// <summary>
  332. /// 根据期数获取某期开奖信息
  333. /// </summary>
  334. /// <param name="qi"></param>
  335. /// <returns></returns>
  336. public static Tczj20x5LongInfo GetTczj20x5InfoByQi(int qi)
  337. {
  338. string sql = string.Empty;
  339. if (qi == 0)
  340. sql = string.Format("order by qi desc limit 1");
  341. else
  342. sql = string.Format("where qi={0} limit 1", qi);
  343. DataConnect dc = new DataConnect();
  344. Tczj20x5LongInfo info = dc.db.SingleOrDefault<Tczj20x5LongInfo>(sql);
  345. return info;
  346. }
  347. #endregion
  348. #region 根据年份取出当年所有期数
  349. /// <summary>
  350. /// 根据年份取出当年所有期数
  351. /// </summary>
  352. /// <param name="year"></param>
  353. /// <returns></returns>
  354. public static List<int> GetTczj20x5QiListByYear(int year)
  355. {
  356. List<int> rlist = new List<int>();
  357. string sql = string.Format("where qi like '{0}%' order by qi desc", year);
  358. DataConnect dc = new DataConnect();
  359. var list = dc.db.Fetch<Tczj20x5Info>(sql);
  360. if (list != null && list.Count > 0)
  361. {
  362. for (int i = 0; i < list.Count; i++)
  363. {
  364. rlist.Add(list[i].qi);
  365. }
  366. }
  367. return rlist;
  368. }
  369. #endregion
  370. #endregion
  371. #region 开奖号抓取相关数据层方法
  372. private static readonly object _lock = new object();
  373. public static void Add(Tczj20x5LongInfo info)
  374. {
  375. if (info == null)
  376. return;
  377. if (info.qi <= 0)
  378. return;
  379. info.opencode = $"{info.n1:00},{info.n2:00},{info.n3:00},{info.n4:00},{info.n5:00}";
  380. //和值
  381. info.hz = info.n1 + info.n2 + info.n3 + info.n4 + info.n5;
  382. List<int> kjh = new List<int> { info.n1, info.n2, info.n3, info.n4, info.n5 };
  383. kjh.Sort();
  384. info.n1 = kjh[0];
  385. info.n2 = kjh[1];
  386. info.n3 = kjh[2];
  387. info.n4 = kjh[3];
  388. info.n5 = kjh[4];
  389. //跨度
  390. info.kd = info.n5 - info.n1;
  391. //星期
  392. info.week = Utils.GetIntWeek(info.date.DayOfWeek.ToString());
  393. //AC值
  394. string[] kjhstr = { info.n1.ToString(), info.n2.ToString(), info.n3.ToString(), info.n4.ToString(), info.n5.ToString() };
  395. info.ac = ToolUtils.GetAC(kjhstr);
  396. lock (_lock)
  397. {
  398. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  399. {
  400. if (db.Exists<Tczj20x5LongInfo>($"where qi={info.qi}"))
  401. return;
  402. db.Insert(info);
  403. try
  404. {
  405. //更新api
  406. DoHttpHelp.UpdateWebApi(DFEnum.tczj20x5.ToString());
  407. }
  408. catch (Exception) { }
  409. }
  410. }
  411. }
  412. public static void Update(Tczj20x5LongInfo model)
  413. {
  414. if (model == null)
  415. return;
  416. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  417. {
  418. var entity = db.SingleOrDefault<Tczj20x5LongInfo>(model.id);
  419. db.Update(entity);
  420. }
  421. }
  422. public static Tczj20x5LongInfo GetLastOne()
  423. {
  424. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  425. {
  426. var entity = db.SingleOrDefault<Tczj20x5LongInfo>($"order by qi desc limit 1");
  427. return entity;
  428. }
  429. }
  430. #endregion
  431. }
  432. }