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 { /// /// 获取电视走势图数据API /// 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(); //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 常用方法及验证 /// /// 验证 /// /// /// /// /// /// 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(""); sp.Append("出现次数"); foreach (var item in chartData.AllTimes) { if (item == "-1") continue; foreach (var missvalue in item.Split(',')) { sp.Append(string.Format("{0}", missvalue)); } } sp.Append(" "); sp.Append(""); sp.Append("平均遗漏"); foreach (var item in chartData.AllMaxMiss) { if (item == "-1") continue; foreach (var missvalue in item.Split(',')) { sp.Append(string.Format("{0}", missvalue)); } } sp.Append(" "); sp.Append(""); sp.Append("最大遗漏"); foreach (var item in chartData.AllMaxMiss) { if (item == "-1") continue; foreach (var missvalue in item.Split(',')) { sp.Append(string.Format("{0}", missvalue)); } } sp.Append(" "); sp.Append(""); sp.Append("当前遗漏"); foreach (var item in chartData.LocalMiss) { if (item == "-1") continue; foreach (var missvalue in item.Split(',')) { sp.Append(string.Format("{0}", missvalue)); } } sp.Append(" "); var tags = new Dictionary(); tags.Add("", chartData.HtmlData); tags.Add("", 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("{0}", 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("{0}", 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("{0}", 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("{0}", missvalue)); // } //} //result = result.Replace("@@TrendChartMissDataLocalMiss", sbLocalMiss.ToString()); //#endregion //return result; #endregion } /// /// 获取哪个走势图 /// /// /// /// /// 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 } }