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.Utility; using GThinking.N_MISPRO; using GThinking.N_CONTROL; using GThinking.N_MISPRO.Data; using GThinking.N_WORKFLOW; using GThinking.N_PUBLIC; using GThinking.N_MISPRO.MISPROAS; using System.Web.Script.Serialization; using System.Collections.Generic; namespace GThinking.N_XLXSBJ { public partial class XLBJD_WBPICNRInfo : BDOBillBase { XLBJD_WBPICNR entity = new XLBJD_WBPICNR(); //指定栏目类型-栏目编号 Dictionary dicLMBH = new Dictionary(); protected void Page_Load(object sender, EventArgs e) { this.UMID = 100860053; this.UMName = "按外部报价单图片导入"; this.CurMaster = Master; this.CurEntity = entity; this.PageWidth = 850; this.PageHeight = 600; AddListSetMap(new ListSet("", null, grdXLWBBJDNR, entity.XLWBBJDNR, null)); //grdXLWBBJDNR.CanInsert = false; Master.BtnNewVisible = false; Master.BtnCopyVisible = false; //Master.BtnEditVisible = false; //Master.BtnSaveVisible = false; //Master.BtnCancelVisible = false; Master.BtnDeleteVisible = false; base.InitPage(); } #region 模板继承事件 protected override void SetControlState() { base.SetControlState(); txtWBBJDID.Enabled = false; datDRSJ.Enabled = false; txtWBBJDMC.Enabled = false; txtPICNAME.Enabled = false; txtNRHHS.Enabled = false; txtNRHHZ.Enabled = false; txtWHR.Enabled = false; datWHSJ.Enabled = false; btnZDBJDLM.Enabled = ControlState == TControlState.ctsBrowse; btnWBBJDMX.Enabled = ControlState == TControlState.ctsBrowse; if (HasBJDLM(txtBJDID.Value.Trim(), txtWBBJDID.Text.Trim())) { txtLMHHS.Enabled = false; txtLMHHZ.Enabled = false; } } protected override void InitQueryString() { if (!IsPostBack) { entity.BJDID = PageParam.GetRTrimString("XLWBBJDML_BJDID"); entity.WBBJDID = PageParam.GetRTrimString("XLWBBJDML_WBBJDID"); } else { entity.BJDID = txtBJDID.Value.Trim(); entity.WBBJDID = txtWBBJDID.Text.Trim(); } base.InitQueryString(); } protected override bool Master_BeforeSaveAction(object sender, EventArgs e) { //if (ControlState == TControlState.ctsInsert || ControlState == TControlState.ctsCopy) //{ // txtJYBH.Text = CMISproDataBase.GetYWBHByNY("DBERP", "U_TSJY", "U_TSJY_JYBH", 4); //} txtWHR.Text = CurSession.UserName.Trim(); txtWHRID.Value = CurSession.UserId.Trim(); datWHSJ.Value = CMISproConvert.ConvertTime(System.DateTime.Now.ToString()); entity.BJDID = txtBJDID.Value.Trim(); entity.WBBJDID = txtWBBJDID.Text.Trim(); //int maxXH = CMISproDataBase.GetMaxXH("DBERP", "U_TSJYMX", "U_TSJYMX_XH", "U_TSJYMX_JYBH = '" + txtJYBH.Text + "'") + 1; //grdTSJYMX.BeginUpdate(); //foreach (GridViewRow row in grdTSJYMX.NewRows) //{ // if (!row.Attributes["EditAction"].Equals("D")) // { // grdTSJYMX.EditRow(row, "U_TSJYMX_XH", Convert.ToString(maxXH++)); // } //} //grdTSJYMX.EndUpdate(); return base.Master_BeforeSaveAction(sender, e); } protected override bool Master_AfterSaveAction(object sender, EventArgs e) { TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL SQL = new TSQL(dberp); //如果删过明细,则DRHH重新从1开始排序,保证连续 bool bHasDelMX = false; foreach (GridViewRow row in grdXLWBBJDNR.NewRows) { if (row.Attributes["EditAction"].Equals("D")) { bHasDelMX = true; break; } } if (bHasDelMX) { SQL.Clear(); SQL.Add(" merge into XLWBBJDNR a "); SQL.Add(" using "); SQL.Add("( "); SQL.Add("select "); SQL.Add(" XLWBBJDNR_BJDID,XLWBBJDNR_WBBJDID,XLWBBJDNR_DRHH, "); SQL.Add(" row_number() "); SQL.Add(" over(order by XLWBBJDNR_DRHH) as XH "); SQL.Add(" from XLWBBJDNR"); SQL.Add(" where XLWBBJDNR_BJDID=:pBJDID"); SQL.Add(" and XLWBBJDNR_WBBJDID=:pWBBJDID"); SQL.Add(" ) b "); SQL.Add(" on( "); SQL.Add(" a.XLWBBJDNR_BJDID=b.XLWBBJDNR_BJDID and a.XLWBBJDNR_WBBJDID=b.XLWBBJDNR_WBBJDID and a.XLWBBJDNR_DRHH=b.XLWBBJDNR_DRHH "); SQL.Add(" ) "); SQL.Add(" when matched then update set a.XLWBBJDNR_DRHH=b.XH "); SQL.ParamByName("pBJDID").Value = txtBJDID.Value.Trim(); SQL.ParamByName("pWBBJDID").Value = txtWBBJDID.Text.Trim(); dberp.ExecSQL(SQL); entity.XLWBBJDNR.BJDID = txtBJDID.Value.Trim(); entity.XLWBBJDNR.WBBJDID = txtWBBJDID.Text.Trim(); entity.XLWBBJDNR.Query(); grdXLWBBJDNR.DataSource = entity.XLWBBJDNR.Entites; grdXLWBBJDNR.DataBind(); grdXLWBBJDNR.SaveDataInfo.SaveDataFlag = DSaveDataFlag.sdNormal; } //给内容行号赋值 int MaxHH = 0; SQL.Clear(); SQL.Add("select max(XLWBBJDNR_DRHH) as MaxHH "); SQL.Add(" from XLWBBJDNR"); SQL.Add(" where XLWBBJDNR_BJDID=:pBJDID"); SQL.Add(" and XLWBBJDNR_WBBJDID=:pWBBJDID"); SQL.ParamByName("pBJDID").Value = txtBJDID.Value.Trim(); SQL.ParamByName("pWBBJDID").Value = txtWBBJDID.Text.Trim(); DataSet ds = dberp.OpenDataSet(SQL); if (ds.Tables[0].Rows.Count > 0) { MaxHH = CMISproConvert.StrToInt(ds.Tables[0].Rows[0]["MaxHH"].ToString(), 0); } if (txtLMHHZ.Value < MaxHH) { SQL.Clear(); SQL.Add("update XLWBBJDML set XLWBBJDML_NRHHS=:pNRHHS,XLWBBJDML_NRHHZ=:pNRHHZ"); SQL.Add(" where XLWBBJDML_BJDID=:pBJDID"); SQL.Add(" and XLWBBJDML_WBBJDID=:pWBBJDID"); SQL.ParamByName("pNRHHS").Value = txtLMHHZ.Value + 1; SQL.ParamByName("pNRHHZ").Value = MaxHH; SQL.ParamByName("pBJDID").Value = txtBJDID.Value.Trim(); SQL.ParamByName("pWBBJDID").Value = txtWBBJDID.Text.Trim(); dberp.ExecSQL(SQL); txtNRHHS.Value = txtLMHHZ.Value + 1; txtNRHHZ.Value = MaxHH; } return base.Master_AfterSaveAction(sender, e); } protected override bool DataLogicValid() { if (txtLMHHS.Value > txtLMHHZ.Value) { ShowMessage("栏目行号始不能大于止!"); return false; } if (txtLMHHS.Value < 0) { ShowMessage("栏目行号不能为负数!"); return false; } if (txtLMHHS.Value == 0) { ShowMessage("栏目行号--不允许为空!"); return false; } return base.DataLogicValid(); } #endregion #region 自定义函数 //XLWBBJDLM是否已经被指定过报价单栏目 private bool HasBJDLM(string sBJDID, string sWBBJDID) { if (CMISproDataBase.ExistsRecord("DBERP", string.Format("select top 1 XLWBBJDLM_LMBH from XLWBBJDLM where XLWBBJDLM_BJDID='{0}' and XLWBBJDLM_WBBJDID='{1}' and isnull(XLWBBJDLM_ZDLMLX,' ')<>' '", sBJDID, sWBBJDID))) return true; else return false; } //去除报价产品的空格 private void ClearSpace(string sWBBJDID, string sSELBJDID) { TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL SQL = new TSQL(dberp); SQL.Clear(); SQL.Add("select XLWBBJDMX_BJDID,XLWBBJDMX_WBBJDID,XLWBBJDMX_DRHH,XLWBBJDMX_BJCP "); SQL.Add(" from XLWBBJDMX "); SQL.Add(" where XLWBBJDMX_WBBJDID=:pWBBJDID and XLWBBJDMX_BJDID=:pBJDID "); SQL.ParamByName("pWBBJDID").Value = sWBBJDID; SQL.ParamByName("pBJDID").Value = sSELBJDID; DataSet ds = dberp.OpenDataSet(SQL); BJCPYJX(ref ds); SQL.Clear(); SQL.Add("update XLWBBJDMX "); SQL.Add(" set XLWBBJDMX_BJCP=:pXLWBBJDMX_BJCP "); SQL.Add(" where XLWBBJDMX_WBBJDID=:pWBBJDID and XLWBBJDMX_BJDID=:pBJDID and XLWBBJDMX_DRHH = :pDRHH "); SQL.ParamByName("pWBBJDID").Value = sWBBJDID; SQL.ParamByName("pBJDID").Value = sSELBJDID; for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { SQL.ParamByName("pDRHH").Value = ds.Tables[0].Rows[i]["XLWBBJDMX_DRHH"].ToString().Trim(); SQL.ParamByName("pXLWBBJDMX_BJCP").Value = ds.Tables[0].Rows[i]["XLWBBJDMX_BJCP"].ToString().Trim(); dberp.ExecSQL(SQL); } } //图片导入时,报价产品预解析 private void BJCPYJX(ref DataSet ds) { string sCPXX = ""; for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { sCPXX = ds.Tables[0].Rows[i]["XLWBBJDMX_BJCP"].ToString().Trim(); //先处理 × 号 sCPXX = sCPXX.Replace(" ", " ").Replace(" ", " "); sCPXX = sCPXX.Replace("@", ""); sCPXX = sCPXX.Replace("×", "@"); //【GAN-BTW TZ 4* 4张】-16位置 //byte[] byt1 = System.Text.Encoding.Default.GetBytes(sCPXX);//17 //byte[] byt2 = System.Text.ASCIIEncoding.Default.GetBytes(sCPXX);//17 //将中文处理为"?" byte[] byt = System.Text.Encoding.ASCII.GetBytes(sCPXX);//16-? //直接remove string str = System.Text.Encoding.ASCII.GetString(byt); str = str.Replace("?", "").Trim(); // if (str.Equals("")) { continue; } try { #region 第一轮去除明确的空格 //A-Z 65-90 //a-z 97-122 //0-9 48-57 //空 32//# 35//$ 36//% 37//* 42//+ 43 //- 45//@ 64//^ 94//. 46 byt = System.Text.Encoding.ASCII.GetBytes(str); int preCharAscii = byt[0]; int curCharAscii = byt[0]; int netCharAscii = byt[0]; if (byt.Length >= 2) { for (int m = 2; m < byt.Length; m++) { preCharAscii = byt[m - 2]; curCharAscii = byt[m - 1]; netCharAscii = byt[m]; if (curCharAscii.Equals(32)) { //先执行 //是- if (preCharAscii.Equals(45) || netCharAscii.Equals(45)) { byt[m - 1] = 36; } //是* if (preCharAscii.Equals(42) || netCharAscii.Equals(42)) { byt[m - 1] = 36; } //是× if (preCharAscii.Equals(64) || netCharAscii.Equals(64)) { byt[m - 1] = 36; } //是. if (preCharAscii.Equals(46) || netCharAscii.Equals(46)) { byt[m - 1] = 36; } //是+ if (preCharAscii.Equals(43) || netCharAscii.Equals(43)) { byt[m - 1] = 36; } //是字符 if (IsNumOrAlp(preCharAscii, "1") && IsNumOrAlp(netCharAscii, "1")) { byt[m - 1] = 36; } //是mm 2 if (preCharAscii.Equals(109) && byt[m - 3].Equals(109) && netCharAscii.Equals(50)) { byt[m - 1] = 36; } } } } #endregion str = System.Text.Encoding.ASCII.GetString(byt); str = str.Replace("$", "").Trim(); byt = System.Text.Encoding.ASCII.GetBytes(str); #region 第二轮去除模糊的空格 //【WDZAN-BTLY 2 2 3*240+2*120】 //【GAN-BTWTZ 22 4*4】 //【WDZ-BYJ-16mm 2】 //A-Z 65-90 //a-z 97-122 //0-9 48-57 //空 32//# 35//$ 36//% 37//* 42//+ 43 //- 45//@ 64//^ 94//. 46 byt = System.Text.Encoding.ASCII.GetBytes(str); preCharAscii = byt[0]; curCharAscii = byt[0]; netCharAscii = byt[0]; if (byt.Length >= 2) { for (int m = 2; m < byt.Length; m++) { preCharAscii = byt[m - 2]; curCharAscii = byt[m - 1]; netCharAscii = byt[m]; if (curCharAscii.Equals(32)) { //先执行 //"K VV 22 2*5" //KVV 2 2 2*5 if ((IsNumOrAlp(preCharAscii, "1") && IsNumOrAlp(netCharAscii, "2")) || (IsNumOrAlp(preCharAscii, "2") && IsNumOrAlp(netCharAscii, "2"))) { if ((m + 1) < byt.Length && (m + 2) < byt.Length && (m + 3) < byt.Length) { if (byt[m + 1].Equals(32) || byt[m + 2].Equals(32) || byt[m + 3].Equals(32)) { byt[m - 1] = 36; } } else if ((m + 1) < byt.Length && (m + 2) < byt.Length) { if (byt[m + 1].Equals(32) || byt[m + 2].Equals(32)) { byt[m - 1] = 36; } } else if ((m + 1) < byt.Length) { if (byt[m + 1].Equals(32)) { byt[m - 1] = 36; } } } } } } #endregion str = System.Text.Encoding.ASCII.GetString(byt); str = str.Replace("$", "").Replace('@', '×').Trim(); if (str.Contains("3C-2V751")) { str = str.Replace("3C-2V751", "3C-2V 751"); } else if (str.Contains("3C-2V75")) { str = str.Replace("3C-2V75", "3C-2V 75"); } } catch { str = ds.Tables[0].Rows[i]["XLWBBJDMX_BJCP"].ToString().Trim(); } ds.Tables[0].Rows[i]["XLWBBJDMX_BJCP"] = str; } } //判断value的ascii是不是字母,jug是1判断字母,2判断数字,3判断字母或者数字 private bool IsNumOrAlp(int value, string Jug) { //A-Z 65-90 //a-z 97-122 //0-9 48-57 //空 32//# 35//$ 36//% 37//* 42//+ 43 //- 45//@ 64//^ 94//. 46 bool result = false; if (Jug.Equals("1")) { if ((value >= 65 && value <= 90) || (value >= 97 && value <= 122)) { result = true; } } else if (Jug.Equals("2")) { if (value >= 48 && value <= 57) { result = true; } } else if (Jug.Equals("3")) { if ((value >= 65 && value <= 90) || (value >= 97 && value <= 122) || (value >= 48 && value <= 57)) { result = true; } } return result; } #endregion #region 控件事件 //指定报价单栏目 protected void btnZDBJDLM_Click(object sender, EventArgs e) { if (txtLMHHS.Value == 0) { ShowMessage("请先维护栏目行号!"); return; } //如果尚未被指定为报价单栏目,则重新生成XLWBBJDLM表数据 if (!HasBJDLM(txtBJDID.Value.Trim(), txtWBBJDID.Text.Trim())) { #region 生成XLWBBJDLM表数据 //重新查询XLWBBJDNR,将没有内容的列剔除,以便创建合适的栏目 TDatabase dberp = TContextDatabases.GetDatabase("DBERP"); TSQL sSQL = new TSQL(dberp); sSQL.Clear(); sSQL.Add(" select "); sSQL.Add(" XLWBBJDNR_LMNR01,XLWBBJDNR_LMNR02,XLWBBJDNR_LMNR03,XLWBBJDNR_LMNR04,XLWBBJDNR_LMNR05,XLWBBJDNR_LMNR06,XLWBBJDNR_LMNR07,XLWBBJDNR_LMNR08,XLWBBJDNR_LMNR09,XLWBBJDNR_LMNR10,"); sSQL.Add(" XLWBBJDNR_LMNR11,XLWBBJDNR_LMNR12,XLWBBJDNR_LMNR13,XLWBBJDNR_LMNR14,XLWBBJDNR_LMNR15,XLWBBJDNR_LMNR16,XLWBBJDNR_LMNR17,XLWBBJDNR_LMNR18,XLWBBJDNR_LMNR19,XLWBBJDNR_LMNR20,"); sSQL.Add(" XLWBBJDNR_LMNR21,XLWBBJDNR_LMNR22,XLWBBJDNR_LMNR23,XLWBBJDNR_LMNR24,XLWBBJDNR_LMNR25,XLWBBJDNR_LMNR26,XLWBBJDNR_LMNR27,XLWBBJDNR_LMNR28,XLWBBJDNR_LMNR29,XLWBBJDNR_LMNR30,"); sSQL.Add(" XLWBBJDNR_LMNR31,XLWBBJDNR_LMNR32,XLWBBJDNR_LMNR33,XLWBBJDNR_LMNR34,XLWBBJDNR_LMNR35,XLWBBJDNR_LMNR36,XLWBBJDNR_LMNR37,XLWBBJDNR_LMNR38,XLWBBJDNR_LMNR39,XLWBBJDNR_LMNR40,"); sSQL.Add(" XLWBBJDNR_LMNR41,XLWBBJDNR_LMNR42,XLWBBJDNR_LMNR43,XLWBBJDNR_LMNR44,XLWBBJDNR_LMNR45,XLWBBJDNR_LMNR46,XLWBBJDNR_LMNR47,XLWBBJDNR_LMNR48,XLWBBJDNR_LMNR49,XLWBBJDNR_LMNR50,"); sSQL.Add(" XLWBBJDNR_LMNR51,XLWBBJDNR_LMNR52,XLWBBJDNR_LMNR53,XLWBBJDNR_LMNR54,XLWBBJDNR_LMNR55,XLWBBJDNR_LMNR56,XLWBBJDNR_LMNR57,XLWBBJDNR_LMNR58,XLWBBJDNR_LMNR59,XLWBBJDNR_LMNR60 "); sSQL.Add(" from XLWBBJDNR"); sSQL.Add(" where XLWBBJDNR_BJDID=:XLWBBJDNR_BJDID and XLWBBJDNR_WBBJDID=:XLWBBJDNR_WBBJDID "); sSQL.Add(" order by XLWBBJDNR_DRHH "); sSQL.ParamByName("XLWBBJDNR_BJDID").Value = txtBJDID.Value.Trim(); sSQL.ParamByName("XLWBBJDNR_WBBJDID").Value = txtWBBJDID.Text.Trim(); DataSet dsNR = dberp.OpenDataSet(sSQL); for (int c = dsNR.Tables[0].Columns.Count - 1; c >= 0; c--) { bool IsEmptyCol = true;//标记是否为空列 for (int r = 0; r < dsNR.Tables[0].Rows.Count; r++) { if (!dsNR.Tables[0].Rows[r][c].ToString().Trim().Equals("")) { IsEmptyCol = false; break; } } if (IsEmptyCol)//如果是空列则从dsNR中剔除 { dsNR.Tables[0].Columns.RemoveAt(c); } else { //遇到第一个不是空列的,就跳出循环 break; } } Dictionary dicLMMC = new Dictionary(); XLBJD_WBBJDDRInfo.ExcelColumnName(Convert.ToInt32(txtLMHHS.Value), Convert.ToInt32(txtLMHHZ.Value), dsNR, dicLMMC); sSQL.Clear(); sSQL.Add("delete from XLWBBJDLM where XLWBBJDLM_BJDID=:pBJDID and XLWBBJDLM_WBBJDID=:pWBBJDID"); sSQL.ParamByName("pBJDID").Value = txtBJDID.Value.Trim(); sSQL.ParamByName("pWBBJDID").Value = txtWBBJDID.Text.Trim(); dberp.ExecSQL(sSQL); sSQL.Clear(); sSQL.Add("insert into XLWBBJDLM ( "); sSQL.Add(" XLWBBJDLM_BJDID,XLWBBJDLM_WBBJDID,XLWBBJDLM_LMBH,XLWBBJDLM_LMMC,XLWBBJDLM_ZDLMLX,XLWBBJDLM_WHR,XLWBBJDLM_WHRID,XLWBBJDLM_WHSJ) "); sSQL.Add("values ( "); sSQL.Add(" :pBJDID,:pWBBJDID,:pLMBH,:pLMMC,:pZDLMLX,:pWHR,:pWHRID,:pWHSJ) "); //循环dicLMMC foreach (KeyValuePair kvp in dicLMMC) { sSQL.ParamByName("pBJDID").Value = txtBJDID.Value.Trim(); sSQL.ParamByName("pWBBJDID").Value = txtWBBJDID.Text.Trim(); sSQL.ParamByName("pLMBH").Value = kvp.Key; string sLMMC = kvp.Value; sLMMC = XLBJDUtils.SubStringFunc(sLMMC, 60); sSQL.ParamByName("pLMMC").Value = sLMMC; sSQL.ParamByName("pZDLMLX").Value = ""; sSQL.ParamByName("pWHRID").Value = CurSession.UserId; sSQL.ParamByName("pWHR").Value = CurSession.UserName; sSQL.ParamByName("pWHSJ").Value = DateTime.Now; dberp.ExecSQL(sSQL); } #endregion } TPageParams pageParams = new TPageParams(); pageParams.UrlPath = "XLBJD_WBBJDLMList.aspx"; pageParams.AddString("WBBJDID", txtWBBJDID.Text.Trim()); pageParams.AddString("SELBJDID", txtBJDID.Value.Trim()); OpenFuncModuleDialog(100860043, pageParams); } //外部报价单明细以及重新生成 protected void btnWBBJDMX_Click(object sender, EventArgs e) { //在点击外部报价单的时候判断栏目设置并且生成明细记录 string sErrMsg = ""; bool bResult = XLBJD_WBBJDNRList.DobtnWBBJDMX_Click(txtWBBJDID.Text.Trim(), txtBJDID.Value.Trim(), dicLMBH, CurSession, GetOption(100860000, "BJU003"), XLBJDUtils.GetDefaultXLBZID(), ref sErrMsg); if (!sErrMsg.Equals("")) { ShowMessage(sErrMsg); } else { ClearSpace(txtWBBJDID.Text.Trim(), txtBJDID.Value.Trim()); } if (bResult) { DialogOperationScript dos = new DialogOperationScript(this); dos.SetCallbackArgument("OPEN"); dos.CloseSelf(); dos.Execute(); } } protected void btnWBBJDMX_MenuItemClick(object sender, string ItemIndex) { int index = Int32.Parse(ItemIndex); switch (index) { case 0: //重新生成 string sErrMsg = ""; bool bResult = XLBJD_WBBJDNRList.ReCreate(txtWBBJDID.Text.Trim(), txtBJDID.Value.Trim(), Confirm, dicLMBH, CurSession, GetOption(100860000, "BJU003"), XLBJDUtils.GetDefaultXLBZID(), ref sErrMsg); if (!sErrMsg.Equals("")) { ShowMessage(sErrMsg); } else { ClearSpace(txtWBBJDID.Text.Trim(), txtBJDID.Value.Trim()); } if (bResult) { DialogOperationScript dos = new DialogOperationScript(this); dos.SetCallbackArgument("OPEN"); dos.CloseSelf(); dos.Execute(); } break; } } #endregion } }