using System; using System.Configuration; using System.Data; using System.Data.OleDb; using System.IO; using System.Text.RegularExpressions; using SuperMap.RealEstate.Web.UI; using SuperMap.RealEstate.CoreFrameWork; using HWRB = SuperMap.RealEstate.HighWay.Running.Business; namespace SuperMap.RealEstate.HighWay.CloudCompents.CommodityChange { public partial class UpdateExcel : Storage.UI.BasePage { protected string _BusinessType = ConfigurationManager.AppSettings["BusinessType"].ToString(); protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) return; btnDownExcel.Enabled = false; //设置确认导入按钮焦点时间 SetControlClientAction(btnDownExcel, false); } #region 上传Excel -> 显示在Table中 //上传按钮 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 = 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$"; string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + lblUploadFile.Text + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; //此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串) 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]; string _Err = ""; int _Status = 1; table1.InnerHtml = GetCommodityTalbe(dt, out _Err, out _Status); if (_Err.Length > 0) { Alert(_Err); } if (_Status == 1) { btnDownExcel.Enabled = true; } } else { Alert("请选择上传XLS文件"); } } else { Alert("请选择上传XLS文件"); } } //获取excel中的表格 _Status 0 为错误excel private string GetCommodityTalbe(DataTable dt, out string _Err, out int _Status) { _Status = 1; string _Result = ""; _Result += "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + ""; _Err = ""; if (dt.Columns.Count >= 12) { #region 1、过滤 for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i][0].ToString().Length > 0 && dt.Rows[i][1].ToString().Length > 0 && dt.Rows[i][3].ToString().Length > 0 && dt.Rows[i][5].ToString().Length > 0 && dt.Rows[i][6].ToString().Length > 0 && dt.Rows[i][9].ToString().Length > 0 && dt.Rows[i][10].ToString().Length > 0 && dt.Rows[i][11].ToString().Length > 0) { _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; _Result += ""; } } #endregion } else { _Status = 0; _Result += ""; _Result += ""; _Result += ""; } _Result += "
序列业态商品类型商品编码商品名称商品条码商品单位商品规格商品产地质量等级是否散装称重方式商品状态进价税率销售税率
" + (i + 1) + "" + dt.Rows[i][0].ToString() + "" + dt.Rows[i][1].ToString() + "" + dt.Rows[i][2].ToString() + "" + dt.Rows[i][3].ToString() + "" + dt.Rows[i][4].ToString().Replace("&", "&").Replace( "<", "<").Replace(">", ">").Replace("°", "°").Replace("·", "·") + "" + dt.Rows[i][5].ToString() + "" + dt.Rows[i][6].ToString() + "" + dt.Rows[i][7].ToString() + "" + dt.Rows[i][8].ToString() + "" + dt.Rows[i][9].ToString() + "" + dt.Rows[i][10].ToString() + "" + dt.Rows[i][11].ToString() + "" + dt.Rows[i][12].ToString() + "" + dt.Rows[i][13].ToString() + "
文件格式不正确
"; return _Result; } #endregion #region 方法 -> 导入商品数据 protected void btnUpdata_Click(object sender, EventArgs e) { string sheetname = "Sheet1$"; string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + lblUploadFile.Text + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; //此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串) System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(strConn); conn.Open(); DataTable dtExcelSchema = conn.GetOleDbSchemaTable(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); Alert(UpdateCommodity(Request["SERVERPART_ID"].ToDecrypt(), ds.Tables[0])); RefreshOpenerGridPage(RefreshGridPageType.Insert); } private string UpdateCommodity(string SERVERPART_ID, DataTable dt) { string _Result = ""; int ErrorCount = 0, NotExistsCount = 0; //1、商品类型错误 string _ErrCOMMODITYTYPE = ""; //2、业态错误 string _ErrBUSINESSTYPE = ""; //判断业态、是否散装、称重方式、商品状态是否有误 string _ErrNorType = ""; //统一定价类 string _ErrUnPri = ""; //没有商品类 string _ErrNoPro = ""; //已存在流程 string _ErrEx = ""; //商品提交审批,却不再流程中 string _ErrNotEx = ""; HWRB.HIGHWAYPROINST _HIGHWAYPROINST = new HWRB.HIGHWAYPROINST(Transaction); _HIGHWAYPROINST.HIGHWAYPROINST_ID_Encrypt = Request["HIGHWAYPROINST_ID"]; if (_HIGHWAYPROINST.Select()) { #region 1、是否存在服务区 Storage.Business.SERVERPART _SERVERPART = new Storage.Business.SERVERPART(this.Transaction); _SERVERPART.SERVERPART_ID = _HIGHWAYPROINST.Dept_ID; //1、是否存在服务区 if (_SERVERPART.Select()) { for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i][0].ToString().Length > 0 && dt.Rows[i][1].ToString().Length > 0 && dt.Rows[i][2].ToString().Length > 0 && dt.Rows[i][3].ToString().Length > 0 && dt.Rows[i][5].ToString().Length > 0 && dt.Rows[i][6].ToString().Length > 0 && dt.Rows[i][9].ToString().Length > 0 && dt.Rows[i][10].ToString().Length > 0 && dt.Rows[i][11].ToString().Length > 0) { #region 判断是否存在商品类型 Storage.Business.COMMODITYTYPE _COMMODITYTYPE = new Storage.Business.COMMODITYTYPE(this.Transaction); DataTable _DTCOMMODITYTYPE = _COMMODITYTYPE.FillDataTable("WHERE COMMODITYTYPE_NAME = '" + dt.Rows[i][1].ToString() + "' AND LENGTH(COMMODITYTYPE_CODE) = 4 AND COMMODITYTYPE_CODE" + (_SERVERPART.SERVERPART_ID.ToString() == WholeServerpartID ? "" : " NOT") + " LIKE '1%' AND PROVINCE_ID = " + _SERVERPART.PROVINCE_CODE); //2、判断是否存在商品类型 if (_DTCOMMODITYTYPE.Rows.Count > 0) { #region 2、判断是否存在业态 string _tempBUSINESSTYPE = DictionaryHelper.GetFieldEnumValue( "BUSINESSTYPE", dt.Rows[i][0].ToString(), Transaction); if (HZQR.Common.Utils.IsNumeric(_tempBUSINESSTYPE)) { if (!string.IsNullOrEmpty(Request["BUSINESSTYPE"]) && ((Request["BUSINESSTYPE"].ToDecrypt().StartsWith("!") && Request["BUSINESSTYPE"].ToDecrypt().Contains(_tempBUSINESSTYPE)) || (!Request["BUSINESSTYPE"].ToDecrypt().StartsWith("!") && !Request["BUSINESSTYPE"].ToDecrypt().Contains(_tempBUSINESSTYPE)))) { _ErrBUSINESSTYPE += _ErrBUSINESSTYPE.Length > 0 ? "," : ""; _ErrBUSINESSTYPE += dt.Rows[i][3].ToString() + "[" + dt.Rows[i][2].ToString() + "]"; ErrorCount++; continue; } string _tempISBULK = DictionaryHelper.GetFieldEnumValue( "ISBULK", dt.Rows[i][9].ToString(), Transaction); string _tempMETERINGMETHOD = DictionaryHelper.GetFieldEnumValue( "METERINGMETHOD", dt.Rows[i][10].ToString(), Transaction); string _tempCOMMODITYSTATE = DictionaryHelper.GetFieldEnumValue( "COMMODITYSTATE", dt.Rows[i][11].ToString(), Transaction); #region 判断是否散装、称重方式、商品状态是否有误 if (!string.IsNullOrEmpty(_tempCOMMODITYSTATE) && HZQR.Common.Utils.IsNumeric(_tempISBULK) && HZQR.Common.Utils.IsNumeric(_tempMETERINGMETHOD)) { #region 3、是否存在商品 --> 添加 Storage.Business.COMMODITY _COMMODITY = new Storage.Business.COMMODITY(this.Transaction); _COMMODITY.AddSearchParameter("COMMODITY_CODE", dt.Rows[i][2].ToString()); _COMMODITY.AddSearchParameter("SERVERPART_ID", _SERVERPART.SERVERPART_ID); _COMMODITY.AddSearchParameter("COMMODITY_STATE", 1); //4、是否有当前商品 if (_COMMODITY.Search(GoodsProvinceCode)) { HWRB.COMMODITY _RunningCOMMODITY = new HWRB.COMMODITY(this.Transaction); _RunningCOMMODITY.COMMODITY_ID = _COMMODITY.COMMODITY_ID; string _tempCOMMODITYGRADE = ""; if (dt.Rows[i][8].ToString().Length > 0) { _tempCOMMODITYGRADE = DictionaryHelper.GetFieldEnumValue( "COMMODITYGRADE", dt.Rows[i][8].ToString(), Transaction); } #region 4、流程中是否有该商品 if (_RunningCOMMODITY.Select()) { HWRB.MODIFYFROMSTORAGE _MODIFYFROMSTORAGE = new HWRB.MODIFYFROMSTORAGE(this.Transaction); _MODIFYFROMSTORAGE.AddSearchParameter("Table_Name", "T_COMMODITY"); _MODIFYFROMSTORAGE.AddSearchParameter("Field_Name", "COMMODITY_ID"); _MODIFYFROMSTORAGE.AddSearchParameter("Field_Value", _COMMODITY.COMMODITY_ID); if (_MODIFYFROMSTORAGE.Search()) { //如果存在则更新 if (_HIGHWAYPROINST.HIGHWAYPROINST_ID == _MODIFYFROMSTORAGE.HIGHWAYPROINST_ID) { //if (_RunningCOMMODITY.BUSINESSTYPE != int.Parse(_tempBUSINESSTYPE)) //{ // IsUpdate = true; _RunningCOMMODITY.BUSINESSTYPE = int.Parse(_tempBUSINESSTYPE); //} _RunningCOMMODITY.COMMODITY_TYPE = _DTCOMMODITYTYPE.Rows[0]["COMMODITYTYPE_ID"].ToString(); _RunningCOMMODITY.COMMODITY_NAME = dt.Rows[i][3].ToString(); _RunningCOMMODITY.COMMODITY_BARCODE = dt.Rows[i][4].ToString().Trim().Length == 0 ? CreateBarCode(dt.Rows[i][2].ToString()) : dt.Rows[i][4].ToString(); _RunningCOMMODITY.COMMODITY_UNIT = dt.Rows[i][5].ToString(); _RunningCOMMODITY.COMMODITY_RULE = dt.Rows[i][6].ToString(); _RunningCOMMODITY.COMMODITY_ORI = dt.Rows[i][7].ToString(); if (HZQR.Common.Utils.IsNumeric(_tempCOMMODITYGRADE)) { _RunningCOMMODITY.COMMODITY_GRADE = _tempCOMMODITYGRADE; } _RunningCOMMODITY.ISBULK = int.Parse(_tempISBULK); _RunningCOMMODITY.METERINGMETHOD = int.Parse(_tempMETERINGMETHOD); _RunningCOMMODITY.COMMODITY_STATE = int.Parse(_tempCOMMODITYSTATE); //进价税率 if (!string.IsNullOrEmpty(dt.Rows[i][dt.Columns.Count - 2].ToString())) { try { _RunningCOMMODITY.DUTY_PARAGRAPH = short.Parse( dt.Rows[i][dt.Columns.Count - 2].ToString()); } catch { } } //销售税率 if (!string.IsNullOrEmpty(dt.Rows[i][dt.Columns.Count - 1].ToString())) { try { _RunningCOMMODITY.RETAIL_DUTY = short.Parse( dt.Rows[i][dt.Columns.Count - 1].ToString()); } catch { } } _RunningCOMMODITY.Update(); } else { //不存在则提示 HWRB.HIGHWAYPROINST _HIGHWAYPROINSTCOMMODITY = new HWRB.HIGHWAYPROINST(Transaction); _HIGHWAYPROINSTCOMMODITY.AddSearchParameter("HIGHWAYPROINST_ID", _MODIFYFROMSTORAGE.HIGHWAYPROINST_ID); if (_HIGHWAYPROINSTCOMMODITY.Search()) { _ErrEx += _ErrEx.Length > 0 ? "," : ""; _ErrEx += dt.Rows[i][3].ToString() + "[" + dt.Rows[i][2].ToString() + "]创建时间" + _HIGHWAYPROINSTCOMMODITY.HIGHWAYPROINST_CREATEDATE; ErrorCount++; } } } else { //一般没有这种情况 _ErrNotEx += _ErrNotEx.Length > 0 ? "," : ""; _ErrNotEx += dt.Rows[i][3].ToString() + "[" + dt.Rows[i][2].ToString() + "]"; } } else { _RunningCOMMODITY.ResetProperty(); _RunningCOMMODITY.CopyFrom(_COMMODITY); _RunningCOMMODITY.BUSINESSTYPE = int.Parse(_tempBUSINESSTYPE); _RunningCOMMODITY.COMMODITY_TYPE = _DTCOMMODITYTYPE.Rows[0]["COMMODITYTYPE_ID"].ToString(); _RunningCOMMODITY.COMMODITY_NAME = dt.Rows[i][3].ToString(); _RunningCOMMODITY.COMMODITY_BARCODE = dt.Rows[i][4].ToString().Trim().Length == 0 ? CreateBarCode(dt.Rows[i][2].ToString()) : dt.Rows[i][4].ToString(); _RunningCOMMODITY.COMMODITY_UNIT = dt.Rows[i][5].ToString(); _RunningCOMMODITY.COMMODITY_RULE = dt.Rows[i][6].ToString(); _RunningCOMMODITY.COMMODITY_ORI = dt.Rows[i][7].ToString(); if (HZQR.Common.Utils.IsNumeric(_tempCOMMODITYGRADE)) { _RunningCOMMODITY.COMMODITY_GRADE = _tempCOMMODITYGRADE; } _RunningCOMMODITY.ISBULK = int.Parse(_tempISBULK); _RunningCOMMODITY.METERINGMETHOD = int.Parse(_tempMETERINGMETHOD); _RunningCOMMODITY.COMMODITY_STATE = int.Parse(_tempCOMMODITYSTATE); //进价税率 if (!string.IsNullOrEmpty(dt.Rows[i][dt.Columns.Count - 2].ToString())) { try { _RunningCOMMODITY.DUTY_PARAGRAPH = short.Parse( dt.Rows[i][dt.Columns.Count - 2].ToString()); } catch { } } //销售税率 if (!string.IsNullOrEmpty(dt.Rows[i][dt.Columns.Count - 1].ToString())) { try { _RunningCOMMODITY.RETAIL_DUTY = short.Parse( dt.Rows[i][dt.Columns.Count - 1].ToString()); } catch { } } _RunningCOMMODITY.Insert(); //插入关联关系 HWRB.MODIFYFROMSTORAGE _MODIFYFROMSTORAGE = new HWRB.MODIFYFROMSTORAGE(this.Transaction); _MODIFYFROMSTORAGE.HIGHWAYPROINST_ID = _HIGHWAYPROINST.HIGHWAYPROINST_ID; _MODIFYFROMSTORAGE.Field_Value = _COMMODITY.COMMODITY_ID.Value.ToString(); _MODIFYFROMSTORAGE.Table_Name = "T_COMMODITY"; _MODIFYFROMSTORAGE.Field_Name = "COMMODITY_ID"; _MODIFYFROMSTORAGE.Insert(); } #endregion } else { if ((string.IsNullOrEmpty(_BusinessType) ? true : !_BusinessType.Contains(_tempBUSINESSTYPE)) && _SERVERPART.PROVINCE_CODE.ToString() == ProvinceID && _HIGHWAYPROINST.ExecuteDataTable( "SELECT 1 FROM HIGHWAY_STORAGE.V_ALL_COMMODITY" + GoodsProvinceCode + " WHERE COMMODITY_BARCODE = '" + dt.Rows[i][2].ToString() + "' AND COMMODITY_STATE >= 1 AND SERVERPART_ID = " + WholeServerpartID + (string.IsNullOrEmpty(_BusinessType) ? "" : " AND BUSINESSTYPE NOT IN (" + _BusinessType + ")")).Rows.Count > 0 && _SERVERPART.SERVERPART_ID.ToString() != WholeServerpartID) { _ErrUnPri += (string.IsNullOrEmpty(_ErrUnPri) ? "" : ",") + dt.Rows[i][3].ToString() + "[" + dt.Rows[i][2].ToString() + "]"; } else { _ErrNoPro += _ErrNoPro.Length > 0 ? "," : ""; _ErrNoPro += dt.Rows[i][3].ToString() + "[" + dt.Rows[i][2].ToString() + "]"; } ErrorCount++; } #endregion } else { _ErrNorType += _ErrNorType.Length > 0 ? "," : ""; _ErrNorType += dt.Rows[i][3].ToString() + "[" + dt.Rows[i][2].ToString() + "]"; NotExistsCount++; } #endregion } else { _ErrBUSINESSTYPE += _ErrBUSINESSTYPE.Length > 0 ? "," : ""; _ErrBUSINESSTYPE += dt.Rows[i][3].ToString() + "[" + dt.Rows[i][2].ToString() + "]"; ErrorCount++; } #endregion } else { _ErrCOMMODITYTYPE += _ErrCOMMODITYTYPE.Length > 0 ? "," : ""; _ErrCOMMODITYTYPE += dt.Rows[i][3].ToString() + "[" + dt.Rows[i][2].ToString() + "]"; ErrorCount++; } #endregion } else { NotExistsCount++; } } } else { return "请选择服务区!"; } #endregion } else { return "流程码为空!"; } _Result += _ErrCOMMODITYTYPE.Length > 0 ? ",商品名称为" + _ErrCOMMODITYTYPE + "的商品类型无法匹配" : ""; _Result += _ErrBUSINESSTYPE.Length > 0 ? ",商品名称为" + _ErrBUSINESSTYPE + "的业态无法匹配" : ""; _Result += _ErrNorType.Length > 0 ? ",商品名称为" + _ErrNorType + "的是否散称或称重方式或商品状态无法匹配" : ""; _Result += _ErrUnPri.Length > 0 ? ",商品名称为" + _ErrUnPri + "已存在于统一定价中" : ""; _Result += _ErrNoPro.Length > 0 ? ",商品名称为" + _ErrNoPro + "不存在,请进行商品新增" : ""; _Result += _ErrEx.Length > 0 ? ",商品名称为" + _ErrEx + "已存在于其他业务流程中" : ""; _Result += _ErrNotEx.Length > 0 ? ",商品名称为" + _ErrNotEx + "已提交审批却不在业务流程中,请通知管理员" : ""; _Result = (_Result.Length > 0 ? ",其中未对应系统商品" + ErrorCount + "件" : "") + _Result; if (dt.Rows.Count != ErrorCount + NotExistsCount) { _Result = "导入完成" + _Result; } else { _Result = "导入失败" + _Result; } return _Result; } #endregion #region 方法 -> 产生商品条码 public string CreateBarCode(string COMMODITYCode) { string BarCode = string.Empty; int LastCode = 0; BarCode = COMMODITYCode; //8位编号补足12位 if (BarCode.Length == 8) BarCode = "2600" + BarCode; //偶数位的数字求和*3 + 奇数位数字和 for (int i = 1; i <= 12; i++) { int Num = int.Parse(BarCode.Substring(i - 1, 1)); if (i % 2 == 0) { LastCode += Num * 3; } else { LastCode += Num; } } //和求10的模 LastCode = 10 - (LastCode % 10); if (LastCode == 10) LastCode = 0; //返回条码 return BarCode + LastCode.ToString(); } #endregion #region 方法 -> 修改商品Symbol public void UpdateSymbol(string SERVERPART_ID, string BUSINESS_TYPE, int COMMODITY_ID) { //获取服务区业态最大Symbol DataTable dt = new Running.Business.COMMODITY(Transaction).ExecuteDataTable( "SELECT MAX(to_number(REGEXP_REPLACE(NVL(COMMODITY_SYMBOL,0), '^[[:alpha:]]'))) FROM HIGHWAY_STORAGE.T_COMMODITY" + GoodsProvinceCode + " WHERE SERVERPART_ID = " + SERVERPART_ID + " AND BUSINESSTYPE = " + BUSINESS_TYPE); int NextSymbol = int.Parse(dt.Rows[0][0].ToString()) + 1; if (WholeServerpartID == SERVERPART_ID) { new Running.Business.COMMODITY(Transaction).ExecuteNonQuery("UPDATE HIGHWAY_STORAGE.T_COMMODITY" + GoodsProvinceCode + " SET COMMODITY_SYMBOL = 'T" + NextSymbol + "' WHERE COMMODITY_ID = " + COMMODITY_ID, null); } else { new Running.Business.COMMODITY(Transaction).ExecuteNonQuery("UPDATE HIGHWAY_STORAGE.T_COMMODITY" + GoodsProvinceCode + " SET COMMODITY_SYMBOL = " + NextSymbol + " WHERE COMMODITY_ID = " + COMMODITY_ID, null); } } #endregion #region 公共方法 /// /// 由连字符分隔的32位数字 /// /// private static string GetGuid() { System.Guid guid = new Guid(); guid = Guid.NewGuid(); return guid.ToString(); } /// /// 是否为Double类型 /// /// /// public static bool IsDouble(object expression) { if (expression != null) return Regex.IsMatch(expression.ToString(), @"^([0-9])[0-9]*(\.\w*)?$"); return false; } #endregion } }