304 lines
13 KiB
C#
304 lines
13 KiB
C#
using System;
|
||
using System.Configuration;
|
||
using System.Data;
|
||
using System.IO;
|
||
using System.Text.RegularExpressions;
|
||
using SuperMap.RealEstate.Web.UI;
|
||
using SuperMap.RealEstate.HighWay.Storage.Business;
|
||
using SuperMap.RealEstate.CoreFrameWork;
|
||
using HCC = HZQR.Common.Common;
|
||
using HZQR.Common;
|
||
|
||
namespace SuperMap.RealEstate.HighWay.Modules.HotKeySet
|
||
{
|
||
public partial class UpdateExcel : BasePage
|
||
{
|
||
protected string _SERVERPART_ID = ConfigurationManager.AppSettings["UmiformCommodity"].ToString().Split('|')[0];
|
||
protected string _PROVINCE_CODE = ConfigurationManager.AppSettings["PROVINCE_CODE"].ToString();
|
||
|
||
protected void Page_Load(object sender, EventArgs e)
|
||
{
|
||
if (IsPostBack) return;
|
||
|
||
btnDownExcel.Enabled = false;
|
||
//设置按钮状态
|
||
SetControlClientAction(btnUpload, false);
|
||
SetControlClientAction(btnDownExcel, false);
|
||
}
|
||
|
||
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 = "<table width='100%' border='1' cellspacing='0' cellpadding='0'>";
|
||
_Result += "<tr bgcolor='#C0C0C' style='height:42px' >"
|
||
+ "<th style='text-align:center'>序列</th>"
|
||
+ "<th style='text-align:center'>快捷键</th>"
|
||
+ "<th style='text-align:center'>商品业态</th>"
|
||
+ "<th style='text-align:center'>商品条码</th>"
|
||
+ "<th style='text-align:center'>商品名称</th></tr>";
|
||
for (int i = 0; i < dt.Rows.Count; i++)
|
||
{
|
||
if (dt.Columns.Count > 2)
|
||
{
|
||
_Result += "<tr style='height:42px'>";
|
||
_Result += "<td style='text-align:center'>" + (i + 1) + "</td>";
|
||
_Result += "<td style='text-align:center'>" + dt.Rows[i][0].ToString() + "</td>";
|
||
_Result += "<td style='text-align:center'>" + dt.Rows[i][1].ToString() + "</td>";
|
||
_Result += "<td style='text-align:center'>" + dt.Rows[i][2].ToString() + "</td>";
|
||
_Result += "<td style='text-align:center'>" + dt.Rows[i][3].ToString() + "</td>";
|
||
_Result += "</tr>";
|
||
}
|
||
else
|
||
{
|
||
_Result += "<tr style='height:42px'>";
|
||
_Result += "<td colspan='5' style='text-align:center'>文件格式不正确</td>";
|
||
_Result += "</tr>";
|
||
break;
|
||
}
|
||
|
||
}
|
||
_Result += "</table>";
|
||
return _Result;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 由连字符分隔的32位数字
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
private static string GetGuid()
|
||
{
|
||
System.Guid guid = new Guid();
|
||
guid = Guid.NewGuid();
|
||
return guid.ToString();
|
||
}
|
||
|
||
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);
|
||
}
|
||
|
||
private string UpdateHotKey(string SERVERPART_ID, DataTable dt)
|
||
{
|
||
int ModifyCount = 0;
|
||
string _Result = "";
|
||
|
||
//设置商品版本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()))
|
||
{
|
||
COMMODITY _COMMODITY = new COMMODITY(Transaction);
|
||
_COMMODITY.AddSearchParameter("SERVERPART_ID", SERVERPART_ID);
|
||
_COMMODITY.AddSearchParameter("COMMODITY_BARCODE", dt.Rows[i][2].ToString());
|
||
_COMMODITY.AddSearchParameter("BUSINESSTYPE", BUSINESSTYPE);
|
||
if (_COMMODITY.Search())
|
||
{
|
||
if (_COMMODITY.IsDuplicateHotKey(_COMMODITY.COMMODITY_ID.ToString(), dt.Rows[i][0].ToString().Trim(),
|
||
_COMMODITY.SERVERPART_ID.ToString(), _COMMODITY.BUSINESSTYPE.ToString()))
|
||
{
|
||
_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();
|
||
|
||
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() + "]";
|
||
//_Result += "第" + (i + 1) + "条[快捷键:" + dt.Rows[i][0].ToString() +
|
||
// ";商品条码:" + dt.Rows[i][1].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 == _SERVERPART_ID)
|
||
{
|
||
ExchangeData.Business.DOWNLOADUPDATE.UpdateDataVersion(Transaction, _PROVINCE_CODE,
|
||
"T_COMMODITYEX_UNIT", DateTime.Now);
|
||
foreach (DataRow drDataVersion in dtDataVersion.Rows)
|
||
{
|
||
//往数据中心表更新当前服务区商品版本
|
||
HCC.CommonHelper.SynchroUniformDataVersion("T_COMMODITYUNIFIED", drDataVersion["DATAVERSION"].ToString(),
|
||
_PROVINCE_CODE, drDataVersion["BUSINESSTYPE"].ToString());
|
||
}
|
||
}
|
||
else
|
||
{
|
||
SERVERPART _SERVERPART = Storage.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());
|
||
}
|
||
}
|
||
}
|
||
|
||
return _Result;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 判断对象是否为Int32类型的数字
|
||
/// </summary>
|
||
/// <param name="Expression"></param>
|
||
/// <returns></returns>
|
||
public static bool IsNumeric(object expression)
|
||
{
|
||
if (expression != null)
|
||
return IsNumeric(expression.ToString());
|
||
|
||
return false;
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 判断对象是否为Int32类型的数字
|
||
/// </summary>
|
||
/// <param name="Expression"></param>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
}
|
||
} |