This commit is contained in:
2026-08-21 17:03:02 +08:00
commit f065129b20
2292 changed files with 666241 additions and 0 deletions
+545
View File
@@ -0,0 +1,545 @@
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_MISPRO;
using GThinking.N_MISPRO.Data;
using GThinking.N_MODEL.Page;
using GThinking.N_WORKFLOW;
using GThinking.N_MODEL.Dialog;
using GThinking.N_PUBLIC;
using GThinking.N_MISPRO.Utility;
using GThinking.N_CONTROL;
using System.IO;
using System.Data.OleDb;
using System.Data.Common;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using GThinking.N_MISPROAS;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
namespace GThinking.N_XLXSBJ
{
public partial class DRJGBYZZ1_AXJGZDR : SingleCardBase
{
protected void Page_Load(object sender, EventArgs e)
{
this.UMID = 100860017;
this.UMName = "按型号规格电压等级标准调表价";
base.CurMaster = Master;
this.PageHeight = 200;
this.PageWidth = 480;
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";
base.InitPage();
if (!IsPostBack)
{
txtJGBID.Value = PageParam.GetRTrimString("JGBID");
txtYZID.Value = PageParam.GetRTrimString("sYZID");
txtYZMC.Text = GetYZMC(txtYZID.Value.Trim());
}
}
#region 控件事件
protected void btnQD_Click(object sender, EventArgs e)
{
if (fupdPost.FilePath.Equals(""))
{
ShowMessage("请选择需要导入的文件!");
return;
}
if (txtYZID.Value.Trim().Equals(""))
{
ShowMessage("调价因子为空,请从正确入口打开!");
return;
}
TDatabase dberp = TContextDatabases.GetDatabase("DBERP");
TSQL sSQL = new TSQL(dberp);
try
{
lblTitle.Text = "正在导入数据,请稍后...";
dberp.BeginTrans();
DataSet aDataExcel = new DataSet();
Mac.MacLog.TraceFormat("DR0 ReadAllSheets Start");
string sMessage = "";
aDataExcel = ReadAllSheets(fupdPost.FilePath, 0, true, ref sMessage);
if (!sMessage.Trim().Equals(""))
{
throw new Exception("文件读取失败!具体原因:" + sMessage);
}
Mac.MacLog.TraceFormat("DR0.1 ReadAllSheets Done TablesCount={0}", aDataExcel.Tables.Count);
ExcelColumnValid(aDataExcel);
int iImportCount = InsertYZZ1(dberp, sSQL, aDataExcel);
SaveExcelToServer(aDataExcel);
dberp.CommitTrans();
string sMsg = "成功导入 " + iImportCount.ToString() + " 条数据!";
Mac.MacLog.TraceFormat("DR_SUCCESS: {0}", sMsg);
lblTitle.Text = sMsg;
ShowMessage(sMsg);
//执行完毕后关闭当前页面
DialogOperationScript dos = new DialogOperationScript(this);
dos.ClickOwnerButton(PageParam.GetRTrimString("btnRefresh1CID"));
dos.CloseSelf();
dos.Execute();
}
catch (Exception ex)
{
Mac.MacLog.TraceFormat("DR_ERR: {0}", ex.Message);
lblTitle.Text = "";
dberp.RollbackTrans();
ShowMessage(ex.Message);
}
}
protected void btnQX_Click(object sender, EventArgs e)
{
CloseWindow();
}
#endregion
#region 自定义事件
private string GetYZMC(string sYZID)
{
string sYZMC = "";
if (sYZID.Equals(""))
return sYZMC;
sYZMC = XLBJDUtils.GetYZXXByYZID(sYZID).XLXSTZYZ_YZMC;
return sYZMC;
}
private void SaveExcelToServer(DataSet dsExcel)
{
if (dsExcel == null || dsExcel.Tables.Count < 2)
return;
string sUploadPath = HttpContext.Current.Server.MapPath("~/work/temp/外径盘具金额/");
if (!Directory.Exists(sUploadPath))
Directory.CreateDirectory(sUploadPath);
string sTargetPath = Path.Combine(sUploadPath, "外径盘具金额.xlsx");
if (File.Exists(sTargetPath))
File.Delete(sTargetPath);
DataSet dsSheet2 = new DataSet();
dsSheet2.Tables.Add(dsExcel.Tables[1].Copy());
string sError = "";
TExcelData.CreateExcel_NPOI(sTargetPath, dsSheet2, ref sError);
if (!sError.Equals(""))
throw new Exception("保存第二个sheet到服务器失败:" + sError);
}
private int InsertYZZ1(TDatabase dberp, TSQL sSQL, DataSet ds)
{
Mac.MacLog.TraceFormat("DR1.6 InsertYZZ1Entered");
//第二个sheet:外径->普通线盘金额、大芯线盘金额
Dictionary<string, double> dicPTXP = new Dictionary<string, double>();
Dictionary<string, double> dicDXXP = new Dictionary<string, double>();
Dictionary<string, double> dicZXJM = new Dictionary<string, double>();
DataTable dtSheet2 = ds.Tables[1];
Mac.MacLog.TraceFormat("DR1.7 Sheet2Rows={0}", dtSheet2.Rows.Count);
for (int i = 0; i < dtSheet2.Rows.Count; i++)
{
Mac.MacLog.TraceFormat("DR1.8 Sheet2Row[{0}]", i);
string sWJ = sGetCellText(dtSheet2.Rows[i], 0);
if (sWJ.Equals(""))
continue;
double dPTXP = CMISproConvert.StrToFloat(sGetCellText(dtSheet2.Rows[i], 1), 0);
double dDXXP = CMISproConvert.StrToFloat(sGetCellText(dtSheet2.Rows[i], 2), 0);
if (!dicPTXP.ContainsKey(sWJ))
dicPTXP.Add(sWJ, dPTXP);
if (!dicDXXP.ContainsKey(sWJ))
dicDXXP.Add(sWJ, dDXXP);
}
Mac.MacLog.TraceFormat("DR1.9 Sheet2Processed PTXP={0} DXXP={1}", dicPTXP.Count, dicDXXP.Count);
Mac.MacLog.TraceFormat("DR2");
//矿物电缆基本型号
string[] arrBaseModels = new string[] { "BTLY", "BTTRZ", "BTTVZ", "BTTYRZ", "BTTYZ", "BTTZ", "RTTVZ", "RTTYZ", "RTTZ", "YTTW", "YTTWG", "YTTWV", "YTTWY", "YTTWZ", "BTTVQ", "BTTYQ" };
DataTable dtSheet1 = ds.Tables[0];
string sJGBID = txtJGBID.Value.Trim();
string sYZID = txtYZID.Value.Trim();
int iInsertCount = 0;
//A|× B|*
string sXLJGU007 = GetOption(102579000, "XLJGU007");
string sDefaultXLBZID = XLBJDUtils.GetDefaultXLBZID();
Dictionary<string, string> dicDRMXBZ = new Dictionary<string, string>();
dicDRMXBZ.Clear();
sSQL.Clear();
sSQL.Add("select XLBZ_XLBZID,XLBZ_XLBZLXMC from XLBZ where 1 = 1 ");
DataSet dsXLBZ = dberp.OpenDataSet(sSQL);
if (dsXLBZ.Tables[0].Rows.Count > 0)
{
for (int k = 0; k < dsXLBZ.Tables[0].Rows.Count; k++)
{
dicDRMXBZ.Add(dsXLBZ.Tables[0].Rows[k]["XLBZ_XLBZID"].ToString().Trim(), dsXLBZ.Tables[0].Rows[k]["XLBZ_XLBZLXMC"].ToString().Trim());
}
}
Mac.MacLog.TraceFormat("DR3");
for (int i = 0; i < dtSheet1.Rows.Count; i++)
{
string sXLXHID = sGetCellText(dtSheet1.Rows[i], 0);
string sXLGGID = sGetCellText(dtSheet1.Rows[i], 1);
string sXLBZID = sGetCellText(dtSheet1.Rows[i], 2);
string sDYDJID = sGetCellText(dtSheet1.Rows[i], 3);
string sWJ = sGetCellText(dtSheet1.Rows[i], 4);
string sLB = sGetCellText(dtSheet1.Rows[i], 5);
string sDW = sGetCellText(dtSheet1.Rows[i], 6);
if (sXLXHID.Equals(""))
{
Mac.MacLog.TraceFormat("DR_SKIP 第{0}行型号为空", i + 2);
continue;
}
if (sXLGGID.Equals(""))
{
Mac.MacLog.TraceFormat("DR_SKIP 第{0}行规格为空", i + 2);
continue;
}
if (sDYDJID.Equals(""))
{
Mac.MacLog.TraceFormat("DR_SKIP 第{0}行电压等级为空", i + 2);
continue;
}
if (sWJ.Equals(""))
{
Mac.MacLog.TraceFormat("DR_SKIP 第{0}行外径为空", i + 2);
continue;
}
if (sXLJGU007.Equals("A"))
{
sXLGGID = sXLGGID.Replace("x", "X").Replace("X", "*").Replace("*", "×");
}
else if (sXLJGU007.Equals("B"))
{
sXLGGID = sXLGGID.Replace("x", "X").Replace("X", "*").Replace("×", "*");
}
sXLBZID = XLBJDUtils.GetBZXLZBZID(sXLBZID, sDefaultXLBZID, dicDRMXBZ);
if (sXLBZID.Equals(""))
sXLBZID = " ";
//规则1:所有产品,包装要求按扎为单位的,均不考虑计算装盘数据
//if (sDW.Contains("扎"))
// continue;
//bool bIsCable = sLB.Contains("电缆");
//bool bIsWire = sLB.Contains("电线");
//bool bNeedCalc = false;
//if (bIsCable)
//{
// //规则3:所有归类于电缆产品的各型号规格的产品,均默认需计算装盘数据
// bNeedCalc = true;
//}
//else if (bIsWire)
//{
// //规则2:归类于电线类产品,规格在16平方(含)及以下,按米为单位的,均不考虑计算装盘数据;25平方(含)规格以上的产品,则需要计算装盘数据
// if (sDW.Contains("米") || sDW.ToUpper().Contains("M"))
// {
// double dMaxMM = 0;
// if (dicZXJM.ContainsKey(sXLGGID))
// dMaxMM=dicZXJM[sXLGGID];
// else
// {
// Dictionary<string, string> dicXLGGB = XLBJDUtils.GetXXJGIDByXLGGID(sXLGGID, sXLXHID);
// string fZXJM = dicXLGGB["ZXJM"];
// dMaxMM = CMISproConvert.StrToFloat(fZXJM);
// dicZXJM[sXLGGID] = dMaxMM;
// }
// if (dMaxMM >= 25)
// bNeedCalc = true;
// }
//}
//if (!bNeedCalc)
// continue;
//规则4:基本型号及矿物电缆算大芯盘
bool bUseDXXP = false;
string sUpperXLXHID = sXLXHID.ToUpper();
for (int j = 0; j < arrBaseModels.Length; j++)
{
if (sUpperXLXHID.Contains(arrBaseModels[j]))
{
bUseDXXP = true;
break;
}
}
double dAmount = 0;
if (bUseDXXP)
{
if (!dicDXXP.ContainsKey(sWJ))
{
Mac.MacLog.TraceFormat("DR_SKIP 第{0}行外径[{1}]在第二个sheet中未找到对应大芯线盘金额", i + 2, sWJ);
continue;
}
dAmount = dicDXXP[sWJ];
}
else
{
if (!dicPTXP.ContainsKey(sWJ))
{
Mac.MacLog.TraceFormat("DR_SKIP 第{0}行外径[{1}]在第二个sheet中未找到对应普通线盘金额", i + 2, sWJ);
continue;
}
dAmount = dicPTXP[sWJ];
}
Mac.MacLog.TraceFormat("DR4");
if (!CMISproDataBase.ExistsRecord("DBERP", string.Format("select 1 from XLXSJGBYZZ1 where XLXSJGBYZZ1_JGBID='{0}' and XLXSJGBYZZ1_XLXHID='{1}' and XLXSJGBYZZ1_XLGGID='{2}' and XLXSJGBYZZ1_DYDJID='{3}' and XLXSJGBYZZ1_XLBZID='{4}' and XLXSJGBYZZ1_YZID='{5}'",
sJGBID, sXLXHID, sXLGGID, sDYDJID, sXLBZID, sYZID)))
{
sSQL.Clear();
sSQL.Add("insert into XLXSJGBYZZ1(XLXSJGBYZZ1_JGBID,XLXSJGBYZZ1_XLXHID,XLXSJGBYZZ1_XLGGID,XLXSJGBYZZ1_DYDJID,XLXSJGBYZZ1_XLBZID,XLXSJGBYZZ1_YZID,XLXSJGBYZZ1_YZZ,XLXSJGBYZZ1_TJDH,XLXSJGBYZZ1_WHR,XLXSJGBYZZ1_WHRID,XLXSJGBYZZ1_WHSJ)");
sSQL.Add(" values(:XLXSJGBYZZ1_JGBID,:XLXSJGBYZZ1_XLXHID,:XLXSJGBYZZ1_XLGGID,:XLXSJGBYZZ1_DYDJID,:XLXSJGBYZZ1_XLBZID,:XLXSJGBYZZ1_YZID,:XLXSJGBYZZ1_YZZ,:XLXSJGBYZZ1_TJDH,:XLXSJGBYZZ1_WHR,:XLXSJGBYZZ1_WHRID,:XLXSJGBYZZ1_WHSJ)");
sSQL.ParamByName("XLXSJGBYZZ1_JGBID").Value = sJGBID;
sSQL.ParamByName("XLXSJGBYZZ1_XLXHID").Value = sXLXHID;
sSQL.ParamByName("XLXSJGBYZZ1_XLGGID").Value = sXLGGID;
sSQL.ParamByName("XLXSJGBYZZ1_DYDJID").Value = sDYDJID;
sSQL.ParamByName("XLXSJGBYZZ1_XLBZID").Value = sXLBZID;
sSQL.ParamByName("XLXSJGBYZZ1_YZID").Value = sYZID;
sSQL.ParamByName("XLXSJGBYZZ1_YZZ").Value = dAmount;
sSQL.ParamByName("XLXSJGBYZZ1_TJDH").Value = " ";
sSQL.ParamByName("XLXSJGBYZZ1_WHR").Value = tSession.UserName;
sSQL.ParamByName("XLXSJGBYZZ1_WHRID").Value = tSession.UserId;
sSQL.ParamByName("XLXSJGBYZZ1_WHSJ").Value = DateTime.Now;
dberp.ExecSQL(sSQL);
}
else
{
sSQL.Clear();
sSQL.Add("update XLXSJGBYZZ1 set XLXSJGBYZZ1_YZZ=:XLXSJGBYZZ1_YZZ,XLXSJGBYZZ1_TJDH=:XLXSJGBYZZ1_TJDH,XLXSJGBYZZ1_WHR=:XLXSJGBYZZ1_WHR,XLXSJGBYZZ1_WHRID=:XLXSJGBYZZ1_WHRID,XLXSJGBYZZ1_WHSJ=:XLXSJGBYZZ1_WHSJ");
sSQL.Add(" where XLXSJGBYZZ1_JGBID=:XLXSJGBYZZ1_JGBID");
sSQL.Add(" and XLXSJGBYZZ1_XLXHID=:XLXSJGBYZZ1_XLXHID");
sSQL.Add(" and XLXSJGBYZZ1_XLGGID=:XLXSJGBYZZ1_XLGGID");
sSQL.Add(" and XLXSJGBYZZ1_DYDJID=:XLXSJGBYZZ1_DYDJID");
sSQL.Add(" and XLXSJGBYZZ1_XLBZID=:XLXSJGBYZZ1_XLBZID");
sSQL.Add(" and XLXSJGBYZZ1_YZID=:XLXSJGBYZZ1_YZID");
sSQL.ParamByName("XLXSJGBYZZ1_JGBID").Value = sJGBID;
sSQL.ParamByName("XLXSJGBYZZ1_XLXHID").Value = sXLXHID;
sSQL.ParamByName("XLXSJGBYZZ1_XLGGID").Value = sXLGGID;
sSQL.ParamByName("XLXSJGBYZZ1_DYDJID").Value = sDYDJID;
sSQL.ParamByName("XLXSJGBYZZ1_XLBZID").Value = sXLBZID;
sSQL.ParamByName("XLXSJGBYZZ1_YZID").Value = sYZID;
sSQL.ParamByName("XLXSJGBYZZ1_YZZ").Value = dAmount;
sSQL.ParamByName("XLXSJGBYZZ1_TJDH").Value = " ";
sSQL.ParamByName("XLXSJGBYZZ1_WHR").Value = tSession.UserName;
sSQL.ParamByName("XLXSJGBYZZ1_WHRID").Value = tSession.UserId;
sSQL.ParamByName("XLXSJGBYZZ1_WHSJ").Value = DateTime.Now;
dberp.ExecSQL(sSQL);
}
iInsertCount++;
}
if (iInsertCount == 0)
{
Mac.MacLog.TraceFormat("DR_WARN 没有符合计算规则的数据可导入");
}
return iInsertCount;
}
private double GetMaxSpecMM(string sXLGGID)
{
double dMax = 0;
MatchCollection mc = Regex.Matches(sXLGGID, @"\d+(\.\d+)?");
for (int i = 0; i < mc.Count; i++)
{
double d = CMISproConvert.StrToFloat(mc[i].Value, 0);
if (d > dMax)
dMax = d;
}
return dMax;
}
private void ExcelColumnValid(DataSet ds)
{
Mac.MacLog.TraceFormat("DR1");
Mac.MacLog.TraceFormat("DR1.1 TablesCount={0}", ds.Tables.Count);
if (ds.Tables.Count < 2)
throw new Exception("导入文件必须包含两个sheet!");
Mac.MacLog.TraceFormat("DR1.2 Sheet1Columns={0} Sheet2Columns={1}", ds.Tables[0].Columns.Count, ds.Tables[1].Columns.Count);
string[] arrSheet1Cols = new string[] { "型号", "规格", "标准", "电压等级", "外径", "类别", "单位" };
for (int i = 0; i < arrSheet1Cols.Length; i++)
{
Mac.MacLog.TraceFormat("DR1.3 Sheet1Col[{0}]={1}", i, ds.Tables[0].Columns[i].ColumnName);
if (i == 4) // 第5列兼容"外径"或"线径"
{
string colName = ds.Tables[0].Columns[i].ColumnName.Trim();
if (!colName.Equals("外径") && !colName.Equals("线径"))
throw new Exception("导入文件第一个sheet栏目格式不正确,第5列应为:外径或线径!");
}
else
{
if (!ds.Tables[0].Columns[i].ColumnName.Trim().Equals(arrSheet1Cols[i]))
throw new Exception("导入文件第一个sheet栏目格式不正确,依次为:型号、规格、标准、电压等级、外径/线径、类别、单位!");
}
}
string[] arrSheet2Cols = new string[] { "外径", "普通线盘金额", "大芯线盘金额" };
for (int i = 0; i < arrSheet2Cols.Length; i++)
{
Mac.MacLog.TraceFormat("DR1.4 Sheet2Col[{0}]={1}", i, ds.Tables[1].Columns[i].ColumnName);
if (i == 0) // 第1列兼容"外径"或"线径"
{
string colName = ds.Tables[1].Columns[i].ColumnName.Trim();
if (!colName.Equals("外径") && !colName.Equals("线径"))
throw new Exception("导入文件第二个sheet栏目格式不正确,第1列应为:外径或线径!");
}
else
{
if (!ds.Tables[1].Columns[i].ColumnName.Trim().Equals(arrSheet2Cols[i]))
throw new Exception("导入文件第二个sheet栏目格式不正确,依次为:外径/线径、普通线盘金额、大芯线盘金额!");
}
}
Mac.MacLog.TraceFormat("DR1.5 ExcelColumnValidDone");
}
private void ReadWJ(string sPath, ref DataSet aDataExcel)
{
string sMessage = "";
aDataExcel = ReadAllSheets(sPath.Trim(), 0, true, ref sMessage);
if (!sMessage.Trim().Equals(""))
{
throw new Exception("文件读取失败!具体原因:" + sMessage);
}
}
private DataSet ReadAllSheets(string filePath, int fromRowIndex, bool hasHeaderRow, ref string errorMessage)
{
try
{
DataSet ds = new DataSet();
string ext = System.IO.Path.GetExtension(filePath).ToLowerInvariant();
IWorkbook wk = null;
using (FileStream fs = File.OpenRead(filePath))
{
if (ext == ".xlsx")
wk = new XSSFWorkbook(fs);
else
wk = new HSSFWorkbook(fs);
}
for (int k = 0; k < wk.NumberOfSheets; k++)
{
ISheet sheet = wk.GetSheetAt(k);
if (sheet == null)
continue;
string SheetName = sheet.SheetName;
if (ds.Tables.Contains(SheetName))
continue;
else
ds.Tables.Add(SheetName);
int minCellNum = -1;//最小有效列数
int maxCellNum = -1;//最大有效列数
for (int i = sheet.FirstRowNum; i <= sheet.LastRowNum; i++)
{
IRow iRow = sheet.GetRow(i);
if (iRow != null && iRow.Cells.Count > 0)
{
if (minCellNum == -1)
minCellNum = iRow.FirstCellNum;
else
{
if (iRow.FirstCellNum < minCellNum)
minCellNum = iRow.FirstCellNum;
}
if (maxCellNum == -1)
maxCellNum = iRow.LastCellNum;
else
{
if (iRow.LastCellNum > maxCellNum)
maxCellNum = iRow.LastCellNum;
}
}
}
IRow headerRow = sheet.GetRow(fromRowIndex);
//添加列
for (int i = minCellNum; i < maxCellNum; i++)
{
if (i < headerRow.FirstCellNum || i >= headerRow.LastCellNum)
{
DataColumn column = new DataColumn("F" + Convert.ToString(i + 1));
ds.Tables[SheetName].Columns.Add(column);
}
else
{
if (hasHeaderRow)//第一行为标题行
{
DataColumn column = new DataColumn(headerRow.GetCell(i) == null ? " " : headerRow.GetCell(i).StringCellValue);
ds.Tables[SheetName].Columns.Add(column);
}
else
{
DataColumn column = new DataColumn("F" + Convert.ToString(i + 1));
ds.Tables[SheetName].Columns.Add(column);
}
}
}
//添加行
int iFirstLine = fromRowIndex;
if (hasHeaderRow)
iFirstLine = fromRowIndex + 1;
for (int i = iFirstLine; i <= sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);
DataRow dataRow = ds.Tables[SheetName].NewRow();
if (row != null && row.Cells.Count > 0)
{
for (int j = row.FirstCellNum; j < row.LastCellNum; j++)
{
if (row.GetCell(j) != null)
dataRow[j] = TExcelData.GetCellValue(row.GetCell(j));
}
}
ds.Tables[SheetName].Rows.Add(dataRow);
}
}
return ds;
}
catch (Exception ex)
{
errorMessage = ex.Message;
return null;
}
}
private string sGetCellText(DataRow Row, int ColumnIndex)
{
return Row[ColumnIndex].ToString().Trim().Replace("\r\n", "").Replace("\n", "");
}
#endregion
}
}