using System;
using System.Configuration;
using System.Data;
using System.IO;
using System.Text.RegularExpressions;
using SuperMap.RealEstate.Web.UI;
using SuperMap.RealEstate.CoreFrameWork;
using Business = SuperMap.RealEstate.HighWay.Storage.Business;
using HCC = HZQR.Common.Common;
using HZQR.Common;
namespace SuperMap.RealEstate.HighWay.CloudModule.HotKeySet
{
public partial class UpdateExcel : Storage.UI.BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;
btnDownExcel.Enabled = false;
//设置按钮状态
SetControlClientAction(btnUpload, false);
SetControlClientAction(btnDownExcel, false);
}
#region 方法 -> 导入excel文件
protected void btnUpload_Click(object sender, EventArgs e)
{
if (fpUpload.HasFile)
{
string[] AExt = fpUpload.FileName.Split('.');
string strExt = "";
if (AExt.Length > 1)
{
strExt = AExt[AExt.Length - 1];
}
//扩展名必须为xls
if (strExt == "xls")
{
//创建上传服务器的临时Excel名称
string sUploadFile = GetGuid() + '.' + strExt;
string sPathFile = Server.MapPath("/ImportExcel");
if (Directory.Exists(sPathFile) == false)
{
Directory.CreateDirectory(sPathFile);
}
//指定文件夹的路径
string strSavePath = Path.Combine(sPathFile, sUploadFile);
//上传文件
fpUpload.SaveAs(strSavePath);
//临时保存数据源
lblUploadFile.Text = strSavePath;
string sheetname = "Sheet1$";
//此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串)
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + lblUploadFile.Text +
";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(strConn);
conn.Open();
DataTable dtExcelSchema = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,
new object[] { null, null, null, "TABLE" });
if (dtExcelSchema.Rows.Count > 0)
{
sheetname = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
}
System.Data.OleDb.OleDbDataAdapter oada = new System.Data.OleDb.OleDbDataAdapter(
"select * from [" + sheetname + "]", strConn);
//获取数据导出到DataSet
DataSet ds = new DataSet();
oada.Fill(ds);
conn.Close();
DataTable dt = ds.Tables[0];
table1.InnerHtml = GetHotKetTalbe(dt);
btnDownExcel.Enabled = true;
}
else
{
Alert("请选择上传XLS文件");
}
}
else
{
Alert("请选择上传XLS文件");
}
}
private string GetHotKetTalbe(DataTable dt)
{
string _Result = "
";
_Result += ""
+ "| 序列 | "
+ "快捷键 | "
+ "商品业态 | "
+ "商品条码 | "
+ "商品名称 |
";
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Columns.Count > 2)
{
_Result += "";
_Result += "| " + (i + 1) + " | ";
_Result += "" + dt.Rows[i][0].ToString() + " | ";
_Result += "" + dt.Rows[i][1].ToString() + " | ";
_Result += "" + dt.Rows[i][2].ToString() + " | ";
_Result += "" + dt.Rows[i][3].ToString() + " | ";
_Result += "
";
}
else
{
_Result += "";
_Result += "| 文件格式不正确 | ";
_Result += "
";
break;
}
}
_Result += "
";
return _Result;
}
///
/// 由连字符分隔的32位数字
///
///
private static string GetGuid()
{
System.Guid guid = new Guid();
guid = Guid.NewGuid();
return guid.ToString();
}
#endregion
protected void btnUpdata_Click(object sender, EventArgs e)
{
string sheetname = "Sheet1$";
//此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串)
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + lblUploadFile.Text +
";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(strConn);
conn.Open();
DataTable dtExcelSchema = conn.GetOleDbSchemaTable(
System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
//将第一个表取出来
if (dtExcelSchema.Rows.Count > 0)
{
sheetname = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
}
//从获取的Excel Sheet中独处数据
System.Data.OleDb.OleDbDataAdapter oada = new System.Data.OleDb.OleDbDataAdapter("select * from [" + sheetname + "]", strConn);
//获取数据导出到DataSet
DataSet ds = new DataSet();
oada.Fill(ds);
if (Request["SERVERPART_ID"].ToDecrypt().Length > 0)
{
Alert(UpdateHotKey(Request["SERVERPART_ID"].ToDecrypt(), ds.Tables[0]));
}
else
{
Alert("请选择服务区!");
}
RefreshOpenerGridPage(RefreshGridPageType.Insert);
}
#region 方法 -> 更新商品快捷键信息
private string UpdateHotKey(string SERVERPART_ID, DataTable dt)
{
int ModifyCount = 0;
string _Result = "", Commodity_IDS = "";
//设置商品版本Datatable,用于同步云端商品版本信息
DataTable dtDataVersion = new DataTable();
dtDataVersion.Columns.Add("BUSINESSTYPE", typeof(int));
dtDataVersion.Columns.Add("DATAVERSION", typeof(DateTime));
for (int i = 0; i < dt.Rows.Count; i++)
{
//解析商品业态
string BUSINESSTYPE = DictionaryHelper.GetFieldEnumValue(
"BUSINESSTYPE", dt.Rows[i][1].ToString(), Transaction, ',');
if (!string.IsNullOrEmpty(BUSINESSTYPE) && !string.IsNullOrWhiteSpace(dt.Rows[i][0].ToString()))
{
Business.COMMODITY _COMMODITY = new Business.COMMODITY(Transaction);
_COMMODITY.AddSearchParameter("SERVERPART_ID", SERVERPART_ID);
_COMMODITY.AddSearchParameter("COMMODITY_BARCODE", dt.Rows[i][2].ToString());
_COMMODITY.AddSearchParameter("BUSINESSTYPE", BUSINESSTYPE);
if (_COMMODITY.Search(GoodsProvinceCode))
{
if (_COMMODITY.IsDuplicateHotKey(_COMMODITY.COMMODITY_ID.ToString(), dt.Rows[i][0].ToString().Trim(),
_COMMODITY.SERVERPART_ID.ToString(), _COMMODITY.BUSINESSTYPE.ToString(), GoodsProvinceCode))
{
_Result += _Result.Length > 0 ? "," : "";
_Result += dt.Rows[i][3].ToString() + "[" + dt.Rows[i][2].ToString() + "]";
}
else
{
_COMMODITY.COMMODITY_HOTKEY = dt.Rows[i][0].ToString().Trim();
_COMMODITY.Update(GoodsProvinceCode);
Commodity_IDS += (Commodity_IDS == "" ? "" : ",") + _COMMODITY.COMMODITY_ID;
if (dtDataVersion.Select("BUSINESSTYPE = '" + _COMMODITY.BUSINESSTYPE + "'").Length == 0)
{
DataRow drDataVersion = dtDataVersion.NewRow();
drDataVersion["BUSINESSTYPE"] = _COMMODITY.BUSINESSTYPE;
drDataVersion["DATAVERSION"] = _COMMODITY.OPERATE_DATE;
dtDataVersion.Rows.Add(drDataVersion);
}
else if (dtDataVersion.Select("BUSINESSTYPE = '" + _COMMODITY.BUSINESSTYPE +
"' AND DATAVERSION > '" + _COMMODITY.OPERATE_DATE.ToString() + "'").Length == 0)
{
DataRow drDataVersion = dtDataVersion.Select(
"BUSINESSTYPE = '" + _COMMODITY.BUSINESSTYPE + "'")[0];
drDataVersion["BUSINESSTYPE"] = _COMMODITY.BUSINESSTYPE;
drDataVersion["DATAVERSION"] = _COMMODITY.OPERATE_DATE;
}
ModifyCount++;
}
}
else
{
_Result += _Result.Length > 0 ? "," : "";
_Result += dt.Rows[i][3].ToString() + "[" + dt.Rows[i][2].ToString() + "]";
}
}
else
{
_Result += (_Result.Length > 0 ? "," : "") + dt.Rows[i][3].ToString() + "[" + dt.Rows[i][2].ToString() + "]";
}
}
_Result = "导入成功" + (_Result.Length > 0 ? ",以下商品导入失败" : "!") + _Result;
if (ModifyCount > 0)
{
if (SERVERPART_ID == WholeServerpartID)
{
//下发商品至服务区
ExchangeData.Business.DOWNLOADUPDATE.UpdateDataVersion(Transaction, PassportInfo.ProvinceCode,
"T_COMMODITYEX_UNIT", DateTime.Now);
foreach (DataRow drDataVersion in dtDataVersion.Rows)
{
//往数据中心表更新当前服务区商品版本
HCC.CommonHelper.SynchroUniformDataVersion("T_COMMODITYUNIFIED", drDataVersion["DATAVERSION"].ToString(),
PassportInfo.ProvinceCode, drDataVersion["BUSINESSTYPE"].ToString());
}
//同步商品至合作商户平台
DataTable dtCommodityList = Business.COMMODITY.GetCommodityList(Transaction, GoodsProvinceCode, Commodity_IDS);
string JsonString = Business.COMMODITY.ChangeListToJson(dtCommodityList, PassportInfo.ProvinceCode);
HCC.CommonHelper.PostCommodityToWebAPI(JsonString, PassportInfo.ProvinceCode, SERVERPART_ID);
}
else
{
Business.SERVERPART _SERVERPART = Business.CommonHelper.GetServerpartByID(
Transaction, SERVERPART_ID.TryParseToInt());
//下发商品至服务区
ExchangeData.Business.DOWNLOADUPDATE.UpdateDataVersion(Transaction, _SERVERPART.SERVERPART_CODE,
"T_COMMODITYEX_UNIT", DateTime.Now);
foreach (DataRow drDataVersion in dtDataVersion.Rows)
{
//往数据中心表更新当前服务区商品版本
HCC.CommonHelper.SynchroDataVersion("T_COMMODITY", drDataVersion["DATAVERSION"].ToString(),
_SERVERPART.SERVERPART_CODE, "", "", drDataVersion["BUSINESSTYPE"].ToString());
}
//同步商品至合作商户平台
DataTable dtCommodityList = Business.COMMODITY.GetCommodityList(Transaction, GoodsProvinceCode, Commodity_IDS);
string JsonString = Business.COMMODITY.ChangeListToJson(dtCommodityList, _SERVERPART.SERVERPART_CODE);
HCC.CommonHelper.PostCommodityToWebAPI(JsonString, PassportInfo.ProvinceCode, SERVERPART_ID);
}
}
return _Result;
}
#endregion
#region 方法 -> 判断对象是否为Int32类型的数字
///
/// 判断对象是否为Int32类型的数字
///
///
///
public static bool IsNumeric(object expression)
{
if (expression != null)
{
return IsNumeric(expression.ToString());
}
return false;
}
///
/// 判断对象是否为Int32类型的数字
///
///
///
public static bool IsNumeric(string expression)
{
if (expression != null)
{
string str = expression;
if (str.Length > 0 && str.Length <= 11 && Regex.IsMatch(str, @"^[-]?[0-9]*[.]?[0-9]*$"))
{
if ((str.Length < 10) || (str.Length == 10 && str[0] == '1') || (str.Length == 11 && str[0] == '-' && str[1] == '1'))
{
return true;
}
}
}
return false;
}
#endregion
}
}