using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using GThinking.N_MODEL.Page; using GThinking.N_MISPRO.Data; using GThinking.N_MISPRO.Utility; using System.Collections.Generic; using GThinking.N_CONTROL; using GThinking.N_MISPROAS; namespace GThinking.N_XLXSBJ { public partial class TZYZBJMDRInfo : SingleCardBase { TZYZBJM_DR entity = new TZYZBJM_DR(); protected void Page_Load(object sender, EventArgs e) { this.UMID = 100860178; this.UMName = "按型号规格电压等级报价数量区间调报价"; base.CurMaster = Master; base.CurEntity = entity; this.PageHeight = 210; this.PageWidth = 420; Master.EnableAttachBtn = false; Master.EnableCancelBtn = false; Master.EnableCopyBtn = false; Master.EnableDeleteBtn = false; Master.EnableEditBtn = false; Master.EnableInsertBtn = false; Master.EnablePrintBtn = false; Master.EnableRefreshBtn = false; Master.EnableSaveBtn = false; fupdPost.FileSaveType = gtAsyncFileUpload.DFileSaveType.SaveToPath; fupdPost.Filter = "XLS,XLSX"; this.Page.Title = "导入Excel文件"; base.InitPage(); if (!IsPostBack) { GtLabel1.Text = "Excel栏目依次为:型号、规格、电压等级、报价数量下限、报价数量上限、调价因子"; txtJGBID.Value = PageParam.GetRTrimString("JGBID"); chkIns.Value = "Y"; TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL SQL = new TSQL(dberp); SQL.Clear(); SQL.Add("select XLXSTZYZ_YZID, XLXSTZYZ_YZMC, XLXSTZYZ_JJFS "); SQL.Add(" from XLXSTZYZ"); SQL.Add(" where XLXSTZYZ_MXBH = 'BJD' and XLXSTZYZ_TJYS='M' "); SQL.Add(" and XLXSTZYZ_JGBID = :pJGBID"); SQL.Add("order by XLXSTZYZ_YZID,XLXSTZYZ_XSXH"); SQL.ParamByName("pJGBID").Value = txtJGBID.Value; DataSet ds = dberp.OpenDataSet(SQL); cbxYZID.ClearItems(); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { string sJJFSMC = ""; if (ds.Tables[0].Rows[i]["XLXSTZYZ_JJFS"].ToString().Trim().Equals("JJ")) { sJJFSMC = "(元)"; } else if (ds.Tables[0].Rows[i]["XLXSTZYZ_JJFS"].ToString().Trim().Equals("MX") || ds.Tables[0].Rows[i]["XLXSTZYZ_JJFS"].ToString().Trim().Equals("DX")) { sJJFSMC = "(X)"; } else { sJJFSMC = "(%)"; } cbxYZID.Items.Add(new ListItem(ds.Tables[0].Rows[i]["XLXSTZYZ_YZMC"].ToString().Trim() + sJJFSMC, ds.Tables[0].Rows[i]["XLXSTZYZ_YZID"].ToString().Trim())); } if (ds.Tables[0].Rows.Count == 1) { cbxYZID.SelectedValue = ds.Tables[0].Rows[0]["XLXSTZYZ_YZID"].ToString().Trim(); } } } #region 控件事件 protected void btnQD_Click(object sender, EventArgs e) { if (cbxYZID.SelectedValue.Trim().Equals("")) { ShowMessage("请选择待设置的调价因子!"); return; } if (fupdPost.FilePath.Equals("")) { ShowMessage("请选择需要导入的文件!"); return; } TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sSQL = new TSQL(dberp); try { lblTitle.Text = "正在导入数据,请稍后..."; dberp.BeginTrans(); DataSet aDataExcel = new DataSet(); if (AppRuntime.BitType == AppBitType.Bit32) { aDataExcel = XLBJDUtils.ReadFromExcelFile(fupdPost.FilePath, 0, ""); } else // AppBitType.Bit64 { ReadWJ(fupdPost.FilePath, ref aDataExcel); } ExcelColumnValid(aDataExcel); InsertYZZM(dberp, sSQL, aDataExcel); dberp.CommitTrans(); ShowMessage("导入成功!"); //执行完毕后刷新父页面并关闭当前页面 DialogOperationScript dos = new DialogOperationScript(this); dos.ClickOwnerButton(PageParam.GetRTrimString("btnRefreshCID")); dos.CloseSelf(); dos.Execute(); } catch (Exception ex) { lblTitle.Text = ""; dberp.RollbackTrans(); ShowMessage(ex.Message); } finally { if (!fupdPost.FilePath.Trim().Equals("") && System.IO.File.Exists(fupdPost.FilePath.Trim())) System.IO.File.Delete(fupdPost.FilePath.Trim()); } } protected void btnQX_Click(object sender, EventArgs e) { CloseWindow(); } #endregion #region 自定义函数 private void InsertYZZM(TDatabase dberp, TSQL sSQL, DataSet ds) { int rrrorNUM = 2; foreach (DataRow Row in ds.Tables[0].Rows) { string sXLXHID = sGetCellTest(Row, 0).Trim(); string sXLGGID = sGetCellTest(Row, 1).Trim(); string sDYDJID = sGetCellTest(Row, 2).Trim(); double dBJSLXX = CMISproConvert.StrToFloat(sGetCellTest(Row, 3), 0); double dBJSLSX = CMISproConvert.StrToFloat(sGetCellTest(Row, 4), 0); double dYZZ = CMISproConvert.StrToFloat(sGetCellTest(Row, 5), 0); if (sXLXHID.Trim().Equals("")) { throw new Exception("第" + rrrorNUM + "行型号为空!"); } if (!CMISproDataBase.ExistsRecord("DBERP", string.Format("select 1 from XLXHB where XLXHB_XLXHID='{0}' and ISNULL(XLXHB_TYBZ,'N') <> 'Y' ", sXLXHID))) { throw new Exception("第" + rrrorNUM + "行型号[" + sXLXHID + "]不存在或已停用!"); } if (sXLGGID.Trim().Equals("")) { throw new Exception("第" + rrrorNUM + "行规格为空!"); } if (sXLGGID.Trim().Length > 60) { throw new Exception("第" + rrrorNUM + "行规格[" + sXLGGID + "]长度超过60个字符!"); } if (!sDYDJID.Trim().Equals("") && !CMISproDataBase.ExistsRecord("DBERP", string.Format("select 1 from XLDYDJB where XLDYDJB_DYDJID='{0}' and ISNULL(XLDYDJB_TYBZ,'N') <> 'Y' ", sDYDJID))) { throw new Exception("第" + rrrorNUM + "行电压等级[" + sDYDJID + "]不存在或已停用!"); } if (dBJSLXX < 0) { throw new Exception("第" + rrrorNUM + "行报价数量下限[" + dBJSLXX + "]不合法!"); } if (dBJSLSX < 0 || (dBJSLSX != 0 && dBJSLXX > dBJSLSX)) { throw new Exception("第" + rrrorNUM + "行报价数量上限[" + dBJSLSX + "]不合法,上限为0表示不限制,否则必须大于等于下限!"); } if (ExistsBJSLQJ(dBJSLXX, dBJSLSX, sXLXHID, sXLGGID, sDYDJID)) { throw new Exception("第" + rrrorNUM + "行报价数量区间[" + dBJSLXX + "~" + (dBJSLSX == 0 ? "--" : dBJSLSX.ToString()) + "]与已有记录有交集,不允许导入!"); } //已存在相同区间记录时更新,否则依选择决定是否插入 if (CMISproDataBase.ExistsRecord("DBERP", GetExistsSQL(dBJSLXX, dBJSLSX, sXLXHID, sXLGGID, sDYDJID))) { sSQL.Clear(); sSQL.Add("update XLXSBJDYZZM set XLXSBJDYZZM_YZZ = :pYZZ,XLXSBJDYZZM_WHR = :pWHR,XLXSBJDYZZM_WHRID =:pWHRID,XLXSBJDYZZM_WHSJ =:pWHSJ "); sSQL.Add(" where XLXSBJDYZZM_JGBID=:pJGBID"); sSQL.Add(" and XLXSBJDYZZM_XLXHID=:pXLXHID"); sSQL.Add(" and XLXSBJDYZZM_XLGGID=:pXLGGID"); sSQL.Add(" and XLXSBJDYZZM_DYDJID=:pDYDJID"); sSQL.Add(" and XLXSBJDYZZM_BJSLSX=:pBJSLSX"); sSQL.Add(" and XLXSBJDYZZM_BJSLXX=:pBJSLXX"); sSQL.Add(" and XLXSBJDYZZM_YZID=:pYZID"); FillKeyParams(sSQL, dBJSLXX, dBJSLSX, sXLXHID, sXLGGID, sDYDJID); sSQL.ParamByName("pYZZ").Value = dYZZ; sSQL.ParamByName("pWHR").Value = tSession.UserName; sSQL.ParamByName("pWHRID").Value = tSession.UserId; sSQL.ParamByName("pWHSJ").Value = DateTime.Now; dberp.ExecSQL(sSQL); } else { if (chkIns.Checked)//不存在的记录自动插入 { sSQL.Clear(); sSQL.Add("insert into XLXSBJDYZZM(XLXSBJDYZZM_JGBID,XLXSBJDYZZM_XLXHID,XLXSBJDYZZM_XLGGID,XLXSBJDYZZM_DYDJID,XLXSBJDYZZM_BJSLSX,XLXSBJDYZZM_BJSLXX,XLXSBJDYZZM_YZID,XLXSBJDYZZM_YZZ,XLXSBJDYZZM_WHR,XLXSBJDYZZM_WHRID,XLXSBJDYZZM_WHSJ)"); sSQL.Add(" values(:pJGBID,:pXLXHID,:pXLGGID,:pDYDJID,:pBJSLSX,:pBJSLXX,:pYZID,:pYZZ,:pWHR,:pWHRID,:pWHSJ)"); FillKeyParams(sSQL, dBJSLXX, dBJSLSX, sXLXHID, sXLGGID, sDYDJID); sSQL.ParamByName("pYZZ").Value = dYZZ; sSQL.ParamByName("pWHR").Value = tSession.UserName; sSQL.ParamByName("pWHRID").Value = tSession.UserId; sSQL.ParamByName("pWHSJ").Value = DateTime.Now; dberp.ExecSQL(sSQL); } } rrrorNUM++; } } private void FillKeyParams(TSQL sSQL, double dBJSLXX, double dBJSLSX, string sXLXHID, string sXLGGID, string sDYDJID) { sSQL.ParamByName("pJGBID").Value = txtJGBID.Value.Trim(); sSQL.ParamByName("pXLXHID").Value = sXLXHID; sSQL.ParamByName("pXLGGID").Value = sXLGGID.Trim().Equals("") ? " " : sXLGGID; sSQL.ParamByName("pDYDJID").Value = sDYDJID.Trim().Equals("") ? " " : sDYDJID; sSQL.ParamByName("pBJSLSX").Value = dBJSLSX; sSQL.ParamByName("pBJSLXX").Value = dBJSLXX; sSQL.ParamByName("pYZID").Value = cbxYZID.SelectedValue.Trim(); } private string GetExistsSQL(double dBJSLXX, double dBJSLSX, string sXLXHID, string sXLGGID, string sDYDJID) { string sXLGGID_DB = sXLGGID.Trim().Equals("") ? " " : sXLGGID.Replace("'", "''"); string sDYDJID_DB = sDYDJID.Trim().Equals("") ? " " : sDYDJID.Replace("'", "''"); return string.Format("select 1 from XLXSBJDYZZM where XLXSBJDYZZM_JGBID='{0}' and XLXSBJDYZZM_YZID='{1}' and XLXSBJDYZZM_XLXHID='{2}'" + " and XLXSBJDYZZM_XLGGID='{3}' and XLXSBJDYZZM_DYDJID='{4}' and XLXSBJDYZZM_BJSLXX={5} and XLXSBJDYZZM_BJSLSX={6}", txtJGBID.Value.Trim(), cbxYZID.SelectedValue.Trim(), sXLXHID, sXLGGID_DB, sDYDJID_DB, dBJSLXX, dBJSLSX); } //判断同一型号+规格+电压等级+因子的报价数量区间是否与已有记录(非完全相同区间)有交集 private bool ExistsBJSLQJ(double dBJSLXX, double dBJSLSX, string sXLXHID, string sXLGGID, string sDYDJID) { string sXLGGID_DB = sXLGGID.Trim().Equals("") ? " " : sXLGGID.Replace("'", "''"); string sDYDJID_DB = sDYDJID.Trim().Equals("") ? " " : sDYDJID.Replace("'", "''"); string sSQL_QJ = string.Format("select 1 from XLXSBJDYZZM where XLXSBJDYZZM_JGBID='{0}' and XLXSBJDYZZM_YZID='{1}' and XLXSBJDYZZM_XLXHID='{2}'" + " and XLXSBJDYZZM_XLGGID='{3}' and XLXSBJDYZZM_DYDJID='{4}'" + " and not (XLXSBJDYZZM_BJSLXX={5} and XLXSBJDYZZM_BJSLSX={6})" + " and (({7} = 0) or XLXSBJDYZZM_BJSLXX < {8})" + " and ((XLXSBJDYZZM_BJSLSX = 0) or {9} < XLXSBJDYZZM_BJSLSX)", txtJGBID.Value.Trim(), cbxYZID.SelectedValue.Trim(), sXLXHID, sXLGGID_DB, sDYDJID_DB, dBJSLXX, dBJSLSX, dBJSLSX, dBJSLSX, dBJSLXX); return CMISproDataBase.ExistsRecord("DBERP", sSQL_QJ); } private void ExcelColumnValid(DataSet ds) { Dictionary ColumnNames = new Dictionary(); ColumnNames.Add("0", "型号"); ColumnNames.Add("1", "规格"); ColumnNames.Add("2", "电压等级"); ColumnNames.Add("3", "报价数量下限"); ColumnNames.Add("4", "报价数量上限"); ColumnNames.Add("5", cbxYZID.SelectedItem.Text.Trim()); for (int i = 0; i < 6; i++) { if (!ds.Tables[0].Columns[i].ColumnName.Trim().Equals(ColumnNames[i.ToString()].Trim())) { throw new Exception("导入文件的内容格式不正确,Excel栏目依次为:型号、规格、电压等级、报价数量下限、报价数量上限、" + cbxYZID.SelectedItem.Text.Trim() + "!"); } } } private void ReadWJ(string sPath, ref DataSet aDataExcel) { string sMessage = ""; aDataExcel = TExcelData.ReadExcel(sPath.Trim(), "", "", false, ref sMessage); if (!sMessage.Trim().Equals("")) { throw new Exception("文件读取失败!具体原因:" + sMessage); } } private string sGetCellTest(DataRow Row, int ColumnIndex) { return Row[ColumnIndex].ToString().Trim().Replace("\r\n", "").Replace("\n", ""); } #endregion } }