管线导入修改
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<UseIISExpress>true</UseIISExpress>
|
<UseIISExpress>true</UseIISExpress>
|
||||||
<LastActiveSolutionConfig>Release|Any CPU</LastActiveSolutionConfig>
|
<LastActiveSolutionConfig>Debug|Any CPU</LastActiveSolutionConfig>
|
||||||
<Use64BitIISExpress />
|
<Use64BitIISExpress />
|
||||||
<IISExpressSSLPort />
|
<IISExpressSSLPort />
|
||||||
<IISExpressAnonymousAuthentication />
|
<IISExpressAnonymousAuthentication />
|
||||||
|
|||||||
@@ -116,147 +116,84 @@ namespace FineUIPro.Web.HJGL.DataIn
|
|||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
protected void InitGrid()
|
protected void InitGrid()
|
||||||
{
|
{
|
||||||
|
|
||||||
// 加载PDF文档
|
|
||||||
PdfDocument pdf = new PdfDocument();
|
|
||||||
if (!File.Exists(fileUrl))
|
if (!File.Exists(fileUrl))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pdf.LoadFromFile(fileUrl);
|
|
||||||
PdfTableExtractor extractor = new PdfTableExtractor(pdf);
|
int startPageIndex = ckbSkipFirst == "1" ? 1 : 0;
|
||||||
// 遍历每一页
|
DataTable dtTemp = ExtractAllPdfTables(fileUrl, startPageIndex);
|
||||||
int i = 0;
|
if (dtTemp.Rows.Count == 0 || dtTemp.Columns.Count <= 1)
|
||||||
if (ckbSkipFirst == "1")
|
|
||||||
{
|
{
|
||||||
i = 1;
|
BindIsoGrid();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
var units = from x in Funs.DB.Base_Unit
|
|
||||||
join y in Funs.DB.Project_Unit on x.UnitId equals y.UnitId
|
ProcessMergedTable(dtTemp);
|
||||||
where y.ProjectId == CurrUser.LoginProjectId
|
BindIsoGrid();
|
||||||
select x;
|
}
|
||||||
var installs = from x in Funs.DB.Project_Installation where x.ProjectId == this.CurrUser.LoginProjectId select x;
|
|
||||||
|
/// <summary>
|
||||||
|
/// 统一清洗、映射并转换全部PDF页面的数据。
|
||||||
|
/// </summary>
|
||||||
|
private void ProcessMergedTable(DataTable dtTemp)
|
||||||
|
{
|
||||||
var steels = from x in Funs.DB.HJGL_BS_Steel select x;
|
var steels = from x in Funs.DB.HJGL_BS_Steel select x;
|
||||||
var materialStandards = from x in Funs.DB.HJGL_BS_MaterialStandard select x;
|
var materialStandards = from x in Funs.DB.HJGL_BS_MaterialStandard select x;
|
||||||
|
|
||||||
var rates = from x in Funs.DB.HJGL_BS_NDTRate select x;
|
|
||||||
var types = from x in Funs.DB.HJGL_BS_JointType select x;
|
|
||||||
var methods = from x in Funs.DB.HJGL_BS_WeldMethod select x;
|
|
||||||
var materials = from x in Funs.DB.HJGL_BS_WeldMaterial select x;
|
|
||||||
var services = from x in Funs.DB.HJGL_BS_Service select x;
|
var services = from x in Funs.DB.HJGL_BS_Service select x;
|
||||||
var slopeTypes = from x in Funs.DB.HJGL_BS_SlopeType select x;
|
|
||||||
var isoClasss = from x in Funs.DB.HJGL_BS_IsoClass select x;
|
var isoClasss = from x in Funs.DB.HJGL_BS_IsoClass select x;
|
||||||
var components = from x in Funs.DB.HJGL_BS_Component select x;
|
|
||||||
var dns = from x in Funs.DB.HJGL_BS_SchTab select x;
|
|
||||||
var execStandards = from x in Funs.DB.HJGL_BS_ExecStandard select x;
|
var execStandards = from x in Funs.DB.HJGL_BS_ExecStandard select x;
|
||||||
var dataInTemp = from x in Funs.DB.HJGL_Sys_DataInTemp
|
|
||||||
where x.ProjectId == this.CurrUser.LoginProjectId && x.UserId == this.CurrUser.UserId && x.Type == this.IsPDMS
|
|
||||||
select x;
|
|
||||||
var users = from x in Funs.DB.Sys_User select x;
|
|
||||||
string serviceNames = string.Empty;
|
string serviceNames = string.Empty;
|
||||||
for (; i < pdf.Pages.Count; i++)
|
|
||||||
|
// 所有页面的表格已经合并,只调用一次大模型清洗和表头映射。
|
||||||
|
string csvContent = ConvertDataTableToCsv(dtTemp);
|
||||||
|
Console.WriteLine("生成的CSV内容:");
|
||||||
|
Console.WriteLine(csvContent);
|
||||||
|
|
||||||
|
// 3. 上传到服务器
|
||||||
|
string uploadUrl = "http://localhost:8000/api/table/clean"; // 替换为实际上传地址
|
||||||
|
string fileName = $"data_{DateTime.Now:yyyyMMddHHmmss}.csv";
|
||||||
|
//"管线号", "公称直径", "管道等级", "管道材料", "主要介质", "起止点", "操作参数温度", "操作参数压力", "设计参数温度", "设计参数压力", "隔热工程代号", "隔热材料", "厚度", "介质", "压力", "比例", "方法", "合格等级", "PID尾号", "压力管道类别", "应力分析题号", "备注"
|
||||||
|
Region2.Items.Add(CreateTableGrid(dtTemp));
|
||||||
|
set.Tables.Add(dtTemp);
|
||||||
|
string response = UploadCsvFile(csvContent, uploadUrl, fileName);
|
||||||
|
JObject dynamicObj = JObject.Parse(response);
|
||||||
|
|
||||||
|
DataTable dtAfterProcess = new DataTable();
|
||||||
|
foreach (JToken employeeToken in dynamicObj["headers"])
|
||||||
{
|
{
|
||||||
PdfPageBase page = pdf.Pages[i];
|
dtAfterProcess.Columns.Add(employeeToken.ToString());
|
||||||
// 提取页面中的表格
|
}
|
||||||
PdfTable[] tables = extractor.ExtractTable(i);
|
dtAfterProcess.Columns.Add("Id");
|
||||||
// 输出找到的表格数量
|
|
||||||
Console.WriteLine($"第 {i + 1} 页找到 {tables.Length} 个表格");
|
foreach (JToken rowData in dynamicObj["rows"])
|
||||||
// 遍历提取到的表格
|
{
|
||||||
for (int j = 0; j < tables.Length; j++)
|
// int index = 0;
|
||||||
|
var row = dtAfterProcess.NewRow();
|
||||||
|
var datas = rowData.ToList();
|
||||||
|
row["Id"] = Guid.NewGuid().ToString();
|
||||||
|
|
||||||
|
foreach (DataRow row1 in dtTemp.Rows)
|
||||||
{
|
{
|
||||||
PdfTable table = tables[j];
|
if (datas[0].ToString() == row1[0].ToString())
|
||||||
DataTable dtTemp = new DataTable();
|
|
||||||
for (int col = 0; col < table.GetColumnCount(); col++)
|
|
||||||
{
|
{
|
||||||
dtTemp.Columns.Add("col" + col);
|
for (int index = 0; index < dtTemp.Columns.Count; index++)
|
||||||
}
|
|
||||||
// 遍历表格的行列
|
|
||||||
for (int row = 0; row < table.GetRowCount(); row++)
|
|
||||||
{
|
|
||||||
DataRow rowData = dtTemp.NewRow();
|
|
||||||
dtTemp.Rows.Add(rowData);
|
|
||||||
for (int col = 0; col < table.GetColumnCount(); col++)
|
|
||||||
{
|
{
|
||||||
string text = table.GetText(row, col);
|
row[index] = row1[index];
|
||||||
rowData[col] = table.GetText(row, col);
|
|
||||||
Console.Write($"{text}\t");
|
|
||||||
}
|
}
|
||||||
Console.WriteLine(); // 换行
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
//foreach (var d in datas)
|
||||||
|
//{
|
||||||
|
// row[index] = d.ToString(); index++;
|
||||||
|
//}
|
||||||
|
dtAfterProcess.Rows.Add(row);
|
||||||
|
}
|
||||||
|
Region1.Items.Add(CreateTableGrid(dtAfterProcess));
|
||||||
|
setAfterProcess.Tables.Add(dtAfterProcess);
|
||||||
|
|
||||||
if (dtTemp.Rows.Count > 0 && dtTemp.Columns.Count > 1)
|
string urlHeaderCorrespondence = "http://localhost:8000/api/table/head";
|
||||||
{// 2. 转换为CSV
|
string data = @"{
|
||||||
string csvContent = ConvertDataTableToCsv(dtTemp);
|
|
||||||
Console.WriteLine("生成的CSV内容:");
|
|
||||||
Console.WriteLine(csvContent);
|
|
||||||
|
|
||||||
// 3. 上传到服务器
|
|
||||||
string uploadUrl = "http://localhost:8000/api/table/clean"; // 替换为实际上传地址
|
|
||||||
string fileName = $"data_{DateTime.Now:yyyyMMddHHmmss}.csv";
|
|
||||||
//"管线号", "公称直径", "管道等级", "管道材料", "主要介质", "起止点", "操作参数温度", "操作参数压力", "设计参数温度", "设计参数压力", "隔热工程代号", "隔热材料", "厚度", "介质", "压力", "比例", "方法", "合格等级", "PID尾号", "压力管道类别", "应力分析题号", "备注"
|
|
||||||
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Grid grid = new Grid();
|
|
||||||
grid.ShowGridHeader = true;
|
|
||||||
grid.Title = dtTemp.TableName;
|
|
||||||
grid.AllowColumnLocking = true;
|
|
||||||
grid.DataKeyNames = new string[] { "Id" };
|
|
||||||
foreach (DataColumn dc in dtTemp.Columns)
|
|
||||||
{
|
|
||||||
grid.Columns.Add(new BoundField() { DataField = dc.ColumnName, HeaderText = dc.ColumnName });
|
|
||||||
}
|
|
||||||
grid.DataSource = dtTemp;
|
|
||||||
grid.DataBind();
|
|
||||||
Region2.Items.Add(grid);
|
|
||||||
set.Tables.Add(dtTemp);
|
|
||||||
string response = UploadCsvFile(csvContent, uploadUrl, fileName);
|
|
||||||
Grid grid1 = new Grid();
|
|
||||||
grid1.ShowGridHeader = true;
|
|
||||||
grid1.Title = dtTemp.TableName;
|
|
||||||
grid1.AllowColumnLocking = true;
|
|
||||||
grid1.DataKeyNames = new string[] { "Id" };
|
|
||||||
JObject dynamicObj = JObject.Parse(response);
|
|
||||||
|
|
||||||
DataTable dtAfterProcess = new DataTable();
|
|
||||||
foreach (JToken employeeToken in dynamicObj["headers"])
|
|
||||||
{
|
|
||||||
dtAfterProcess.Columns.Add(employeeToken.ToString());
|
|
||||||
grid1.Columns.Add(new BoundField() { DataField = employeeToken.ToString(), HeaderText = employeeToken.ToString() });
|
|
||||||
}
|
|
||||||
dtAfterProcess.Columns.Add("Id");
|
|
||||||
|
|
||||||
foreach (JToken rowData in dynamicObj["rows"])
|
|
||||||
{
|
|
||||||
// int index = 0;
|
|
||||||
var row = dtAfterProcess.NewRow();
|
|
||||||
var datas = rowData.ToList();
|
|
||||||
row["Id"] = Guid.NewGuid().ToString();
|
|
||||||
|
|
||||||
foreach (DataRow row1 in dtTemp.Rows)
|
|
||||||
{
|
|
||||||
if (datas[0].ToString() == row1[0].ToString())
|
|
||||||
{
|
|
||||||
for (int index = 0; index < dtTemp.Columns.Count; index++)
|
|
||||||
{
|
|
||||||
row[index] = row1[index];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//foreach (var d in datas)
|
|
||||||
//{
|
|
||||||
// row[index] = d.ToString(); index++;
|
|
||||||
//}
|
|
||||||
dtAfterProcess.Rows.Add(row);
|
|
||||||
}
|
|
||||||
grid1.DataSource = dtAfterProcess;
|
|
||||||
grid1.DataBind();
|
|
||||||
Region1.Items.Add(grid1);
|
|
||||||
setAfterProcess.Tables.Add(dtAfterProcess);
|
|
||||||
|
|
||||||
string urlHeaderCorrespondence = "http://localhost:8000/api/table/head";
|
|
||||||
string data = @"{
|
|
||||||
""source_headers"": " + dynamicObj["headers"].ToString() + @" ,
|
""source_headers"": " + dynamicObj["headers"].ToString() + @" ,
|
||||||
""target_fields"": [
|
""target_fields"": [
|
||||||
""管线号"",
|
""管线号"",
|
||||||
@@ -284,198 +221,288 @@ namespace FineUIPro.Web.HJGL.DataIn
|
|||||||
""extra_instructions"": ""管线号优先匹配管线代号,优先将含有 Main Fluid 的字段映射到 介质,优先匹配隔热工程代号到绝热类别,压力管道类别映射管道类别,有名称首先匹配名称,没有名称匹配代号,按匹配度从高低输出""
|
""extra_instructions"": ""管线号优先匹配管线代号,优先将含有 Main Fluid 的字段映射到 介质,优先匹配隔热工程代号到绝热类别,压力管道类别映射管道类别,有名称首先匹配名称,没有名称匹配代号,按匹配度从高低输出""
|
||||||
}
|
}
|
||||||
";
|
";
|
||||||
string resHeaderCorrespondence = HeaderCorrespondence(urlHeaderCorrespondence, data, "POST", "application/json;charset=utf-8");
|
string resHeaderCorrespondence = HeaderCorrespondence(urlHeaderCorrespondence, data, "POST", "application/json;charset=utf-8");
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(resHeaderCorrespondence))
|
if (!string.IsNullOrEmpty(resHeaderCorrespondence))
|
||||||
|
{
|
||||||
|
JObject dynamicHeaderCorrespondence = JObject.Parse(resHeaderCorrespondence);
|
||||||
|
Dictionary<string, string> headerCorrespondenceDic = new Dictionary<string, string>();
|
||||||
|
foreach (JToken employeeToken in dynamicHeaderCorrespondence["mapping"])
|
||||||
|
{
|
||||||
|
headerCorrespondenceDic.Add(employeeToken["source_header"].ToString(), employeeToken["target_field"].ToString());
|
||||||
|
}
|
||||||
|
foreach (DataRow row in dtAfterProcess.Rows)
|
||||||
|
{
|
||||||
|
HJGL_PW_IsoInfo isoInfo = new HJGL_PW_IsoInfo();
|
||||||
|
isoInfo.ISO_ID = Guid.NewGuid().ToString();
|
||||||
|
isoInfo.ISO_CreateDate = DateTime.Now;
|
||||||
|
isoInfo.ISO_Creator = CurrUser.UserCode;
|
||||||
|
isoInfo.ProjectId = CurrUser.LoginProjectId;
|
||||||
|
isoInfo.BSU_ID = CurrUser.UnitId;
|
||||||
|
isoInfo.IsHot = "0";
|
||||||
|
foreach (DataColumn dataColumn in dtAfterProcess.Columns)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (headerCorrespondenceDic.ContainsKey(dataColumn.ColumnName))
|
||||||
|
switch (headerCorrespondenceDic[dataColumn.ColumnName])
|
||||||
{
|
{
|
||||||
JObject dynamicHeaderCorrespondence = JObject.Parse(resHeaderCorrespondence);
|
case "管线号":
|
||||||
Dictionary<string, string> headerCorrespondenceDic = new Dictionary<string, string>();
|
isoInfo.ISO_IsoNo = row[dataColumn.ColumnName].ToString();
|
||||||
foreach (JToken employeeToken in dynamicHeaderCorrespondence["mapping"])
|
break;
|
||||||
{
|
case "管道等级":
|
||||||
headerCorrespondenceDic.Add(employeeToken["source_header"].ToString(), employeeToken["target_field"].ToString());
|
isoInfo.ISC_ID = isoClasss.Where(x => x.ISC_IsoName == row[dataColumn.ColumnName].ToString() || x.ISC_IsoCode == row[dataColumn.ColumnName].ToString()).Select(x => x.ISC_ID).FirstOrDefault();
|
||||||
}
|
break;
|
||||||
foreach (DataRow row in dtAfterProcess.Rows)
|
case "执行标准":
|
||||||
{
|
if (!string.IsNullOrEmpty(row[dataColumn.ColumnName].ToString()))
|
||||||
HJGL_PW_IsoInfo isoInfo = new HJGL_PW_IsoInfo();
|
|
||||||
isoInfo.ISO_ID = Guid.NewGuid().ToString();
|
|
||||||
isoInfo.ISO_CreateDate = DateTime.Now;
|
|
||||||
isoInfo.ISO_Creator = CurrUser.UserCode;
|
|
||||||
isoInfo.ProjectId = CurrUser.LoginProjectId;
|
|
||||||
isoInfo.BSU_ID = CurrUser.UnitId;
|
|
||||||
isoInfo.IsHot = "0";
|
|
||||||
foreach (DataColumn dataColumn in dtAfterProcess.Columns)
|
|
||||||
{
|
{
|
||||||
|
isoInfo.ISO_Executive = execStandards.Where(x => x.ExecStandardName == "SH/T3501-2021").Select(x => x.ExecStandardId).FirstOrDefault();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isoInfo.ISO_Executive = execStandards.Where(x => x.ExecStandardName == "GB 50517-2010").Select(x => x.ExecStandardId).FirstOrDefault();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "材质":
|
||||||
|
|
||||||
if (headerCorrespondenceDic.ContainsKey(dataColumn.ColumnName))
|
var steel = steels.FirstOrDefault(x => x.STE_Code == row[dataColumn.ColumnName].ToString());
|
||||||
switch (headerCorrespondenceDic[dataColumn.ColumnName])
|
if (steel != null)
|
||||||
{
|
{
|
||||||
case "管线号":
|
isoInfo.STE_ID = steel.STE_ID;
|
||||||
isoInfo.ISO_IsoNo = row[dataColumn.ColumnName].ToString();
|
if (steel.STE_SteelType == "FeⅣ")
|
||||||
break;
|
|
||||||
case "管道等级":
|
|
||||||
isoInfo.ISC_ID = isoClasss.Where(x => x.ISC_IsoName == row[dataColumn.ColumnName].ToString() || x.ISC_IsoCode == row[dataColumn.ColumnName].ToString()).Select(x => x.ISC_ID).FirstOrDefault();
|
|
||||||
break;
|
|
||||||
case "执行标准":
|
|
||||||
if (!string.IsNullOrEmpty(row[dataColumn.ColumnName].ToString()))
|
|
||||||
{
|
|
||||||
isoInfo.ISO_Executive = execStandards.Where(x => x.ExecStandardName == "SH/T3501-2021").Select(x => x.ExecStandardId).FirstOrDefault();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
isoInfo.ISO_Executive = execStandards.Where(x => x.ExecStandardName == "GB 50517-2010").Select(x => x.ExecStandardId).FirstOrDefault();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "材质":
|
|
||||||
|
|
||||||
var steel = steels.FirstOrDefault(x => x.STE_Code == row[dataColumn.ColumnName].ToString());
|
|
||||||
if (steel != null)
|
|
||||||
{
|
|
||||||
isoInfo.STE_ID = steel.STE_ID;
|
|
||||||
if (steel.STE_SteelType == "FeⅣ")
|
|
||||||
{
|
|
||||||
isoInfo.IsHotType = "1";
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (steel.STE_SteelType == "FeⅠ" || steel.STE_SteelType == "FeⅡ" || steel.STE_SteelType == "FeⅢ")
|
|
||||||
{
|
|
||||||
isoInfo.IsHotType = "2";
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "材质标准":
|
|
||||||
isoInfo.MaterialStandardId = materialStandards.Where(x => x.MaterialStandardName == row[dataColumn.ColumnName].ToString() || x.MaterialStandardCode == row[dataColumn.ColumnName].ToString()).Select(x => x.MaterialStandardId).FirstOrDefault();
|
|
||||||
break;
|
|
||||||
case "介质":
|
|
||||||
var SER_ID = services.Where(x => x.SER_Name == row[dataColumn.ColumnName].ToString() || x.SER_Code == row[dataColumn.ColumnName].ToString()).Select(x => x.SER_ID).FirstOrDefault();
|
|
||||||
if (!string.IsNullOrEmpty(SER_ID))
|
|
||||||
{
|
|
||||||
isoInfo.SER_ID = SER_ID;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrEmpty(row[dataColumn.ColumnName].ToString()) && !serviceNames.Contains(row[dataColumn.ColumnName].ToString()))
|
|
||||||
{
|
|
||||||
Model.HJGL_BS_Service newBSService = new HJGL_BS_Service();
|
|
||||||
newBSService.SER_ID = SQLHelper.GetNewID();
|
|
||||||
newBSService.SER_Code = row[dataColumn.ColumnName].ToString();
|
|
||||||
newBSService.SER_Name = row[dataColumn.ColumnName].ToString();
|
|
||||||
Funs.DB.HJGL_BS_Service.InsertOnSubmit(newBSService);
|
|
||||||
Funs.DB.SubmitChanges();
|
|
||||||
serviceNames += row[dataColumn.ColumnName].ToString();
|
|
||||||
isoInfo.SER_ID = newBSService.SER_ID;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "管道类别":
|
|
||||||
isoInfo.PipeLineClass = row[dataColumn.ColumnName].ToString();
|
|
||||||
if (!string.IsNullOrEmpty(row[dataColumn.ColumnName].ToString()))
|
|
||||||
{
|
|
||||||
isoInfo.ISO_Executive = execStandards.Where(x => x.ExecStandardName == "SH/T3501-2021").Select(x => x.ExecStandardId).FirstOrDefault();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
isoInfo.ISO_Executive = execStandards.Where(x => x.ExecStandardName == "GB 50517-2010").Select(x => x.ExecStandardId).FirstOrDefault();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "涂漆类别":
|
|
||||||
isoInfo.ISO_Paint = row[dataColumn.ColumnName].ToString();
|
|
||||||
break;
|
|
||||||
case "绝热类别":
|
|
||||||
if (!string.IsNullOrEmpty(row[dataColumn.ColumnName].ToString()))
|
|
||||||
{
|
|
||||||
isoInfo.ISO_Insulator = row[dataColumn.ColumnName].ToString();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
isoInfo.ISO_Insulator = "/";
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "操作压力":
|
|
||||||
isoInfo.OperatingPressure = row[dataColumn.ColumnName].ToString();
|
|
||||||
break;
|
|
||||||
case "操作温度":
|
|
||||||
isoInfo.OperatingTemperature = row[dataColumn.ColumnName].ToString();
|
|
||||||
break;
|
|
||||||
case "泄露性试验":
|
|
||||||
if (isoInfo.ISO_DesignPress.HasValue)
|
|
||||||
{
|
|
||||||
isoInfo.LeakageTest = isoInfo.ISO_DesignPress.Value.ToString("##.##");// row[dataColumn.ColumnName].ToString();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "设计压力":
|
|
||||||
isoInfo.ISO_DesignPress = Funs.GetNewDecimal(row[dataColumn.ColumnName].ToString());
|
|
||||||
isoInfo.LeakageTest = row[dataColumn.ColumnName].ToString();
|
|
||||||
break;
|
|
||||||
case "设计温度":
|
|
||||||
isoInfo.ISO_DesignTemperature = Funs.GetNewDecimal(row[dataColumn.ColumnName].ToString());
|
|
||||||
break;
|
|
||||||
case "耐压试验":
|
|
||||||
if (isoInfo.ISO_DesignPress.HasValue)
|
|
||||||
{
|
|
||||||
isoInfo.ISO_TestPress = isoInfo.ISO_DesignPress.Value * 1.5m;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "外径":
|
|
||||||
isoInfo.ISO_Dia = Funs.GetNewDecimal(row[dataColumn.ColumnName].ToString());
|
|
||||||
break;
|
|
||||||
case "壁厚":
|
|
||||||
isoInfo.ISO_Sch = Funs.GetNewDecimal(row[dataColumn.ColumnName].ToString());
|
|
||||||
break;
|
|
||||||
case "管线长度":
|
|
||||||
isoInfo.PipeLineLength = Funs.GetNewDecimal(row[dataColumn.ColumnName].ToString());
|
|
||||||
break;
|
|
||||||
case "检测类别序号":
|
|
||||||
isoInfo.TestCategoryNum = "/";
|
|
||||||
break;
|
|
||||||
case "热处理类型":
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrEmpty(row[dataColumn.ColumnName].ToString()))
|
|
||||||
{
|
|
||||||
//isoInfo.IsHotType = row[dataColumn.ColumnName].ToString();
|
|
||||||
isoInfo.IsHot = "1";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "备注":
|
|
||||||
isoInfo.ISO_Remark = row[dataColumn.ColumnName].ToString();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (row[dataColumn.ColumnName].ToString().Contains("漆"))
|
|
||||||
{
|
{
|
||||||
isoInfo.ISO_Paint = row[dataColumn.ColumnName].ToString();
|
isoInfo.IsHotType = "1";
|
||||||
|
|
||||||
}
|
}
|
||||||
if (row[dataColumn.ColumnName].ToString().Contains("SH"))
|
else if (steel.STE_SteelType == "FeⅠ" || steel.STE_SteelType == "FeⅡ" || steel.STE_SteelType == "FeⅢ")
|
||||||
{
|
{
|
||||||
isoInfo.ISC_ID = isoClasss.Where(x => x.ISC_IsoName == row[dataColumn.ColumnName].ToString() || x.ISC_IsoCode == row[dataColumn.ColumnName].ToString()).Select(x => x.ISC_ID).FirstOrDefault();
|
isoInfo.IsHotType = "2";
|
||||||
|
|
||||||
}
|
}
|
||||||
if (row[dataColumn.ColumnName].ToString().Contains("焊后热处理"))
|
}
|
||||||
|
break;
|
||||||
|
case "材质标准":
|
||||||
|
isoInfo.MaterialStandardId = materialStandards.Where(x => x.MaterialStandardName == row[dataColumn.ColumnName].ToString() || x.MaterialStandardCode == row[dataColumn.ColumnName].ToString()).Select(x => x.MaterialStandardId).FirstOrDefault();
|
||||||
|
break;
|
||||||
|
case "介质":
|
||||||
|
var SER_ID = services.Where(x => x.SER_Name == row[dataColumn.ColumnName].ToString() || x.SER_Code == row[dataColumn.ColumnName].ToString()).Select(x => x.SER_ID).FirstOrDefault();
|
||||||
|
if (!string.IsNullOrEmpty(SER_ID))
|
||||||
|
{
|
||||||
|
isoInfo.SER_ID = SER_ID;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(row[dataColumn.ColumnName].ToString()) && !serviceNames.Contains(row[dataColumn.ColumnName].ToString()))
|
||||||
|
{
|
||||||
|
Model.HJGL_BS_Service newBSService = new HJGL_BS_Service();
|
||||||
|
newBSService.SER_ID = SQLHelper.GetNewID();
|
||||||
|
newBSService.SER_Code = row[dataColumn.ColumnName].ToString();
|
||||||
|
newBSService.SER_Name = row[dataColumn.ColumnName].ToString();
|
||||||
|
Funs.DB.HJGL_BS_Service.InsertOnSubmit(newBSService);
|
||||||
|
Funs.DB.SubmitChanges();
|
||||||
|
serviceNames += row[dataColumn.ColumnName].ToString();
|
||||||
|
isoInfo.SER_ID = newBSService.SER_ID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "管道类别":
|
||||||
|
isoInfo.PipeLineClass = row[dataColumn.ColumnName].ToString();
|
||||||
|
if (!string.IsNullOrEmpty(row[dataColumn.ColumnName].ToString()))
|
||||||
|
{
|
||||||
|
isoInfo.ISO_Executive = execStandards.Where(x => x.ExecStandardName == "SH/T3501-2021").Select(x => x.ExecStandardId).FirstOrDefault();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isoInfo.ISO_Executive = execStandards.Where(x => x.ExecStandardName == "GB 50517-2010").Select(x => x.ExecStandardId).FirstOrDefault();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "涂漆类别":
|
||||||
|
isoInfo.ISO_Paint = row[dataColumn.ColumnName].ToString();
|
||||||
|
break;
|
||||||
|
case "绝热类别":
|
||||||
|
if (!string.IsNullOrEmpty(row[dataColumn.ColumnName].ToString()))
|
||||||
|
{
|
||||||
|
isoInfo.ISO_Insulator = row[dataColumn.ColumnName].ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isoInfo.ISO_Insulator = "/";
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "操作压力":
|
||||||
|
isoInfo.OperatingPressure = row[dataColumn.ColumnName].ToString();
|
||||||
|
break;
|
||||||
|
case "操作温度":
|
||||||
|
isoInfo.OperatingTemperature = row[dataColumn.ColumnName].ToString();
|
||||||
|
break;
|
||||||
|
case "泄露性试验":
|
||||||
|
if (isoInfo.ISO_DesignPress.HasValue)
|
||||||
|
{
|
||||||
|
isoInfo.LeakageTest = isoInfo.ISO_DesignPress.Value.ToString("0.00") ?? "";// row[dataColumn.ColumnName].ToString();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "设计压力":
|
||||||
|
isoInfo.ISO_DesignPress = Funs.GetNewDecimal(row[dataColumn.ColumnName].ToString());
|
||||||
|
isoInfo.LeakageTest = row[dataColumn.ColumnName].ToString();
|
||||||
|
break;
|
||||||
|
case "设计温度":
|
||||||
|
isoInfo.ISO_DesignTemperature = Funs.GetNewDecimal(row[dataColumn.ColumnName].ToString());
|
||||||
|
break;
|
||||||
|
case "耐压试验":
|
||||||
|
if (isoInfo.ISO_DesignPress.HasValue)
|
||||||
|
{
|
||||||
|
isoInfo.ISO_TestPress = isoInfo.ISO_DesignPress.Value * 1.5m;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "外径":
|
||||||
|
isoInfo.ISO_Dia = Funs.GetNewDecimal(row[dataColumn.ColumnName].ToString());
|
||||||
|
break;
|
||||||
|
case "壁厚":
|
||||||
|
isoInfo.ISO_Sch = Funs.GetNewDecimal(row[dataColumn.ColumnName].ToString());
|
||||||
|
break;
|
||||||
|
case "管线长度":
|
||||||
|
isoInfo.PipeLineLength = Funs.GetNewDecimal(row[dataColumn.ColumnName].ToString());
|
||||||
|
break;
|
||||||
|
case "检测类别序号":
|
||||||
|
isoInfo.TestCategoryNum = "/";
|
||||||
|
break;
|
||||||
|
case "热处理类型":
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(row[dataColumn.ColumnName].ToString()))
|
||||||
{
|
{
|
||||||
//isoInfo.IsHotType = row[dataColumn.ColumnName].ToString();
|
//isoInfo.IsHotType = row[dataColumn.ColumnName].ToString();
|
||||||
isoInfo.IsHot = "1";
|
isoInfo.IsHot = "1";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
isoList.Add(isoInfo);
|
break;
|
||||||
}
|
case "备注":
|
||||||
|
isoInfo.ISO_Remark = row[dataColumn.ColumnName].ToString();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
if (row[dataColumn.ColumnName].ToString().Contains("漆"))
|
||||||
catch (Exception e11)
|
|
||||||
{
|
{
|
||||||
|
isoInfo.ISO_Paint = row[dataColumn.ColumnName].ToString();
|
||||||
|
}
|
||||||
|
if (row[dataColumn.ColumnName].ToString().Contains("SH"))
|
||||||
|
{
|
||||||
|
var parts = row[dataColumn.ColumnName].ToString().Split(new[] { "SH" }, StringSplitOptions.None);
|
||||||
|
string PipeLineClass = parts[0]; // GC2
|
||||||
|
string ISC_IsoName = "SH" + parts[1]; // SHB3
|
||||||
|
isoInfo.ISC_ID = isoClasss.Where(x => x.ISC_IsoName == ISC_IsoName || x.ISC_IsoCode == ISC_IsoName).Select(x => x.ISC_ID).FirstOrDefault();
|
||||||
|
if (!string.IsNullOrEmpty(PipeLineClass))
|
||||||
|
{
|
||||||
|
isoInfo.PipeLineClass = PipeLineClass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (row[dataColumn.ColumnName].ToString().Contains("焊后热处理"))
|
||||||
|
{
|
||||||
|
//isoInfo.IsHotType = row[dataColumn.ColumnName].ToString();
|
||||||
|
isoInfo.IsHot = "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Console.WriteLine($"\n--- 表格 {j + 1} ---");
|
isoList.Add(isoInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 一次性读取PDF指定页范围内的全部表格,并按列位置合并为一个数据表。
|
||||||
|
/// </summary>
|
||||||
|
private static DataTable ExtractAllPdfTables(string pdfFilePath, int startPageIndex)
|
||||||
|
{
|
||||||
|
DataTable result = new DataTable("PDF全部页");
|
||||||
|
using (PdfDocument pdf = new PdfDocument())
|
||||||
|
{
|
||||||
|
pdf.LoadFromFile(pdfFilePath);
|
||||||
|
PdfTableExtractor extractor = new PdfTableExtractor(pdf);
|
||||||
|
|
||||||
|
for (int pageIndex = startPageIndex; pageIndex < pdf.Pages.Count; pageIndex++)
|
||||||
|
{
|
||||||
|
PdfTable[] tables = extractor.ExtractTable(pageIndex);
|
||||||
|
foreach (PdfTable table in tables)
|
||||||
|
{
|
||||||
|
AppendPdfTable(result, table);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
this.IsoGrid.DataSource = this.isoList;
|
/// <summary>
|
||||||
this.IsoGrid.DataBind();
|
/// 将单个PDF表格追加到汇总表,页间列数不同时按最大列数补齐。
|
||||||
|
/// </summary>
|
||||||
|
private static void AppendPdfTable(DataTable target, PdfTable source)
|
||||||
|
{
|
||||||
|
int firstColumnIndex = 0;
|
||||||
|
while (firstColumnIndex < source.GetColumnCount() && IsPdfColumnEmpty(source, firstColumnIndex))
|
||||||
|
{
|
||||||
|
firstColumnIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lastColumnIndex = source.GetColumnCount() - 1;
|
||||||
|
while (lastColumnIndex >= firstColumnIndex && IsPdfColumnEmpty(source, lastColumnIndex))
|
||||||
|
{
|
||||||
|
lastColumnIndex--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastColumnIndex < firstColumnIndex)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Spire可能在不同页面的表格首尾生成全空占位列,追加前先去掉这些列,避免整页错位。
|
||||||
|
int contentColumnCount = lastColumnIndex - firstColumnIndex + 1;
|
||||||
|
while (target.Columns.Count < contentColumnCount)
|
||||||
|
{
|
||||||
|
target.Columns.Add("col" + target.Columns.Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int rowIndex = 0; rowIndex < source.GetRowCount(); rowIndex++)
|
||||||
|
{
|
||||||
|
DataRow row = target.NewRow();
|
||||||
|
for (int columnIndex = 0; columnIndex < contentColumnCount; columnIndex++)
|
||||||
|
{
|
||||||
|
row[columnIndex] = source.GetText(rowIndex, firstColumnIndex + columnIndex);
|
||||||
|
}
|
||||||
|
target.Rows.Add(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool IsPdfColumnEmpty(PdfTable table, int columnIndex)
|
||||||
|
{
|
||||||
|
for (int rowIndex = 0; rowIndex < table.GetRowCount(); rowIndex++)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrWhiteSpace(table.GetText(rowIndex, columnIndex)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BindIsoGrid()
|
||||||
|
{
|
||||||
|
IsoGrid.DataSource = isoList;
|
||||||
|
IsoGrid.DataBind();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Grid CreateTableGrid(DataTable table)
|
||||||
|
{
|
||||||
|
Grid grid = new Grid
|
||||||
|
{
|
||||||
|
ShowGridHeader = true,
|
||||||
|
Title = table.TableName,
|
||||||
|
AllowColumnLocking = true,
|
||||||
|
DataKeyNames = new string[] { "Id" }
|
||||||
|
};
|
||||||
|
foreach (DataColumn column in table.Columns)
|
||||||
|
{
|
||||||
|
grid.Columns.Add(new BoundField { DataField = column.ColumnName, HeaderText = column.ColumnName });
|
||||||
|
}
|
||||||
|
grid.DataSource = table;
|
||||||
|
grid.DataBind();
|
||||||
|
return grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1171,4 +1198,4 @@ namespace FineUIPro.Web.HJGL.DataIn
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<LastActiveSolutionConfig>Release|Any CPU</LastActiveSolutionConfig>
|
<LastActiveSolutionConfig>Debug|Any CPU</LastActiveSolutionConfig>
|
||||||
<NameOfLastUsedPublishProfile>FolderProfile</NameOfLastUsedPublishProfile>
|
<NameOfLastUsedPublishProfile>FolderProfile</NameOfLastUsedPublishProfile>
|
||||||
<UseIISExpress>true</UseIISExpress>
|
<UseIISExpress>true</UseIISExpress>
|
||||||
<Use64BitIISExpress />
|
<Use64BitIISExpress />
|
||||||
|
|||||||
Reference in New Issue
Block a user