FC3DCache.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using CB.Cache;
  5. using CB.Entity;
  6. namespace CB.Data
  7. {
  8. public partial class Caches
  9. {
  10. /// <summary>
  11. /// 福彩3D开奖信息缓存
  12. /// </summary>
  13. /// <returns></returns>
  14. public static IList<FC3DInfo> GetFC3DList()
  15. {
  16. var cache = CBCache.GetCacheService();
  17. IList<FC3DInfo> list = cache.GetObject(CacheKeys.FC3DList) as IList<FC3DInfo>;
  18. if (null == list)
  19. {
  20. list = FC3DService.ToList();
  21. cache.AddObject(CacheKeys.FC3DList, list);
  22. }
  23. return list;
  24. //return FC3DService.ToList(); ;
  25. }
  26. /// <summary>
  27. /// 福彩3D开奖信息缓存top n行
  28. /// </summary>
  29. /// <param name="topSize">top行(没有值默认传0)</param>
  30. /// <param name="term">期数(没有值默认传0)</param>
  31. /// <param name="year">年份(没有值默认传0)</param>
  32. /// <returns></returns>
  33. public static List<FC3DInfo> GetFC3DList(int topSize, int term, int year)
  34. {
  35. List<FC3DInfo> result = new List<FC3DInfo>();
  36. var list = GetFC3DList();
  37. if (null == list || 0 >= list.Count)
  38. return null;
  39. if (topSize > 0)
  40. {
  41. int n = topSize > list.Count ? 0 : list.Count - topSize;
  42. for (int i = list.Count - 1; i >= n; i--)
  43. {
  44. if (0 <= list[i].OpenCode1) result.Add(list[i]);
  45. //如果没有正确开奖号的情况就忽略该行数据,并多循环一次到topSize行
  46. else if (n > 0) n--;
  47. }
  48. }
  49. else if (term > 0)
  50. {
  51. FC3DInfo info = list.FirstOrDefault(x => x.Term == term && 0 <= x.OpenCode1);
  52. if (info != null) result.Add(info);
  53. }
  54. else if (year > 0)
  55. result = list.ToList().FindAll(x => x.Term >= year * 1000 + 1 && x.Term < (year + 1) * 1000 && 0 <= x.OpenCode1);
  56. return result;
  57. }
  58. /// <summary>
  59. /// 福彩3D开奖信息缓存的按当期为基数的top n行
  60. /// </summary>
  61. /// <param name="topSize">top行(没有值默认传0)</param>
  62. /// <param name="term">期数(没有值默认传0)</param>
  63. /// <returns></returns>
  64. public static IList<FC3DInfo> GetFC3DList(int topSize, long term)
  65. {
  66. var list = GetFC3DList();
  67. if (null == list || 0 >= list.Count)
  68. return null;
  69. if (topSize > 0)
  70. {
  71. //int n = topSize;// > list.Count ? 0 : list.Count - topSize;
  72. //for (int i = list.Count - 1; i >= n; i--)
  73. //{
  74. // if (term > 0 && list[i].Term > term) continue;
  75. // result.Add(list[i]);
  76. // n--;
  77. // if (n <= 0) break;
  78. //}
  79. if (term > 0)
  80. return list.Where(f => f.Term <= term).OrderByDescending(f => f.Term).Take(topSize).ToList();
  81. return list.Take(topSize).OrderByDescending(f => f.Term).ToList();
  82. }
  83. return null;
  84. }
  85. /// <summary>
  86. /// 返回福彩3D近topSize条开机号、试机号、开奖号列表
  87. /// </summary>
  88. /// <param name="topSize">查询记录数</param>
  89. /// <param name="openCodeType">号码类型</param>
  90. /// <returns></returns>
  91. public static IList<FC3DInfo> GetFC3DList(int topSize, OpenCodeType openCodeType = OpenCodeType.KaiJiangHao)
  92. {
  93. if (0 >= topSize)
  94. return null;
  95. var list = GetFC3DList();
  96. if (null == list || 0 >= list.Count)
  97. return null;
  98. IList<FC3DInfo> r = new List<FC3DInfo>();
  99. int n = topSize > list.Count ? list.Count : topSize;
  100. for (int i = list.Count - 1; i >= 0; i--)
  101. {
  102. if (0 == n) { break; }
  103. if (openCodeType == OpenCodeType.KaiJiHao && !string.IsNullOrEmpty(list[i].KaiJiHao) && -1 == list[i].KaiJiHao.IndexOf("-1"))
  104. { r.Add(list[i]); n--; continue; }
  105. if (openCodeType == OpenCodeType.ShiJiHao && !string.IsNullOrEmpty(list[i].ShiJiHao) && -1 == list[i].ShiJiHao.IndexOf("-1"))
  106. { r.Add(list[i]); n--; continue; }
  107. if (openCodeType == OpenCodeType.KaiJiangHao && 0 <= list[i].OpenCode1)
  108. { r.Add(list[i]); n--; continue; }
  109. }
  110. return r;
  111. }
  112. /// <summary>
  113. /// 返回某年的所有开机号、试机号、开奖号列表
  114. /// </summary>
  115. /// <param name="year">年份</param>
  116. /// <param name="openCodeType">号码类型</param>
  117. /// <returns></returns>
  118. public static IList<FC3DInfo> GetFC3DListByYear(int year, OpenCodeType openCodeType = OpenCodeType.KaiJiangHao)
  119. {
  120. if (0 >= year)
  121. return null;
  122. var list = GetFC3DList();
  123. if (null == list || 0 >= list.Count)
  124. return null;
  125. IList<FC3DInfo> r = new List<FC3DInfo>();
  126. for (int i = list.Count - 1; i >= 0; i--)
  127. {
  128. if (list[i].Term.ToString().StartsWith(year.ToString(), StringComparison.CurrentCultureIgnoreCase))
  129. {
  130. if (openCodeType == OpenCodeType.KaiJiHao && !string.IsNullOrEmpty(list[i].KaiJiHao) && -1 == list[i].KaiJiHao.IndexOf("-1"))
  131. { r.Add(list[i]); continue; }
  132. if (openCodeType == OpenCodeType.ShiJiHao && !string.IsNullOrEmpty(list[i].ShiJiHao) && -1 == list[i].ShiJiHao.IndexOf("-1"))
  133. { r.Add(list[i]); continue; }
  134. if (openCodeType == OpenCodeType.KaiJiangHao && 0 <= list[i].OpenCode1)
  135. { r.Add(list[i]); continue; }
  136. }
  137. }
  138. return r;
  139. }
  140. /// <summary>
  141. /// 查询相同号码的所有开机号、试机号、开奖号列表
  142. /// </summary>
  143. /// <param name="year">年份</param>
  144. /// <param name="openCodeType">号码类型</param>
  145. /// <returns></returns>
  146. public static IList<FC3DInfo> GetFC3DListByNumber(string number, OpenCodeType openCodeType = OpenCodeType.KaiJiangHao)
  147. {
  148. if (string.IsNullOrEmpty(number))
  149. return null;
  150. var list = GetFC3DList();
  151. if (null == list || 0 >= list.Count)
  152. return null;
  153. IList<FC3DInfo> r = new List<FC3DInfo>();
  154. for (int i = list.Count - 1; i >= 0; i--)
  155. {
  156. if (openCodeType == OpenCodeType.KaiJiHao && !string.IsNullOrEmpty(list[i].KaiJiHao) && -1 == list[i].KaiJiHao.IndexOf("-1") && -1 != list[i].KaiJiHao.Replace(",", "").IndexOf(number))
  157. { r.Add(list[i]); continue; }
  158. if (openCodeType == OpenCodeType.ShiJiHao && !string.IsNullOrEmpty(list[i].ShiJiHao) && -1 == list[i].ShiJiHao.IndexOf("-1") && -1 != list[i].ShiJiHao.Replace(",", "").IndexOf(number))
  159. { r.Add(list[i]); continue; }
  160. if (openCodeType == OpenCodeType.KaiJiangHao && 0 <= list[i].OpenCode1 && -1 != number.IndexOf(list[i].OpenCode1.ToString()) && -1 != number.IndexOf(list[i].OpenCode2.ToString())
  161. && -1 != number.IndexOf(list[i].OpenCode1.ToString()))
  162. { r.Add(list[i]); continue; }
  163. }
  164. return r;
  165. }
  166. /// <summary>
  167. /// 历史同期开奖数据(开机号、试机号、开奖号)
  168. /// </summary>
  169. /// <param name="term">当前期数</param>
  170. /// <param name="openCodeType">开奖号码类型</param>
  171. /// <returns></returns>
  172. public static IList<FC3DInfo> GetFC3DHistorySameTerm(long term, OpenCodeType openCodeType = OpenCodeType.Normal)
  173. {
  174. if (0 >= term)
  175. return null;
  176. var list = GetFC3DList();
  177. if (null == list || 0 >= list.Count)
  178. return null;
  179. IList<FC3DInfo> r = new List<FC3DInfo>();
  180. long number = term % 1000;
  181. for (int i = list.Count - 1; i >= 0; i--)
  182. {
  183. if (list[i].Term % 1000 == number)
  184. {
  185. if (openCodeType == OpenCodeType.Normal)
  186. { r.Add(list[i]); continue; }
  187. if (openCodeType == OpenCodeType.KaiJiHao && !string.IsNullOrEmpty(list[i].KaiJiHao) && -1 == list[i].KaiJiHao.IndexOf("-1"))
  188. { r.Add(list[i]); continue; }
  189. if (openCodeType == OpenCodeType.ShiJiHao && !string.IsNullOrEmpty(list[i].ShiJiHao) && -1 == list[i].ShiJiHao.IndexOf("-1"))
  190. { r.Add(list[i]); continue; }
  191. if (openCodeType == OpenCodeType.KaiJiangHao && 0 <= list[i].OpenCode1)
  192. { r.Add(list[i]); continue; }
  193. }
  194. }
  195. return r;
  196. }
  197. /// <summary>
  198. /// 根据期数获取福彩3D开奖明细
  199. /// term=0时,读取最新一期开奖明细;
  200. /// term=0时并不一定包含开奖号数据,有可能只有开机号数据或试机号数据
  201. /// </summary>
  202. /// <param name="term">查询期数</param>
  203. /// <param name="openCodeType">开奖号码类型;仅term=0时,此参数有效</param>
  204. /// <returns></returns>
  205. public static FC3DInfo GetFC3DInfo(long term, OpenCodeType openCodeType = OpenCodeType.Normal)
  206. {
  207. var list = GetFC3DList();
  208. if (null == list || 0 >= list.Count)
  209. return null;
  210. FC3DInfo entity = null;
  211. if (0 == term)
  212. {
  213. entity = list[list.Count - 1];
  214. if (openCodeType == OpenCodeType.Normal)
  215. return entity;
  216. if (openCodeType == OpenCodeType.KaiJiHao && !string.IsNullOrEmpty(entity.KaiJiHao) && -1 == entity.KaiJiHao.IndexOf("-1"))
  217. return entity;
  218. if (openCodeType == OpenCodeType.ShiJiHao && !string.IsNullOrEmpty(entity.ShiJiHao) && -1 == entity.ShiJiHao.IndexOf("-1"))
  219. return entity;
  220. if (openCodeType == OpenCodeType.KaiJiangHao && 0 <= entity.OpenCode1)
  221. return entity;
  222. for (int i = list.Count - 2; i >= 0; i--)
  223. {
  224. entity = list[i];
  225. if (openCodeType == OpenCodeType.KaiJiHao && !string.IsNullOrEmpty(entity.KaiJiHao) && -1 == entity.KaiJiHao.IndexOf("-1"))
  226. return entity;
  227. if (openCodeType == OpenCodeType.ShiJiHao && !string.IsNullOrEmpty(entity.ShiJiHao) && -1 == entity.ShiJiHao.IndexOf("-1"))
  228. return entity;
  229. if (openCodeType == OpenCodeType.KaiJiangHao && 0 <= entity.OpenCode1)
  230. return entity;
  231. }
  232. return null;
  233. }
  234. foreach (var item in list)
  235. {
  236. if (term == item.Term)
  237. { entity = item; break; }
  238. }
  239. return entity;
  240. }
  241. }
  242. }