using grsvr6Lib;
using Newtonsoft.Json.Linq;
using NFine.Application.ProductManage;
using NFine.Code;
using NFine.Data.Extensions;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Web;
using System.Xml;
namespace NFine.Web
{
///
/// Handler1 的摘要说明
///
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//DiscountRateApp discountrateApp = new DiscountRateApp();
string keyValue = context.Request.Params["keyValue"];
//GridppReportServer Report = new GridppReportServer();
//string TypeText = context.Request.QueryString["type"];
//var data = discountrateApp.GetForm(keyValue);
////首先载入报表模板文件
//string ReportPathFile = context.Server.MapPath("/Grf/1a.grf"); //根据WEB服务器根目录寻址
//bool Success = Report.LoadFromFile(ReportPathFile);
////载入报表数据,为约定格式的 XML 或 JSON 文本数据
//string reportDataText = data.ToJson();
//Report.LoadDataFromXML(reportDataText);
////生成报表文档格式数据
//IGRBinaryObject GRDDataObject = Report.GenerateDocumentData();
//bool IsGRP = (TypeText == "grp");
//string FileName = IsGRP ? "YourFileName.grp" : "YourFileName.grd";
////将生成的数据响应给客户端
//ServerUtility.ResponseBinary(context, GRDDataObject, FileName, "application/grd", "attachment");
string FileValue, PrintValue, ParaName, ParaValue;
FileValue = FileToString(context,"/Frp/lot.fr3");
ParaName = "ShopName`~PrintDepositAdd`~PrintPaperNo`~Title"; //`~为各参数的分隔符
ParaValue = "测试酒楼"
+ "`~说明:本单据为贵客押金收取凭证,盖章有效。退房时请出示,遗失者自负,请妥善保存。退房时间为12:00时,延时退房18:00时以前按半天房费收取,18:00时以后算全天房价。押金单有效期为一个月,过期作废。 贵重物品请交前台寄存,未寄存丢失自负。 谢谢!"
+ "`~身份证:4325011980639512"
+ "`~押金单";
DataTable dt = SqlHelper.GetDataTableBySql("SELECT * FROM dbo.ICSDiscountRate where F_Id='" + keyValue + "'");
PrintValue = TableToXml(dt);
string ScriptStr;
string PictureStr = "";
ScriptStr = "";
ScriptStr = ScriptStr.Replace(System.Environment.NewLine, string.Empty);
context.Response.Write(ScriptStr);
}
public bool IsReusable
{
get
{
return false;
}
}
private string FileToString(HttpContext context, string FileName)
{
try
{
string[] ByteStr = new string[256];
for (int i = 0; i < 256; i++)
{
if (i == 0)
ByteStr[i] = "00";
else if (i < 16)
ByteStr[i] = "0" + Convert.ToString(i, 16).ToUpper();
else
ByteStr[i] = Convert.ToString(i, 16).ToUpper();
}
if (System.IO.File.Exists(context.Server.MapPath(FileName)) == false)
return "";
byte[] FileValue = System.IO.File.ReadAllBytes(context.Server.MapPath(FileName));
StringBuilder FileStr = new StringBuilder();
for (int FileRecn = 0; FileRecn < FileValue.Length; FileRecn++)
{
FileStr.Append(ByteStr[FileValue[FileRecn]]);
}
FileValue = null;
return FileStr.ToString();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
private string TableToXml(DataTable DtTable)
{
StringBuilder PrintStr = new StringBuilder();
XmlWriterSettings setting = new XmlWriterSettings();
setting.Indent = true;
setting.OmitXmlDeclaration = true;
using (XmlWriter PrintXml = XmlWriter.Create(PrintStr, setting))
{
PrintXml.WriteStartElement("xml");
PrintXml.WriteAttributeString("xmlns", "s", null, "u");
PrintXml.WriteAttributeString("xmlns", "dt", null, "u");
PrintXml.WriteAttributeString("xmlns", "rs", null, "u");
PrintXml.WriteAttributeString("xmlns", "z", null, "#R");
PrintXml.WriteStartElement("s", "Schema", null);
PrintXml.WriteAttributeString("id", "RowsetSchema");
PrintXml.WriteStartElement("s", "ElementType", null);
PrintXml.WriteAttributeString("name", "row");
PrintXml.WriteAttributeString("content", "eltOnly");
PrintXml.WriteAttributeString("rs", "updatable", null, "true");
foreach (DataColumn Column in DtTable.Columns)
{
if (Column.DataType.Name == "Int64" || Column.DataType.Name == "Boolean"
|| Column.DataType.Name == "String" || Column.DataType.Name == "DateTime"
|| Column.DataType.Name == "Decimal" || Column.DataType.Name == "Double"
|| Column.DataType.Name == "Int32" || Column.DataType.Name == "Single"
|| Column.DataType.Name == "Int16" || Column.DataType.Name == "Byte")
{
PrintXml.WriteStartElement("s", "AttributeType", null);
PrintXml.WriteAttributeString("name", Column.ColumnName);
PrintXml.WriteAttributeString("rs", "number", null, (Column.Ordinal + 1).ToString());
PrintXml.WriteAttributeString("rs", "nullable", null, "true");
PrintXml.WriteAttributeString("rs", "maydefer", null, "true");
PrintXml.WriteAttributeString("rs", "writeunknown", null, "true");
PrintXml.WriteAttributeString("rs", "basetable", null, DtTable.TableName);
PrintXml.WriteAttributeString("rs", "basecolumn", null, Column.ColumnName);
if (Column.DataType.Name == "Int64")
{ //bigint
PrintXml.WriteStartElement("s", "datatype", null);
PrintXml.WriteAttributeString("dt", "type", null, "i8");
PrintXml.WriteAttributeString("dt", "maxLength", null, "8");
PrintXml.WriteEndElement();
}
else if (Column.DataType.Name == "Boolean")
{ //bit
PrintXml.WriteStartElement("s", "datatype", null);
PrintXml.WriteAttributeString("dt", "type", null, "boolean");
PrintXml.WriteAttributeString("dt", "maxLength", null, "2");
PrintXml.WriteEndElement();
}
else if (Column.DataType.Name == "String")
{ //char
PrintXml.WriteStartElement("s", "datatype", null);
PrintXml.WriteAttributeString("dt", "type", null, "string");
PrintXml.WriteAttributeString("dt", "maxLength", null, Column.MaxLength.ToString());
PrintXml.WriteEndElement();
}
else if (Column.DataType.Name == "DateTime")
{ //dateTime
PrintXml.WriteStartElement("s", "datatype", null);
PrintXml.WriteAttributeString("dt", "type", null, "dateTime");
PrintXml.WriteAttributeString("dt", "maxLength", null, "16");
PrintXml.WriteEndElement();
}
else if (Column.DataType.Name == "Decimal")
{ //Decimal
PrintXml.WriteStartElement("s", "datatype", null);
PrintXml.WriteAttributeString("dt", "type", null, "number");
PrintXml.WriteAttributeString("dt", "maxLength", null, "19");
PrintXml.WriteEndElement();
}
else if (Column.DataType.Name == "Double")
{ //Float
PrintXml.WriteStartElement("s", "datatype", null);
PrintXml.WriteAttributeString("dt", "type", null, "float");
PrintXml.WriteAttributeString("dt", "maxLength", null, "8");
PrintXml.WriteEndElement();
}
else if (Column.DataType.Name == "Int32")
{ //int
PrintXml.WriteStartElement("s", "datatype", null);
PrintXml.WriteAttributeString("dt", "type", null, "int");
PrintXml.WriteAttributeString("dt", "maxLength", null, "4");
PrintXml.WriteEndElement();
}
else if (Column.DataType.Name == "Single")
{ //Real
PrintXml.WriteStartElement("s", "datatype", null);
PrintXml.WriteAttributeString("dt", "type", null, "r4");
PrintXml.WriteAttributeString("dt", "maxLength", null, "4");
PrintXml.WriteEndElement();
}
else if (Column.DataType.Name == "Int16")
{ //smallint
PrintXml.WriteStartElement("s", "datatype", null);
PrintXml.WriteAttributeString("dt", "type", null, "i2");
PrintXml.WriteAttributeString("dt", "maxLength", null, "2");
PrintXml.WriteEndElement();
}
else if (Column.DataType.Name == "Byte")
{ //tinyint
PrintXml.WriteStartElement("s", "datatype", null);
PrintXml.WriteAttributeString("dt", "type", null, "ui1");
PrintXml.WriteAttributeString("dt", "maxLength", null, "1");
PrintXml.WriteEndElement();
}
PrintXml.WriteEndElement();
}
}
PrintXml.WriteEndElement();
PrintXml.WriteEndElement();
PrintXml.WriteStartElement("rs", "data", null);
foreach (DataRow Row in DtTable.Rows)
{
PrintXml.WriteStartElement("z", "row", null);
foreach (DataColumn Column in DtTable.Columns)
{
if (Row.IsNull(Column) == true)
continue;
if (Column.DataType.Name == "Int64" || Column.DataType.Name == "Boolean"
|| Column.DataType.Name == "String" || Column.DataType.Name == "DateTime"
|| Column.DataType.Name == "Decimal" || Column.DataType.Name == "Double"
|| Column.DataType.Name == "Int32" || Column.DataType.Name == "Single"
|| Column.DataType.Name == "Int16" || Column.DataType.Name == "Byte")
{
if (Column.DataType.Name == "DateTime")
{
DateTime TmpDateTime = System.Convert.ToDateTime(Row[Column]);
string TmpStr = TmpDateTime.ToString("yyyy-MM-dd") + "T" + TmpDateTime.ToString("HH:mm:ss");
PrintXml.WriteAttributeString(Column.ColumnName, TmpStr);
}
else
{
PrintXml.WriteAttributeString(Column.ColumnName, Row[Column].ToString());
}
}
}
PrintXml.WriteEndElement();
}
PrintXml.WriteEndElement();
PrintXml.WriteEndElement();
}
return PrintStr.ToString();
}
}
}