Files
N_XLXSBJ----MX/TZYZBJMDRInfo.aspx.cs
2026-10-09 10:30:49 +08:00

301 lines
14 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<string, string> ColumnNames = new Dictionary<string, string>();
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
}
}