</pre><pre name="code" class="csharp"> protected void Page_Load(object sender, EventArgs e)
{
StringBuilder xmlStr = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n");
xmlStr.Append("<ret>");
string result = GetResult();
xmlStr.Append(result);
xmlStr.Append("</ret>");
Response.ContentType = "text/xml";
Response.Write(xmlStr.ToString());
Response.End();
}
private string GetResult()
{
List<SqlParameter> ps = new List<SqlParameter>();
DateTime pDate = DateTime.Now;
TimeSpan ts = new TimeSpan(0);
int sitid = 0;
string sitkey = "";
string errMsg = "";
DataSet ds = null;
try
{
#region 参数验证
//站点编号验证
if (string.IsNullOrEmpty(Request["siteid"]))
{
return "<state>error</state><code>1001</code><message>缺少站点参数</message>";
}
else
{
if (int.TryParse(Request["siteid"], out sitid))
{
ps.Add(new SqlParameter("@sitid", sitid));
}
else
{
return "<state>error</state><code>1002</code><message>站点参数格式错误</message>";
}
}
//时间戳验证
if (string.IsNullOrEmpty(Request["timestamp"]))
{
return "<state>error</state><code>1003</code><message>缺少时间参数</message>";
}
else
{
if (DateTime.TryParse(Request["timestamp"], out pDate))
{
ts = pDate.Subtract(DateTime.Now).Duration();
if (ts.Minutes > 2)
{
return "<state>error</state><code>1004</code><message>提交时间已过期</message>";
}
}
else
{
return "<state>error</state><code>1005</code><message>时间参数格式错误</message>";
}
}
//MD5验证
string sql = "select sitekey from websit where sitid=@sitid";
object obj = baseclass.GetSingle(sql, ps.ToArray());
if (obj == null || string.IsNullOrEmpty(obj.ToString()))
{
return "<state>error</state><code>1006</code><message>站点信息不存在</message>";
}
else
{
sitkey = obj.ToString();
}
string data = "siteid=" + sitid.ToString() + "×tamp=" + Request["timestamp"] + sitkey;
if (Request["sign"] != Md5Encry.EncryptMd5(data))
{
return "<state>error</state><code>1007</code><message>参数MD5验证失败</message>";
}
#endregion
#region 获取统计数据
if (ts.Minutes < 1)
{
object catchData = DataCache.GetCache("API_" + Request["siteid"]);
if (catchData == null)
{
ds = GetData(ps);
DataCache.RemoveCache("API_" + Request["siteid"]);
DataCache.SetCache("API_" + Request["siteid"], ds, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 2, 0));
}
else
{
ds = catchData as DataSet;
}
}
else
{
ds = GetData(ps);
DataCache.RemoveCache("API_" + Request["siteid"]);
DataCache.SetCache("API_" + Request["siteid"], ds, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 2, 0));
}
#endregion
if (ds == null
|| (ds.Tables[0] == null
&& ds.Tables[1] == null
&& ds.Tables[2] == null
&& ds.Tables[3] == null)
|| (ds.Tables[0].Rows.Count < 1
&& ds.Tables[1].Rows.Count < 1
&& ds.Tables[2].Rows.Count < 1
&& ds.Tables[3].Rows.Count < 1))
{
return "<state>error</state><code>1008</code><message>没有找到所需数据</message>";
}
}
catch(Exception ex)
{
Log.WriteLog("API error:" + ex.Message);
return "<state>error</state><code>1009</code><message>系统错误,请重试</message>";
}
StringBuilder re = new StringBuilder("<state>ok</state><code>1000</code><data>");
re = setXML(re, "undisposed", ds.Tables[0]);
re = setXML(re, "disposing", ds.Tables[1]);
re = setXML(re, "questionably", ds.Tables[2]);
re = setXML(re, "lost", ds.Tables[3]);
re.Append("</data>");
return re.ToString();
}
private DataSet GetData(List<SqlParameter> pList)
{
string sql = @"xxxx";
pList.Add(new SqlParameter("@now", DateTime.Now.ToString("yyyy-MM-dd" + " 00:00:00")));
return baseclass.Query(sql, pList.ToArray());
}
private StringBuilder setXML(StringBuilder src, string type, DataTable dt)
{
src.Append("<" + type + ">");
src.Append("<total>");
string total = dt.Rows.Count > 0 ? dt.Rows[0]["total"].ToString() : "0";
src.Append(total);
src.Append("</total>");
for (int i = 0; i < dt.Rows.Count; i++)
{
string tmp =
i == 0 ? "first" :
i == 1 ? "second" :
i == 2 ? "three" : "";
src.Append("<" + tmp + ">");
src.Append("<goodsid>");
src.Append(dt.Rows[i]["supplyGoodsid"].ToString());
src.Append("</goodsid>");
src.Append("<goodsname>");
src.Append(dt.Rows[i]["supplyGoodsname"].ToString());
src.Append("</goodsname>");
src.Append("<count>");
src.Append(dt.Rows[i]["cnt"].ToString());
src.Append("</count>");
src.Append("</" + tmp + ">");
}
return src.Append("</" + type + ">");
}