123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Web;
- using System.Web.UI.WebControls;
- using System.Xml;
- using CB.Common;
- using CB.Data;
- using CB.Entity;
- using CB.TrendChart.FrequencyTrendChart;
- using CB.TVUCenter.Config;
- using CB.TVUCenter.Data;
- using CB.TVUCenter.Entity;
- namespace CB.TVTrendChartData
- {
- /// <summary>
- /// 获取电视走势图数据API
- /// </summary>
- public class GetTrendChartAPI : IHttpHandler
- {
- public bool IsReusable
- {
- get
- {
- return false;
- }
- }
- public void ProcessRequest(HttpContext context)
- {
- /**API请求必须包含data和sign两个参数。
- 数据源格式:Uid="",Mac="",LotteryId="",ChartId="",Direction=""
- 排序后的数据:
- 将数据源转换为字典(键值对,键和值都是字符串类型)形势存在,将字典排序,排序方式按字典(键)升序排序得到排序后的字典,再将排序后的字典转换成对应字符串,得到排序后的字符串如(LotteryId="",ChartId="",Direction="",Uid="",Mac="")
- data参数:将排序后的数据通过Key对字符串进行AES(AES加密算法与中心服务器一致)后再通过UrlEncode编码得到
- sign参数:将排序后的数据通过MD5加密算法得到**/
- string sign, data;
- string key;
- if (TVConfigs.GetConfig().Debug)
- {
- key = "E03F49114203ABCD"; //从config 获取
- }
- else
- {
- key = TVConfigs.GetConfig().DecryptKey;
- }
- sign = WRequest.GetString("sign");
- data = WRequest.GetString("data"); //data在前端通过UrlDecode编码
- string RealData = string.Empty;
- var DicData = new Dictionary<string, string>(); //Uid="",Mac="",LotteryId="",ChartId="",Direction=""
- //根据Key解密data
- try
- {
- RealData = TVUCenter.Encrypt.AES.Decrypt(data, key);
- if (!string.IsNullOrEmpty(RealData))
- {
- foreach (var item in RealData.Split(','))
- {
- DicData.Add(item.Split(':')[0], item.Split(':')[1]);
- }
- }
- }
- catch (Exception ex)
- {
- IsDebug(context, ex.Message);
- return;
- }
- //排序完成之后APP对应真实参数
- //var DicRealData = from realdata in DicData orderby realdata.Key select realdata;
- string realUserName = DicData["Mac"];
- int LotteryId = DicData["LotteryId"].ToInt();
- int ChartId = DicData["ChartId"].ToInt();
- int Direction = DicData["Direction"].ToInt();
- if (CheckSign(sign, RealData, data, realUserName))
- {
- //验证成功显示走势图相关数据
- string resultData = GetTrendChartData(LotteryId, ChartId, Direction);
- if (!string.IsNullOrEmpty(resultData))
- {
- context.Response.ContentType = "text/html";
- context.Response.Write(resultData);
- }
- else
- {
- IsDebug(context, "验证通过,走势图读取错误!");
- }
- }
- else
- {
- IsDebug(context, "验证失败,用户不合法!!");
- }
- }
- #region 常用方法及验证
- /// <summary>
- /// 验证
- /// </summary>
- /// <param name="userName"></param>
- /// <param name="data"></param>
- /// <param name="sign"></param>
- /// <param name="realUserName"></param>
- /// <returns></returns>
- private static bool CheckSign(string sign, string RealData, string data, string realUserName)
- {
- if (sign == Utils.MD5(RealData))//根据Key解密
- {
- return !OnlineUsers.CheckUserLock(new OnlineUserInfo()
- {
- UserName = realUserName,
- Sign = data,
- RequestTime = DateTime.Now
- });
- }
- return false;
- }
- #endregion
- #region 生成走势图数据和遗漏数据
- private string GetTrendChartData(int lotteryid, int chartid, int drection)
- {
- var chartInfo = CB.Data.Caches.GetTrendChartInfo(chartid);
- if (null == chartInfo)
- return "";
- var chartData = GetTrendChartData(chartInfo.Id);
- if(null==chartData)
- return "";
- var sp = new StringBuilder(10240);
- sp.Append("<tr class=\"miss\">");
- sp.Append("<td colspan=\"6\">出现次数</td>");
- foreach (var item in chartData.AllTimes)
- {
- if (item == "-1")
- continue;
- foreach (var missvalue in item.Split(','))
- {
- sp.Append(string.Format("<td>{0}</td>", missvalue));
- }
- }
- sp.Append("<td> </td><td> </td><td> </td><td> </td><td> </td></tr>");
- sp.Append("<tr class=\"miss\">");
- sp.Append("<td colspan=\"6\">平均遗漏</td>");
- foreach (var item in chartData.AllMaxMiss)
- {
- if (item == "-1")
- continue;
- foreach (var missvalue in item.Split(','))
- {
- sp.Append(string.Format("<td>{0}</td>", missvalue));
- }
- }
- sp.Append("<td> </td><td> </td><td> </td><td> </td><td> </td></tr>");
- sp.Append("<tr class=\"miss\">");
- sp.Append("<td colspan=\"6\">最大遗漏</td>");
- foreach (var item in chartData.AllMaxMiss)
- {
- if (item == "-1")
- continue;
- foreach (var missvalue in item.Split(','))
- {
- sp.Append(string.Format("<td>{0}</td>", missvalue));
- }
- }
- sp.Append("<td> </td><td> </td><td> </td><td> </td><td> </td></tr>");
- sp.Append("<tr class=\"miss\">");
- sp.Append("<td colspan=\"6\">当前遗漏</td>");
- foreach (var item in chartData.LocalMiss)
- {
- if (item == "-1")
- continue;
- foreach (var missvalue in item.Split(','))
- {
- sp.Append(string.Format("<td>{0}</td>", missvalue));
- }
- }
- sp.Append("<td> </td><td> </td><td> </td><td> </td><td> </td></tr>");
- var tags = new Dictionary<string, string>();
- tags.Add("<!--@@chartData-->", chartData.HtmlData);
- tags.Add("<!--@@missData-->", sp.ToString());
- return CB.Framework.WebPage.BuildTemplateData(chartInfo.TemplateId, tags);
- #region 已注释
- //string template;
- //TrendChartData resultData = GetWhiceTrendChart(chartid);
- //if (string.IsNullOrEmpty(template))
- // return "";
- //if (resultData == null)
- // return "";
- //#region 走势图数据
- //if (string.IsNullOrEmpty(resultData.HtmlData))
- // return "";
- //string result = template.Replace("@@TrendChartData", resultData.HtmlData);
- //#endregion
- //#region 遗漏数据
- //StringBuilder sbAllTimes = new StringBuilder();
- //foreach (var item in resultData.AllTimes)
- //{
- // if (item == "-1")
- // continue;
- // foreach (var missvalue in item.Split(','))
- // {
- // sbAllTimes.Append(string.Format("<td>{0}</td>", missvalue));
- // }
- //}
- //result = result.Replace("@@TrendChartMissDataAllTimes", sbAllTimes.ToString());
- //StringBuilder sbAllAvgMiss = new StringBuilder();
- //foreach (var item in resultData.AllAvgMiss)
- //{
- // if (item == "-1")
- // continue;
- // foreach (var missvalue in item.Split(','))
- // {
- // sbAllAvgMiss.Append(string.Format("<td>{0}</td>", missvalue));
- // }
- //}
- //result = result.Replace("@@TrendChartMissDataAllAvgMiss", sbAllAvgMiss.ToString());
- //StringBuilder sbAllMaxMiss = new StringBuilder();
- //foreach (var item in resultData.AllMaxMiss)
- //{
- // if (item == "-1")
- // continue;
- // foreach (var missvalue in item.Split(','))
- // {
- // sbAllMaxMiss.Append(string.Format("<td>{0}</td>", missvalue));
- // }
- //}
- //result = result.Replace("@@TrendChartMissDataAllMaxMiss", sbAllMaxMiss.ToString());
- //StringBuilder sbLocalMiss = new StringBuilder();
- //foreach (var item in resultData.LocalMiss)
- //{
- // if (item == "-1")
- // continue;
- // foreach (var missvalue in item.Split(','))
- // {
- // sbLocalMiss.Append(string.Format("<td>{0}</td>", missvalue));
- // }
- //}
- //result = result.Replace("@@TrendChartMissDataLocalMiss", sbLocalMiss.ToString());
- //#endregion
- //return result;
- #endregion
- }
- /// <summary>
- /// 获取哪个走势图
- /// </summary>
- /// <param name="chartid"></param>
- /// <param name="chartType"></param>
- /// <param name="fields"></param>
- /// <returns></returns>
- private TrendChartData GetTrendChartData(int chartid, TrendChartType chartType = TrendChartType.TV, LotterySearchField fields = null)
- {
- switch (chartid)
- {
- case 342: //四川快乐12
- return KL12SiChuanTrend.PreViewTrendChart(chartid, chartType, null);
- default:
- return null;
- }
- }
- #endregion
- #region 是否走Debug模式
- public void IsDebug(HttpContext context, string msg)
- {
- context.Response.ContentType = "text/plain";
- if (TVConfigs.GetConfig().Debug)
- {
- context.Response.StatusCode = 404;
- context.Response.Write("错误信息:" + msg);
- }
- }
- #endregion
- }
- }
|