Fcsdqyh.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  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 Fcsdqyh : 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 FcsdqyhInfo GetLastNumFcsdqyhInfo(ref List<FcsdqyhInfo> list, int val, int rank)
  26. {
  27. FcsdqyhInfo info = new FcsdqyhInfo();
  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, list[i].n4, list[i].n5 };
  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="shz"></param>
  47. /// <param name="ehz"></param>
  48. /// <param name="rank"></param>
  49. /// <returns></returns>
  50. public static FcsdqyhInfo GetLastHzFcsdqyhInfo(ref List<FcsdqyhInfo> list, int shz, int ehz, int rank)
  51. {
  52. FcsdqyhInfo info = new FcsdqyhInfo();
  53. if (list != null && list.Count > 0)
  54. {
  55. for (int i = rank - 2; i >= 0; i--)
  56. {
  57. if (list[i].hz >= shz && list[i].hz <= ehz)
  58. {
  59. return list[i];
  60. }
  61. }
  62. }
  63. return info;
  64. }
  65. /// <summary>
  66. /// 上一次和尾的数据
  67. /// </summary>
  68. /// <param name="val"></param>
  69. /// <param name="rank"></param>
  70. /// <returns></returns>
  71. public static FcsdqyhInfo GetLastHwFcsdqyhInfo(ref List<FcsdqyhInfo> list, int val, int rank)
  72. {
  73. FcsdqyhInfo info = new FcsdqyhInfo();
  74. if (list != null && list.Count > 0)
  75. {
  76. for (int i = rank - 2; i >= 0; i--)
  77. {
  78. if (ZstUtils.GetHw(list[i].hz) == val)
  79. {
  80. return list[i];
  81. }
  82. }
  83. }
  84. return info;
  85. }
  86. /// <summary>
  87. /// 某围二号码上一次出现时的数据
  88. /// </summary>
  89. /// <param name="val"></param>
  90. /// <param name="rank"></param>
  91. /// <returns></returns>
  92. public static FcsdqyhInfo GetLastNumWeFcsdqyhInfo(ref List<FcsdqyhInfo> list, int val, int rank)
  93. {
  94. FcsdqyhInfo info = new FcsdqyhInfo();
  95. if (list != null && list.Count > 0)
  96. {
  97. int size = list.Count;
  98. for (int i = rank - 2; i >= 0; i--)
  99. {
  100. List<int> kjh = new List<int> { list[i].n1, list[i].n2 };
  101. if (kjh.Contains(val))
  102. {
  103. info = list[i];
  104. return info;
  105. }
  106. }
  107. }
  108. return info;
  109. }
  110. /// <summary>
  111. /// 某围三号码上一次出现时的数据
  112. /// </summary>
  113. /// <param name="val"></param>
  114. /// <param name="rank"></param>
  115. /// <returns></returns>
  116. public static FcsdqyhInfo GetLastNumWsFcsdqyhInfo(ref List<FcsdqyhInfo> list, int val, int rank)
  117. {
  118. FcsdqyhInfo info = new FcsdqyhInfo();
  119. if (list != null && list.Count > 0)
  120. {
  121. int size = list.Count;
  122. for (int i = rank - 2; i >= 0; i--)
  123. {
  124. List<int> kjh = new List<int> { list[i].n1, list[i].n2, list[i].n3 };
  125. if (kjh.Contains(val))
  126. {
  127. info = list[i];
  128. return info;
  129. }
  130. }
  131. }
  132. return info;
  133. }
  134. /// <summary>
  135. /// 某围四号码上一次出现时的数据
  136. /// </summary>
  137. /// <param name="val"></param>
  138. /// <param name="rank"></param>
  139. /// <returns></returns>
  140. public static FcsdqyhInfo GetLastNumWsiFcsdqyhInfo(ref List<FcsdqyhInfo> list, int val, int rank)
  141. {
  142. FcsdqyhInfo info = new FcsdqyhInfo();
  143. if (list != null && list.Count > 0)
  144. {
  145. int size = list.Count;
  146. for (int i = rank - 2; i >= 0; i--)
  147. {
  148. List<int> kjh = new List<int> { list[i].n1, list[i].n2, list[i].n3, list[i].n4 };
  149. if (kjh.Contains(val))
  150. {
  151. info = list[i];
  152. return info;
  153. }
  154. }
  155. }
  156. return info;
  157. }
  158. /// <summary>
  159. /// 根据当前出号和排名,查询出上一次出此号时的数据
  160. /// 主要用在算遗漏时
  161. /// </summary>
  162. /// <param name="val">值</param>
  163. /// <param name="rank">当前排名</param>
  164. /// <param name="dnw"></param>
  165. /// <returns></returns>
  166. public static FcsdqyhInfo GetLastFcsdqyhInfo(ref List<FcsdqyhInfo> list, int val, int rank, int dnw)
  167. {
  168. FcsdqyhInfo info = new FcsdqyhInfo();
  169. int size = list.Count;
  170. ///升序的情况
  171. ///未实现走势图倒序的情况..
  172. for (int i = rank - 2; i >= 0; i--)
  173. {
  174. if (dnw == 1)
  175. {
  176. if (list[i].n1 == val)
  177. {
  178. info = list[i];
  179. return info;
  180. }
  181. }
  182. if (dnw == 2)
  183. {
  184. if (list[i].n2 == val)
  185. {
  186. info = list[i];
  187. return info;
  188. }
  189. }
  190. if (dnw == 3)
  191. {
  192. if (list[i].n3 == val)
  193. {
  194. info = list[i];
  195. return info;
  196. }
  197. }
  198. if (dnw == 4)
  199. {
  200. if (list[i].n4 == val)
  201. {
  202. info = list[i];
  203. return info;
  204. }
  205. }
  206. if (dnw == 5)
  207. {
  208. if (list[i].n5 == val)
  209. {
  210. info = list[i];
  211. return info;
  212. }
  213. }
  214. }
  215. return info;
  216. }
  217. /// <summary>
  218. /// 上一次大小的数据
  219. /// </summary>
  220. /// <param name="val"></param>
  221. /// <param name="rank"></param>
  222. /// <returns></returns>
  223. public static FcsdqyhInfo GetLastDxFcsdqyhInfo(ref List<FcsdqyhInfo> list, int val, int rank, int dnw)
  224. {
  225. FcsdqyhInfo info = new FcsdqyhInfo();
  226. if (list != null && list.Count > 0)
  227. {
  228. var hm = 0;
  229. for (int i = rank - 2; i >= 0; i--)
  230. {
  231. if (dnw == 1)
  232. hm = info.n1;
  233. else if (dnw == 2)
  234. hm = info.n2;
  235. else if (dnw == 3)
  236. hm = info.n3;
  237. else if (dnw == 4)
  238. hm = info.n4;
  239. else if (dnw == 5)
  240. hm = info.n5;
  241. if (ZstUtils.GetDxBymiddle(hm, 12) == val)
  242. {
  243. return list[i];
  244. }
  245. }
  246. }
  247. return info;
  248. }
  249. /// <summary>
  250. /// 上一次奇偶的情况
  251. /// </summary>
  252. /// <param name="val"></param>
  253. /// <param name="rank"></param>
  254. /// <returns></returns>
  255. public static FcsdqyhInfo GetLastJoFcsdqyhInfo(ref List<FcsdqyhInfo> list, int val, int rank, int dnw)
  256. {
  257. FcsdqyhInfo info = new FcsdqyhInfo();
  258. if (list != null && list.Count > 0)
  259. {
  260. var hm = 0;
  261. for (int i = rank - 2; i >= 0; i--)
  262. {
  263. if (dnw == 1)
  264. hm = info.n1;
  265. else if (dnw == 2)
  266. hm = info.n2;
  267. else if (dnw == 3)
  268. hm = info.n3;
  269. else if (dnw == 4)
  270. hm = info.n4;
  271. else if (dnw == 5)
  272. hm = info.n5;
  273. if (ZstUtils.GetJo(hm) == val)
  274. {
  275. return list[i];
  276. }
  277. }
  278. }
  279. return info;
  280. }
  281. /// <summary>
  282. /// 上一次质合的情况
  283. /// </summary>
  284. /// <param name="val"></param>
  285. /// <param name="rank"></param>
  286. /// <returns></returns>
  287. public static FcsdqyhInfo GetLastZhFcsdqyhInfo(ref List<FcsdqyhInfo> list, int val, int rank, int dnw)
  288. {
  289. FcsdqyhInfo info = new FcsdqyhInfo();
  290. if (list != null && list.Count > 0)
  291. {
  292. var hm = 0;
  293. for (int i = rank - 2; i >= 0; i--)
  294. {
  295. if (dnw == 1)
  296. hm = info.n1;
  297. else if (dnw == 2)
  298. hm = info.n2;
  299. else if (dnw == 3)
  300. hm = info.n3;
  301. else if (dnw == 4)
  302. hm = info.n4;
  303. else if (dnw == 5)
  304. hm = info.n5;
  305. if (ZstUtils.GetZh(hm) == val)
  306. {
  307. return list[i];
  308. }
  309. }
  310. }
  311. return info;
  312. }
  313. /// <summary>
  314. /// 上一次012路的情况
  315. /// </summary>
  316. /// <param name="val"></param>
  317. /// <param name="rank"></param>
  318. /// <returns></returns>
  319. public static FcsdqyhInfo GetLast012FcsdqyhInfo(ref List<FcsdqyhInfo> list, int val, int rank, int dnw)
  320. {
  321. FcsdqyhInfo info = new FcsdqyhInfo();
  322. if (list != null && list.Count > 0)
  323. {
  324. var hm = 0;
  325. for (int i = rank - 2; i >= 0; i--)
  326. {
  327. if (dnw == 1)
  328. hm = info.n1;
  329. else if (dnw == 2)
  330. hm = info.n2;
  331. else if (dnw == 3)
  332. hm = info.n3;
  333. else if (dnw == 4)
  334. hm = info.n4;
  335. else if (dnw == 5)
  336. hm = info.n5;
  337. if (ZstUtils.Get012(hm) == val)
  338. {
  339. return list[i];
  340. }
  341. }
  342. }
  343. return info;
  344. }
  345. /// <summary>
  346. /// 按条件筛选数据
  347. /// </summary>
  348. /// <param name="pagesize"></param>
  349. /// <param name="year"></param>
  350. /// <param name="sqi"></param>
  351. /// <param name="eqi"></param>
  352. /// <param name="week"></param>
  353. /// <returns></returns>
  354. public static List<FcsdqyhInfo> GetFcsdqyhList(ref List<FcsdqyhInfo> datalist, int pagesize, string day)
  355. {
  356. List<FcsdqyhInfo> list = datalist;
  357. List<FcsdqyhInfo> rlist = new List<FcsdqyhInfo>();
  358. if (list != null && list.Count > 0)
  359. {
  360. int size = list.Count;
  361. if (pagesize > 0)
  362. {
  363. for (int i = (size - pagesize); i < size; i++)
  364. {
  365. rlist.Add(list[i]);
  366. }
  367. return rlist;
  368. }
  369. if (!string.IsNullOrWhiteSpace(day))
  370. {
  371. rlist.Clear();
  372. var stime = TypeConverter.ObjectToDateTime(day);
  373. var etime = stime.AddDays(1);
  374. rlist = datalist.Where(n => n.date > stime && n.date < etime).ToList();
  375. return rlist;
  376. }
  377. }
  378. return rlist;
  379. }
  380. /// <summary>
  381. /// 获取最近多少天数据
  382. /// </summary>
  383. /// <param name="ename"></param>
  384. /// <param name="pagesize"></param>
  385. /// <param name="n"></param>
  386. /// <returns></returns>
  387. public static List<FcsdqyhInfo> GetList(string ename, int pagesize, int n = 30)
  388. {
  389. string key = $"DATA-{ename}-{pagesize * n}";
  390. List<FcsdqyhInfo> list = cache.GetObject<List<FcsdqyhInfo>>(key);
  391. if (list == null)
  392. {
  393. #region 获取数据
  394. list = GetList(pagesize * n);
  395. #endregion
  396. cache.AddObject(key, list, (int)CacheTime.Mintime);
  397. }
  398. return list;
  399. }
  400. /// <summary>
  401. /// 最近N期的数据列表
  402. /// </summary>
  403. /// <returns></returns>
  404. public static List<FcsdqyhInfo> GetList(int limit = 2000)
  405. {
  406. string sql = $"order by qi desc limit {limit}";
  407. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  408. {
  409. var list = db.Fetch<FcsdqyhInfo>(sql).OrderBy(n => n.qi).ToList();
  410. var outlist = new List<FcsdqyhInfo>();
  411. if (list != null && list.Count > 0)
  412. {
  413. var size = list.Count;
  414. for (int i = 0; i < size; i++)
  415. {
  416. FcsdqyhInfo info = list[i];
  417. info.rank = i + 1;
  418. outlist.Add(info);
  419. }
  420. }
  421. return outlist;
  422. }
  423. }
  424. /// <summary>
  425. /// 获取指定时间内的数据
  426. /// </summary>
  427. /// <param name="ename"></param>
  428. /// <param name="sqi"></param>
  429. /// <param name="eqi"></param>
  430. /// <returns></returns>
  431. public static List<FcsdqyhInfo> GetDayKjList(string ename, DateTime sqi, DateTime eqi)
  432. {
  433. string key = $"DATA-{ename}-{sqi}-{eqi}";
  434. List<FcsdqyhInfo> list = cache.GetObject<List<FcsdqyhInfo>>(key);
  435. if (list == null)
  436. {
  437. #region 获取数据
  438. list = GetOneDayKjList(sqi, eqi);
  439. #endregion
  440. cache.AddObject(key, list, (int)CacheTime.Expert);
  441. }
  442. return list;
  443. }
  444. /// <summary>
  445. /// 某一天的
  446. /// </summary>
  447. /// <param name="sqi"></param>
  448. /// <param name="eqi"></param>
  449. /// <returns></returns>
  450. public static List<FcsdqyhInfo> GetOneDayKjList(DateTime sqi, DateTime eqi)
  451. {
  452. string sql = string.Format("where date BETWEEN '{0}' AND '{1}'", sqi, eqi);
  453. using (Database db = new Database(mysql, MySqlClientFactory.Instance))
  454. {
  455. var list = db.Fetch<FcsdqyhInfo>(sql);
  456. var outlist = new List<FcsdqyhInfo>();
  457. if (list != null && list.Count > 0)
  458. {
  459. var size = list.Count;
  460. for (int i = 0; i < size; i++)
  461. {
  462. FcsdqyhInfo info = list[i];
  463. info.rank = i + 1;
  464. outlist.Add(info);
  465. }
  466. }
  467. return outlist;
  468. }
  469. }
  470. }
  471. }