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
}
}