Tcsdklpk3.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555
  1. using CP.Cache;
  2. using CP.Common;
  3. using CP.Model;
  4. using MC.ORM;
  5. using MySql.Data.MySqlClient;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace CP.Business
  12. {
  13. public class Tcsdklpk3 : BaseBll
  14. {
  15. /// <summary>
  16. /// 缓存
  17. /// </summar>y
  18. static WMCache cache = WMCache.GetCacheService();
  19. /// <summary>
  20. /// 某号码上一次出现时的数据
  21. /// </summary>
  22. /// <param name="val"></param>
  23. /// <param name="rank"></param>
  24. /// <returns></returns>
  25. public static Tcsdklpk3Info GetLastNumTcsdklpk3Info(ref List<Tcsdklpk3Info> list, int val, int rank)
  26. {
  27. Tcsdklpk3Info info = new Tcsdklpk3Info();
  28. if (list != null && list.Count > 0)
  29. {
  30. int size = list.Count;
  31. for (int i = rank - 2; i >= 0; i--)
  32. {
  33. List<int> kjh = new List<int> { list[i].n1, list[i].n2, list[i].n3 };
  34. if (kjh.Contains(val))
  35. {
  36. info = list[i];
  37. return info;
  38. }
  39. }
  40. }
  41. return info;
  42. }
  43. /// <summary>
  44. /// 上一次号码形态的情况
  45. /// </summary>
  46. /// <param name="val"></param>
  47. /// <param name="rank"></param>
  48. /// <returns></returns>
  49. public static Tcsdklpk3Info GetLastHmxtTcsdklpk3Info(ref List<Tcsdklpk3Info> list, string val, int rank)
  50. {
  51. Tcsdklpk3Info info = new Tcsdklpk3Info();
  52. if (list != null && list.Count > 0)
  53. {
  54. for (int i = rank - 2; i >= 0; i--)
  55. {
  56. if (ZstUtils.GetTcsdKlpk3Hmxt(new List<int>() { list[i].n1, list[i].n2, list[i].n3 }, new List<int>() { list[i].hs1, list[i].hs2, list[i].hs3 }) == val)
  57. {
  58. return list[i];
  59. }
  60. }
  61. }
  62. return info;
  63. }
  64. /// <summary>
  65. /// 根据当前出号和排名,查询出上一次出此号时的数据
  66. /// 主要用在遗漏上
  67. /// </summary>
  68. /// <param name="val"></param>
  69. /// <param name="rank"></param>
  70. /// <returns></returns>
  71. public static Tcsdklpk3Info GetLastHmTcsdklpk3Info(ref List<Tcsdklpk3Info> list, int val, int rank, int dnw)
  72. {
  73. Tcsdklpk3Info info = new Tcsdklpk3Info();
  74. if (list != null && list.Count > 0)
  75. {
  76. var hm = 0;
  77. for (int i = rank - 2; i >= 0; i--)
  78. {
  79. if (dnw == 1)
  80. hm = list[i].n1;
  81. else if (dnw == 2)
  82. hm = list[i].n2;
  83. else if (dnw == 3)
  84. hm = list[i].n3;
  85. if (hm == val)
  86. {
  87. info = list[i];
  88. return info;
  89. }
  90. }
  91. }
  92. return info;
  93. }
  94. /// <summary>
  95. /// 上一次和值的情况
  96. /// </summary>
  97. /// <param name="val"></param>
  98. /// <param name="rank"></param>
  99. /// <returns></returns>
  100. public static Tcsdklpk3Info GetLastHzTcsdklpk3Info(ref List<Tcsdklpk3Info> list, int val, int rank)
  101. {
  102. Tcsdklpk3Info info = new Tcsdklpk3Info();
  103. if (list != null && list.Count > 0)
  104. {
  105. for (int i = rank - 2; i >= 0; i--)
  106. {
  107. if (list[i].hz == val)
  108. {
  109. return list[i];
  110. }
  111. }
  112. }
  113. return info;
  114. }
  115. /// <summary>
  116. /// 上一次大小的数据
  117. /// </summary>
  118. /// <param name="val"></param>
  119. /// <param name="rank"></param>
  120. /// <returns></returns>
  121. public static Tcsdklpk3Info GetLastDxTcsdklpk3Info(ref List<Tcsdklpk3Info> list, int val, int rank, int dnw)
  122. {
  123. Tcsdklpk3Info info = new Tcsdklpk3Info();
  124. if (list != null && list.Count > 0)
  125. {
  126. for (int i = rank - 2; i >= 0; i--)
  127. {
  128. var hm = 0;
  129. if (dnw == 1)
  130. hm = list[i].n1;
  131. else if (dnw == 2)
  132. hm = list[i].n2;
  133. else if (dnw == 3)
  134. hm = list[i].n3;
  135. if (ZstUtils.GetDxBymiddle(hm, 7) == val)
  136. {
  137. return list[i];
  138. }
  139. }
  140. }
  141. return info;
  142. }
  143. /// <summary>
  144. /// 上一次奇偶的情况
  145. /// </summary>
  146. /// <param name="val"></param>
  147. /// <param name="rank"></param>
  148. /// <returns></returns>
  149. public static Tcsdklpk3Info GetLastJoTcsdklpk3Info(ref List<Tcsdklpk3Info> list, int val, int rank, int dnw)
  150. {
  151. Tcsdklpk3Info info = new Tcsdklpk3Info();
  152. if (list != null && list.Count > 0)
  153. {
  154. for (int i = rank - 2; i >= 0; i--)
  155. {
  156. var hm = 0;
  157. if (dnw == 1)
  158. hm = list[i].n1;
  159. else if (dnw == 2)
  160. hm = list[i].n2;
  161. else if (dnw == 3)
  162. hm = list[i].n3;
  163. if (ZstUtils.GetJo(hm) == val)
  164. {
  165. return list[i];
  166. }
  167. }
  168. }
  169. return info;
  170. }
  171. /// <summary>
  172. /// 上一次质合的情况
  173. /// </summary>
  174. /// <param name="val"></param>
  175. /// <param name="rank"></param>
  176. /// <returns></returns>
  177. public static Tcsdklpk3Info GetLastZhTcsdklpk3Info(ref List<Tcsdklpk3Info> list, int val, int rank, int dnw)
  178. {
  179. Tcsdklpk3Info info = new Tcsdklpk3Info();
  180. if (list != null && list.Count > 0)
  181. {
  182. for (int i = rank - 2; i >= 0; i--)
  183. {
  184. var hm = 0;
  185. if (dnw == 1)
  186. hm = list[i].n1;
  187. else if (dnw == 2)
  188. hm = list[i].n2;
  189. else if (dnw == 3)
  190. hm = list[i].n3;
  191. if (ZstUtils.GetZh(hm) == val)
  192. {
  193. return list[i];
  194. }
  195. }
  196. }
  197. return info;
  198. }
  199. /// <summary>
  200. /// 上一次质合比val的数据
  201. /// </summary>
  202. /// <param name="val"></param>
  203. /// <param name="rank"></param>
  204. /// <returns></returns>
  205. public static Tcsdklpk3Info GetLastZhbTcsdklpk3Info(ref List<Tcsdklpk3Info> list, int szh, int ezh, int rank)
  206. {
  207. Tcsdklpk3Info data = new Tcsdklpk3Info();
  208. if (list != null && list.Count > 0)
  209. {
  210. for (int i = rank - 2; i >= 0; i--)
  211. {
  212. var info = list[i];
  213. List<int> kjh = new List<int> { info.n1, info.n2, info.n3 };
  214. var zhb = ZstUtils.GetZhb(kjh);
  215. if (zhb == $"{szh}:{ezh}")
  216. {
  217. data = list[i];
  218. return data;
  219. }
  220. }
  221. }
  222. return data;
  223. }
  224. /// <summary>
  225. /// 上一次奇偶比val的数据
  226. /// </summary>
  227. /// <param name="val"></param>
  228. /// <param name="rank"></param>
  229. /// <returns></returns>
  230. public static Tcsdklpk3Info GetLastJobTcsdklpk3Info(ref List<Tcsdklpk3Info> list, int sjo, int ejo, int rank)
  231. {
  232. Tcsdklpk3Info data = new Tcsdklpk3Info();
  233. if (list != null && list.Count > 0)
  234. {
  235. for (int i = rank - 2; i >= 0; i--)
  236. {
  237. var info = list[i];
  238. List<int> kjh = new List<int> { info.n1, info.n2, info.n3 };
  239. var job = ZstUtils.GetJob(kjh);
  240. if (job == $"{sjo}:{ejo}")
  241. {
  242. data = list[i];
  243. return data;
  244. }
  245. }
  246. }
  247. return data;
  248. }
  249. /// <summary>
  250. /// 上一次大小比val的数据
  251. /// </summary>
  252. /// <param name="val"></param>
  253. /// <param name="rank"></param>
  254. /// <returns></returns>
  255. public static Tcsdklpk3Info GetLastDxbTcsdklpk3Info(ref List<Tcsdklpk3Info> list, int sdx, int edx, int rank)
  256. {
  257. Tcsdklpk3Info data = new Tcsdklpk3Info();
  258. if (list != null && list.Count > 0)
  259. {
  260. for (int i = rank - 2; i >= 0; i--)
  261. {
  262. var info = list[i];
  263. List<int> kjh = new List<int> { info.n1, info.n2, info.n3 };
  264. var job = ZstUtils.GetDxb(kjh, 40);
  265. if (job == $"{sdx}:{edx}")
  266. {
  267. data = list[i];
  268. return data;
  269. }
  270. }
  271. }
  272. return data;
  273. }
  274. /// <summary>
  275. /// 上一次大小形态的情况
  276. /// </summary>
  277. /// <param name="val"></param>
  278. /// <param name="rank"></param>
  279. /// <returns></returns>
  280. public static Tcsdklpk3Info GetLastDxxtTcsdklpk3Info(ref List<Tcsdklpk3Info> list, string val, int rank)
  281. {
  282. Tcsdklpk3Info info = new Tcsdklpk3Info();
  283. if (list != null && list.Count > 0)
  284. {
  285. for (int i = rank - 2; i >= 0; i--)
  286. {
  287. if (ZstUtils.GetDxxtByMiddle(new List<int>() { list[i].n1, list[i].n2, list[i].n3 }, 7, false) == val)
  288. {
  289. return list[i];
  290. }
  291. }
  292. }
  293. return info;
  294. }
  295. /// <summary>
  296. /// 上一次奇偶形态的情况
  297. /// </summary>
  298. /// <param name="val"></param>
  299. /// <param name="rank"></param>
  300. /// <returns></returns>
  301. public static Tcsdklpk3Info GetLastJoxtTcsdklpk3Info(ref List<Tcsdklpk3Info> list, string val, int rank)
  302. {
  303. Tcsdklpk3Info info = new Tcsdklpk3Info();
  304. if (list != null && list.Count > 0)
  305. {
  306. for (int i = rank - 2; i >= 0; i--)
  307. {
  308. if (ZstUtils.GetJoxt(new List<int>() { list[i].n1, list[i].n2, list[i].n3 }, false) == val)
  309. {
  310. return list[i];
  311. }
  312. }
  313. }
  314. return info;
  315. }
  316. /// <summary>
  317. /// 上一次质合形态的情况
  318. /// </summary>
  319. /// <param name="val"></param>
  320. /// <param name="rank"></param>
  321. /// <returns></returns>
  322. public static Tcsdklpk3Info GetLastZhxtTcsdklpk3Info(ref List<Tcsdklpk3Info> list, string val, int rank)
  323. {
  324. Tcsdklpk3Info info = new Tcsdklpk3Info();
  325. if (list != null && list.Count > 0)
  326. {
  327. for (int i = rank - 2; i >= 0; i--)
  328. {
  329. if (ZstUtils.GetZhxt(new List<int>() { list[i].n1, list[i].n2, list[i].n3 }, false) == val)
  330. {
  331. return list[i];
  332. }
  333. }
  334. }
  335. return info;
  336. }
  337. /// <summary>
  338. /// 上一其和尾val的数据
  339. /// </summary>
  340. /// <param name="val"></param>
  341. /// <param name="rank"></param>
  342. /// <returns></returns>
  343. public static Tcsdklpk3Info GetLastHwTcsdklpk3Info(ref List<Tcsdklpk3Info> list, int val, int rank)
  344. {
  345. Tcsdklpk3Info info = new Tcsdklpk3Info();
  346. if (list != null && list.Count > 0)
  347. {
  348. for (int i = rank - 2; i >= 0; i--)
  349. {
  350. if (ZstUtils.GetHw(list[i].hz) == val)
  351. {
  352. info = list[i];
  353. return info;
  354. }
  355. }
  356. }
  357. return info;
  358. }
  359. /// <summary>
  360. /// 上一次花色的数据
  361. /// </summary>
  362. /// <param name="val"></param>
  363. /// <param name="rank"></param>
  364. /// <returns></returns>
  365. public static Tcsdklpk3Info GetLastHsTcsdklpk3Info(ref List<Tcsdklpk3Info> list, int val, int rank, int dnw)
  366. {
  367. Tcsdklpk3Info info = new Tcsdklpk3Info();
  368. if (list != null && list.Count > 0)
  369. {
  370. for (int i = rank - 2; i >= 0; i--)
  371. {
  372. var hs = 0;
  373. if (dnw == 1)
  374. hs = list[i].hs1;
  375. else if (dnw == 2)
  376. hs = list[i].hs2;
  377. else if (dnw == 3)
  378. hs = list[i].hs2;
  379. if (hs == val)
  380. {
  381. return list[i];
  382. }
  383. }
  384. }
  385. return info;
  386. }
  387. /// <summary>
  388. /// 按条件筛选数据
  389. /// </summary>
  390. /// <param name="pagesize"></param>
  391. /// <param name="year"></param>
  392. /// <param name="sqi"></param>
  393. /// <param name="eqi"></param>
  394. /// <param name="week"></param>
  395. /// <returns></returns>
  396. public static List<Tcsdklpk3Info> GetTcsdklpk3List(ref List<Tcsdklpk3Info> datalist, int pagesize, string day)
  397. {
  398. List<Tcsdklpk3Info> list = datalist;
  399. List<Tcsdklpk3Info> rlist = new List<Tcsdklpk3Info>();
  400. if (list != null && list.Count > 0)
  401. {
  402. int size = list.Count;
  403. if (pagesize > 0)
  404. {
  405. for (int i = (size - pagesize); i < size; i++)
  406. {
  407. rlist.Add(list[i]);
  408. }
  409. return rlist;
  410. }
  411. if (!string.IsNullOrWhiteSpace(day))
  412. {
  413. rlist.Clear();
  414. var stime = TypeConverter.ObjectToDateTime(day);
  415. var etime = stime.AddDays(1);
  416. rlist = datalist.Where(n => n.date > stime && n.date < etime).ToList();
  417. return rlist;
  418. }
  419. }
  420. return rlist;
  421. }
  422. /// <summary>
  423. /// 获取最近多少天数据
  424. /// </summary>
  425. /// <param name="ename"></param>
  426. /// <param name="pagesize"></param>
  427. /// <param name="n"></param>
  428. /// <returns></returns>
  429. public static List<Tcsdklpk3Info> GetList(string ename, int pagesize, int n = 30)
  430. {
  431. string key = $"DATA-{ename}-{pagesize * n}";
  432. List<Tcsdklpk3Info> list = cache.GetObject<List<Tcsdklpk3Info>>(key);
  433. if (list == null)
  434. {
  435. #region 获取数据
  436. list = GetList(pagesize * n);
  437. #endregion
  438. cache.AddObject(key, list, (int)CacheTime.Mintime);
  439. }
  440. return list;
  441. }
  442. /// <summary>
  443. /// 最近N期的数据列表
  444. /// </summary>
  445. /// <returns></returns>
  446. public static List<Tcsdklpk3Info> GetList(int limit = 2000)
  447. {
  448. string sql = $"order by qi desc limit {limit}";
  449. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  450. {
  451. var list = db.Fetch<Tcsdklpk3Info>(sql).OrderBy(n => n.qi).ToList();
  452. var outlist = new List<Tcsdklpk3Info>();
  453. if (list != null && list.Count > 0)
  454. {
  455. var size = list.Count;
  456. for (int i = 0; i < size; i++)
  457. {
  458. Tcsdklpk3Info info = list[i];
  459. info.rank = i + 1;
  460. outlist.Add(info);
  461. }
  462. }
  463. return outlist;
  464. }
  465. }
  466. /// <summary>
  467. /// 获取指定时间内的数据
  468. /// </summary>
  469. /// <param name="ename"></param>
  470. /// <param name="sqi"></param>
  471. /// <param name="eqi"></param>
  472. /// <returns></returns>
  473. public static List<Tcsdklpk3Info> GetDayKjList(string ename, DateTime sqi, DateTime eqi)
  474. {
  475. string key = $"DATA-{ename}-{sqi}-{eqi}";
  476. List<Tcsdklpk3Info> list = cache.GetObject<List<Tcsdklpk3Info>>(key);
  477. if (list == null)
  478. {
  479. #region 获取数据
  480. list = GetOneDayKjList(sqi, eqi);
  481. #endregion
  482. cache.AddObject(key, list, (int)CacheTime.Expert);
  483. }
  484. return list;
  485. }
  486. /// <summary>
  487. /// 某一天的
  488. /// </summary>
  489. /// <param name="sqi"></param>
  490. /// <param name="eqi"></param>
  491. /// <returns></returns>
  492. public static List<Tcsdklpk3Info> GetOneDayKjList(DateTime sqi, DateTime eqi)
  493. {
  494. string sql = string.Format("where date BETWEEN '{0}' AND '{1}'", sqi, eqi);
  495. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  496. {
  497. var list = db.Fetch<Tcsdklpk3Info>(sql);
  498. var outlist = new List<Tcsdklpk3Info>();
  499. if (list != null && list.Count > 0)
  500. {
  501. var size = list.Count;
  502. for (int i = 0; i < size; i++)
  503. {
  504. Tcsdklpk3Info info = list[i];
  505. info.rank = i + 1;
  506. outlist.Add(info);
  507. }
  508. }
  509. return outlist;
  510. }
  511. }
  512. }
  513. }