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 += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; } else { _Result += ""; _Result += ""; _Result += ""; break; } } _Result += "
序列快捷键商品业态商品条码商品名称
" + (i + 1) + "" + dt.Rows[i][0].ToString() + "" + dt.Rows[i][1].ToString() + "" + dt.Rows[i][2].ToString() + "" + dt.Rows[i][3].ToString() + "
文件格式不正确
"; 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 } }