GetTrendChartAPI.ashx.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Web;
  6. using System.Web.UI.WebControls;
  7. using System.Xml;
  8. using CB.Common;
  9. using CB.Data;
  10. using CB.Entity;
  11. using CB.TrendChart.FrequencyTrendChart;
  12. using CB.TVUCenter.Config;
  13. using CB.TVUCenter.Data;
  14. using CB.TVUCenter.Entity;
  15. namespace CB.TVTrendChartData
  16. {
  17. /// <summary>
  18. /// 获取电视走势图数据API
  19. /// </summary>
  20. public class GetTrendChartAPI : IHttpHandler
  21. {
  22. public bool IsReusable
  23. {
  24. get
  25. {
  26. return false;
  27. }
  28. }
  29. public void ProcessRequest(HttpContext context)
  30. {
  31. /**API请求必须包含data和sign两个参数。
  32. 数据源格式:Uid="",Mac="",LotteryId="",ChartId="",Direction=""
  33. 排序后的数据:
  34. 将数据源转换为字典(键值对,键和值都是字符串类型)形势存在,将字典排序,排序方式按字典(键)升序排序得到排序后的字典,再将排序后的字典转换成对应字符串,得到排序后的字符串如(LotteryId="",ChartId="",Direction="",Uid="",Mac="")
  35. data参数:将排序后的数据通过Key对字符串进行AES(AES加密算法与中心服务器一致)后再通过UrlEncode编码得到
  36. sign参数:将排序后的数据通过MD5加密算法得到**/
  37. string sign, data;
  38. string key;
  39. if (TVConfigs.GetConfig().Debug)
  40. {
  41. key = "E03F49114203ABCD"; //从config 获取
  42. }
  43. else
  44. {
  45. key = TVConfigs.GetConfig().DecryptKey;
  46. }
  47. sign = WRequest.GetString("sign");
  48. data = WRequest.GetString("data"); //data在前端通过UrlDecode编码
  49. string RealData = string.Empty;
  50. var DicData = new Dictionary<string, string>(); //Uid="",Mac="",LotteryId="",ChartId="",Direction=""
  51. //根据Key解密data
  52. try
  53. {
  54. RealData = TVUCenter.Encrypt.AES.Decrypt(data, key);
  55. if (!string.IsNullOrEmpty(RealData))
  56. {
  57. foreach (var item in RealData.Split(','))
  58. {
  59. DicData.Add(item.Split(':')[0], item.Split(':')[1]);
  60. }
  61. }
  62. }
  63. catch (Exception ex)
  64. {
  65. IsDebug(context, ex.Message);
  66. return;
  67. }
  68. //排序完成之后APP对应真实参数
  69. //var DicRealData = from realdata in DicData orderby realdata.Key select realdata;
  70. string realUserName = DicData["Mac"];
  71. int LotteryId = DicData["LotteryId"].ToInt();
  72. int ChartId = DicData["ChartId"].ToInt();
  73. int Direction = DicData["Direction"].ToInt();
  74. if (CheckSign(sign, RealData, data, realUserName))
  75. {
  76. //验证成功显示走势图相关数据
  77. string resultData = GetTrendChartData(LotteryId, ChartId, Direction);
  78. if (!string.IsNullOrEmpty(resultData))
  79. {
  80. context.Response.ContentType = "text/html";
  81. context.Response.Write(resultData);
  82. }
  83. else
  84. {
  85. IsDebug(context, "验证通过,走势图读取错误!");
  86. }
  87. }
  88. else
  89. {
  90. IsDebug(context, "验证失败,用户不合法!!");
  91. }
  92. }
  93. #region 常用方法及验证
  94. /// <summary>
  95. /// 验证
  96. /// </summary>
  97. /// <param name="userName"></param>
  98. /// <param name="data"></param>
  99. /// <param name="sign"></param>
  100. /// <param name="realUserName"></param>
  101. /// <returns></returns>
  102. private static bool CheckSign(string sign, string RealData, string data, string realUserName)
  103. {
  104. if (sign == Utils.MD5(RealData))//根据Key解密
  105. {
  106. return !OnlineUsers.CheckUserLock(new OnlineUserInfo()
  107. {
  108. UserName = realUserName,
  109. Sign = data,
  110. RequestTime = DateTime.Now
  111. });
  112. }
  113. return false;
  114. }
  115. #endregion
  116. #region 生成走势图数据和遗漏数据
  117. private string GetTrendChartData(int lotteryid, int chartid, int drection)
  118. {
  119. var chartInfo = CB.Data.Caches.GetTrendChartInfo(chartid);
  120. if (null == chartInfo)
  121. return "";
  122. var chartData = GetTrendChartData(chartInfo.Id);
  123. if(null==chartData)
  124. return "";
  125. var sp = new StringBuilder(10240);
  126. sp.Append("<tr class=\"miss\">");
  127. sp.Append("<td colspan=\"6\">出现次数</td>");
  128. foreach (var item in chartData.AllTimes)
  129. {
  130. if (item == "-1")
  131. continue;
  132. foreach (var missvalue in item.Split(','))
  133. {
  134. sp.Append(string.Format("<td>{0}</td>", missvalue));
  135. }
  136. }
  137. sp.Append("<td> </td><td> </td><td> </td><td> </td><td> </td></tr>");
  138. sp.Append("<tr class=\"miss\">");
  139. sp.Append("<td colspan=\"6\">平均遗漏</td>");
  140. foreach (var item in chartData.AllMaxMiss)
  141. {
  142. if (item == "-1")
  143. continue;
  144. foreach (var missvalue in item.Split(','))
  145. {
  146. sp.Append(string.Format("<td>{0}</td>", missvalue));
  147. }
  148. }
  149. sp.Append("<td> </td><td> </td><td> </td><td> </td><td> </td></tr>");
  150. sp.Append("<tr class=\"miss\">");
  151. sp.Append("<td colspan=\"6\">最大遗漏</td>");
  152. foreach (var item in chartData.AllMaxMiss)
  153. {
  154. if (item == "-1")
  155. continue;
  156. foreach (var missvalue in item.Split(','))
  157. {
  158. sp.Append(string.Format("<td>{0}</td>", missvalue));
  159. }
  160. }
  161. sp.Append("<td> </td><td> </td><td> </td><td> </td><td> </td></tr>");
  162. sp.Append("<tr class=\"miss\">");
  163. sp.Append("<td colspan=\"6\">当前遗漏</td>");
  164. foreach (var item in chartData.LocalMiss)
  165. {
  166. if (item == "-1")
  167. continue;
  168. foreach (var missvalue in item.Split(','))
  169. {
  170. sp.Append(string.Format("<td>{0}</td>", missvalue));
  171. }
  172. }
  173. sp.Append("<td> </td><td> </td><td> </td><td> </td><td> </td></tr>");
  174. var tags = new Dictionary<string, string>();
  175. tags.Add("<!--@@chartData-->", chartData.HtmlData);
  176. tags.Add("<!--@@missData-->", sp.ToString());
  177. return CB.Framework.WebPage.BuildTemplateData(chartInfo.TemplateId, tags);
  178. #region 已注释
  179. //string template;
  180. //TrendChartData resultData = GetWhiceTrendChart(chartid);
  181. //if (string.IsNullOrEmpty(template))
  182. // return "";
  183. //if (resultData == null)
  184. // return "";
  185. //#region 走势图数据
  186. //if (string.IsNullOrEmpty(resultData.HtmlData))
  187. // return "";
  188. //string result = template.Replace("@@TrendChartData", resultData.HtmlData);
  189. //#endregion
  190. //#region 遗漏数据
  191. //StringBuilder sbAllTimes = new StringBuilder();
  192. //foreach (var item in resultData.AllTimes)
  193. //{
  194. // if (item == "-1")
  195. // continue;
  196. // foreach (var missvalue in item.Split(','))
  197. // {
  198. // sbAllTimes.Append(string.Format("<td>{0}</td>", missvalue));
  199. // }
  200. //}
  201. //result = result.Replace("@@TrendChartMissDataAllTimes", sbAllTimes.ToString());
  202. //StringBuilder sbAllAvgMiss = new StringBuilder();
  203. //foreach (var item in resultData.AllAvgMiss)
  204. //{
  205. // if (item == "-1")
  206. // continue;
  207. // foreach (var missvalue in item.Split(','))
  208. // {
  209. // sbAllAvgMiss.Append(string.Format("<td>{0}</td>", missvalue));
  210. // }
  211. //}
  212. //result = result.Replace("@@TrendChartMissDataAllAvgMiss", sbAllAvgMiss.ToString());
  213. //StringBuilder sbAllMaxMiss = new StringBuilder();
  214. //foreach (var item in resultData.AllMaxMiss)
  215. //{
  216. // if (item == "-1")
  217. // continue;
  218. // foreach (var missvalue in item.Split(','))
  219. // {
  220. // sbAllMaxMiss.Append(string.Format("<td>{0}</td>", missvalue));
  221. // }
  222. //}
  223. //result = result.Replace("@@TrendChartMissDataAllMaxMiss", sbAllMaxMiss.ToString());
  224. //StringBuilder sbLocalMiss = new StringBuilder();
  225. //foreach (var item in resultData.LocalMiss)
  226. //{
  227. // if (item == "-1")
  228. // continue;
  229. // foreach (var missvalue in item.Split(','))
  230. // {
  231. // sbLocalMiss.Append(string.Format("<td>{0}</td>", missvalue));
  232. // }
  233. //}
  234. //result = result.Replace("@@TrendChartMissDataLocalMiss", sbLocalMiss.ToString());
  235. //#endregion
  236. //return result;
  237. #endregion
  238. }
  239. /// <summary>
  240. /// 获取哪个走势图
  241. /// </summary>
  242. /// <param name="chartid"></param>
  243. /// <param name="chartType"></param>
  244. /// <param name="fields"></param>
  245. /// <returns></returns>
  246. private TrendChartData GetTrendChartData(int chartid, TrendChartType chartType = TrendChartType.TV, LotterySearchField fields = null)
  247. {
  248. switch (chartid)
  249. {
  250. case 342: //四川快乐12
  251. return KL12SiChuanTrend.PreViewTrendChart(chartid, chartType, null);
  252. default:
  253. return null;
  254. }
  255. }
  256. #endregion
  257. #region 是否走Debug模式
  258. public void IsDebug(HttpContext context, string msg)
  259. {
  260. context.Response.ContentType = "text/plain";
  261. if (TVConfigs.GetConfig().Debug)
  262. {
  263. context.Response.StatusCode = 404;
  264. context.Response.Write("错误信息:" + msg);
  265. }
  266. }
  267. #endregion
  268. }
  269. }