GPCKL10FController.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. using Lottomat.Application.Busines.CommonManage;
  2. using Lottomat.Application.Code;
  3. using Lottomat.Application.Entity.CommonEntity;
  4. using Lottomat.Application.Entity.LotteryNumberManage.Parameter;
  5. using Lottomat.Application.Entity.LotteryNumberManage.ViewModel;
  6. using Lottomat.SOA.API.Controllers.Base;
  7. using Lottomat.Util.Extension;
  8. using Lottomat.Utils;
  9. using Lottomat.Utils.Date;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Data;
  13. using System.Net.Http;
  14. using System.Text;
  15. using System.Web.Http;
  16. namespace Lottomat.SOA.API.Controllers.V1
  17. {
  18. /// <summary>
  19. /// 高频彩快乐10分
  20. /// </summary>
  21. public class GPCKL10FController : BaseApiController
  22. {
  23. /// <summary>
  24. /// 公共BLL
  25. /// </summary>
  26. private static readonly CommonBLL commonBll = new CommonBLL();
  27. #region 获取高频彩快乐10分彩种历史记录
  28. /// <summary>
  29. /// 获取高频彩快乐10分彩种历史记录
  30. /// </summary>
  31. /// <returns></returns>
  32. [HttpPost]
  33. public HttpResponseMessage GetGPCKL10FHistoryLotteryList(HistoryLotteryArgEnyity arg)
  34. {
  35. BaseJson<string> resultMsg = new BaseJson<string> { Status = (int)JsonObjectStatus.Error, Message = "服务器未知错误。", Data = null };
  36. Logger(typeof(GPCKL10FController), arg.TryToJson(), "获取高频彩快乐10分彩种历史记录-GetGPCKL10FHistoryLotteryList", () =>
  37. {
  38. if (!string.IsNullOrEmpty(arg.t))
  39. {
  40. if (arg.t.CheckTimeStamp())
  41. {
  42. if (!string.IsNullOrEmpty(arg.EnumCode))
  43. {
  44. bool isSucc = Enum.TryParse<SCCLottery>(arg.EnumCode, true, out SCCLottery type);
  45. //SCCLottery type = (SCCLottery)Enum.Parse(typeof(SCCLottery), arg.EnumCode, true);
  46. if (!isSucc)
  47. {
  48. resultMsg = new BaseJson<string>
  49. {
  50. Status = (int)JsonObjectStatus.Fail,
  51. Data = null,
  52. Message = $"参数值{arg.EnumCode}无效。",
  53. BackUrl = null
  54. };
  55. }
  56. else
  57. { //获取组装完成后的Json字符串
  58. string res = GetResultByEnumCode(type, arg);
  59. resultMsg = new BaseJson<string>
  60. {
  61. Status = (int)JsonObjectStatus.Success,
  62. Data = res.ToString(),
  63. Message = JsonObjectStatus.Success.GetEnumText(),
  64. BackUrl = null
  65. };
  66. }
  67. }
  68. else
  69. {
  70. resultMsg = new BaseJson<string>
  71. {
  72. Status = (int)JsonObjectStatus.Fail,
  73. Data = null,
  74. Message = JsonObjectStatus.Fail.GetEnumText() + ",请求参数EnumCode为空。",
  75. BackUrl = null
  76. };
  77. }
  78. }
  79. else
  80. {
  81. resultMsg = new BaseJson<string>
  82. {
  83. Status = (int)JsonObjectStatus.Fail,
  84. Data = null,
  85. Message = JsonObjectStatus.Fail.GetEnumText() + ",无效参数。",
  86. BackUrl = null
  87. };
  88. }
  89. }
  90. else
  91. {
  92. resultMsg = new BaseJson<string>
  93. {
  94. Status = (int)JsonObjectStatus.Fail,
  95. Data = null,
  96. Message = JsonObjectStatus.Fail.GetEnumText() + ",请求参数为空。",
  97. BackUrl = null
  98. };
  99. }
  100. }, e =>
  101. {
  102. resultMsg = new BaseJson<string>
  103. {
  104. Status = (int)JsonObjectStatus.Exception,
  105. Data = null,
  106. Message = JsonObjectStatus.Exception.GetEnumText() + ",异常信息:" + e.Message,
  107. BackUrl = null
  108. };
  109. });
  110. return resultMsg.TryToJson().ToHttpResponseMessage();
  111. }
  112. /// <summary>
  113. /// 获取开奖历史
  114. /// </summary>
  115. /// <param name="type"></param>
  116. /// <param name="arg"></param>
  117. /// <returns></returns>
  118. private string GetResultByEnumCode(SCCLottery type, HistoryLotteryArgEnyity arg)
  119. {
  120. string res = String.Empty;
  121. DataTable data = GetData(type, arg);
  122. switch (type)
  123. {
  124. case SCCLottery.TianJinKL10F:
  125. res = AppendCommonResult(data, SCCLottery.TianJinKL10F);
  126. break;
  127. default:
  128. res = AppendCommonResult(data, type);
  129. break;
  130. }
  131. return res;
  132. }
  133. /// <summary>
  134. /// 组装公共记录
  135. /// </summary>
  136. /// <param name="data"></param>
  137. /// <param name="type"></param>
  138. /// <returns></returns>
  139. private string AppendCommonResult(DataTable data, SCCLottery type)
  140. {
  141. List<GPCKL10FHistoryLotteryViewEntity> res = new List<GPCKL10FHistoryLotteryViewEntity>();
  142. if (data.Rows.Count > 0)
  143. {
  144. //总共球个数
  145. int total = type.GetEnumText().TryToInt32();
  146. for (int j = 0; j < data.Rows.Count; j++)
  147. {
  148. //开奖号集合
  149. List<int> openCodeList = new List<int>();
  150. StringBuilder builder = new StringBuilder();
  151. for (int i = 1; i <= total; i++)
  152. {
  153. int openCode = data.Rows[j]["OpenCode" + i].TryToInt32();
  154. openCodeList.Add(openCode);
  155. }
  156. builder.Append(GetOpenCodeTemplate(type, openCodeList));
  157. res.Add(new GPCKL10FHistoryLotteryViewEntity
  158. {
  159. Term = data.Rows[j]["Term"].ToStringEx(),
  160. OpenTime = data.Rows[j]["OpenTime"].TryToDateTimeToString("yyyy-MM-dd HH:mm:ss"),
  161. NormalOpenCode = builder.ToString(),
  162. Parity = LotteryUtils.GetJOString(openCodeList, "双", "单"),
  163. TheSum = LotteryUtils.GetTheSum(openCodeList, 55, GetSumNumberCount(type)),
  164. Size = LotteryUtils.GetDXString(openCodeList, 10),
  165. SizeRatio = LotteryUtils.GetProportionOfDX(openCodeList, 11),
  166. ParityRatio = LotteryUtils.GetProportionOfJO(openCodeList),
  167. Span = LotteryUtils.GetSpan(openCodeList).ToString(),
  168. PrimeAndNumberRatio = LotteryUtils.GetProportionOfZh(openCodeList)
  169. });
  170. }
  171. }
  172. return res.ToJson();
  173. }
  174. /// <summary>
  175. /// 查询数据集
  176. /// </summary>
  177. /// <param name="type"></param>
  178. /// <param name="arg"></param>
  179. /// <returns></returns>
  180. private DataTable GetData(SCCLottery type, HistoryLotteryArgEnyity arg)
  181. {
  182. string key = $"GetGPCKL10FHistoryLotteryList/{type.ToString()}/{arg.EnumCode}/{arg.TotalRecord}/{arg.StartTime}/{arg.Year}";
  183. DataTable o = null;
  184. if (webCache.IsExist(key))
  185. {
  186. o = webCache.GetObject<DataTable>(key) as DataTable;
  187. }
  188. else
  189. {
  190. //组装查询语句
  191. string sql = GetSeleteSQL(type, arg);
  192. //查询结果
  193. o = commonBll.ExcuteSqlDataTable(sql, DatabaseLinksEnum.LotteryNumber, null);
  194. webCache.AddObject(key, o, (int)CacheTime.Data);
  195. }
  196. return o;
  197. }
  198. #endregion 获取高频彩快乐10分彩种历史记录
  199. #region 公共私有方法
  200. /// <summary>
  201. /// 组装查询语句
  202. /// </summary>
  203. /// <param name="type">枚举码</param>
  204. /// <param name="arg"></param>
  205. /// <returns></returns>
  206. private string GetSeleteSQL(SCCLottery type, HistoryLotteryArgEnyity arg)
  207. {
  208. StringBuilder builder = new StringBuilder();
  209. string res = String.Empty;
  210. int total = type.GetEnumText().TryToInt32();
  211. string tableName = type.GetSCCLotteryTableName();
  212. for (int i = 1; i <= total; i++)
  213. {
  214. builder.Append("[OpenCode" + i + "],");
  215. }
  216. if (!arg.Year.HasValue)
  217. {
  218. arg.Year = 0;
  219. }
  220. if (arg.TotalRecord > 0)
  221. {
  222. res = string.Format(GetLotterySqlByTableNameWithTop, arg.TotalRecord, StringHelper.DelLastChar(builder.ToString(), ","), tableName, arg.Year);
  223. }
  224. else if (!string.IsNullOrEmpty(arg.StartTime))
  225. {
  226. string time = arg.StartTime.CheckDateTime()
  227. ? arg.StartTime
  228. : DateTimeHelper.Now.AddDays(-7).ToString("yyyy-MM-dd");
  229. res = string.Format(GetLotterySqlByTableNameWithStartTime, StringHelper.DelLastChar(builder.ToString(), ","), tableName, time, arg.Year);
  230. }
  231. else if (arg.Year.HasValue)
  232. {
  233. res = string.Format(GetLotterySqlByTableName, StringHelper.DelLastChar(builder.ToString(), ","), tableName, arg.Year);
  234. }
  235. else
  236. {
  237. res = string.Format(GetLotterySqlByTableNameWithTop, "20", StringHelper.DelLastChar(builder.ToString(), ","), tableName, arg.Year);
  238. }
  239. return res;
  240. }
  241. #endregion 公共私有方法
  242. #region SQL语句
  243. /// <summary>
  244. /// 通过年份表名查询数据为校验后的所有数据
  245. /// </summary>
  246. private static string GetLotterySqlByTableName = @"SELECT [ID],[Term],[OpenTime],[Spare],{0} FROM [dbo].[{1}] where year([OpenTime])={2} ORDER BY Term DESC ";//WHERE [IsChecked] = 1 AND [IsPassed] = 1
  247. /// <summary>
  248. /// 通过表名查询数据为校验后的前n行数据
  249. /// </summary>
  250. private static string GetLotterySqlByTableNameWithTop = @"SELECT TOP {0} [ID],[Term],[OpenTime],[Spare],{1} FROM [dbo].[{2}] where {3} =0 or year([OpenTime])={3} ORDER BY Term DESC ";//WHERE [IsChecked] = 1 AND [IsPassed] = 1
  251. /// <summary>
  252. /// 通过开奖时间查询数据为校验后的所有数据
  253. /// </summary>
  254. private static string GetLotterySqlByTableNameWithStartTime = @"SELECT [ID],[Term],[OpenTime],[Spare],{0} FROM [dbo].[{1}] WHERE DATEDIFF(DAY,'{2}',OpenTime)= 0 and({3} =0 or year([OpenTime])={3}) ORDER BY Term DESC";//AND [IsChecked] = 1 AND [IsPassed] = 1
  255. #endregion SQL语句
  256. }
  257. }