refactor(hjgl): 整理历史资源并完善焊接查询

归档数据库版本脚本并清理历史地图资源,补充焊口查询和焊接任务相关逻辑,降低项目资源维护成本并完善焊接业务查询。
This commit is contained in:
2026-09-22 14:22:04 +08:00
parent dc19b6d6b6
commit 2105a7c6d6
1321 changed files with 3432 additions and 47368 deletions
@@ -186,7 +186,13 @@ namespace BLL
var pipeLineMats = db.HJGL_PipeLineMat
.Where(e => idList.Contains(e.PipeLineMatId) && e.MaterialCode != null && e.MaterialCode != "")
.ToList();
foreach (var item in pipeLineMats)
var weldJointIds = pipeLineMats.Select(x => x.WeldJointId).Distinct().ToList();
var taskWeldJointIds = db.HJGL_WeldTask
.Where(x => weldJointIds.Contains(x.WeldJointId))
.Select(x => x.WeldJointId)
.Distinct()
.ToList();
foreach (var item in pipeLineMats.Where(x => !taskWeldJointIds.Contains(x.WeldJointId)))
{
item.MaterialCode = null;
count++;
@@ -6,6 +6,9 @@ namespace BLL
{
public static class WeldTaskService
{
private const string CoverMaterialClassFe1 = "Fe-1";
private const string CoverMaterialClassFe3 = "Fe-3";
/// <summary>
///获取焊接任务单信息
/// </summary>
@@ -25,6 +28,65 @@ namespace BLL
return db.HJGL_WeldTask.FirstOrDefault(e => e.WeldJointId == weldJointId);
}
/// <summary>
/// 根据母材类别计算任务单可替代的焊条和焊丝。
/// </summary>
public static void PopulateAlternativeConsumables(
Model.HJGL_WeldTask task,
Model.HJGL_WeldJoint weldJoint,
IEnumerable<Model.Base_Consumables> weldingRods,
IEnumerable<Model.Base_Consumables> weldingWires)
{
// 获取可替代焊材时沿用原有母材类别和焊材钢号判断规则。
var material = Base_MaterialService.GetMaterialByMaterialId(weldJoint.Material1Id);
string materialClass = material.MaterialClass;
var selectedRod = weldingRods.FirstOrDefault(x => x.ConsumablesId == weldJoint.WeldingRod);
var selectedWire = weldingWires.FirstOrDefault(x => x.ConsumablesId == weldJoint.WeldingWire);
task.CanWeldingRodName = GetAlternativeConsumableNames(materialClass, selectedRod, weldingRods);
task.CanWeldingWireName = GetAlternativeConsumableNames(materialClass, selectedWire, weldingWires);
}
/// <summary>
/// 返回与当前焊材钢号兼容的候选名称,保持原有逗号分隔格式。
/// </summary>
private static string GetAlternativeConsumableNames(
string materialClass,
Model.Base_Consumables selectedConsumable,
IEnumerable<Model.Base_Consumables> candidateConsumables)
{
if (selectedConsumable == null)
{
return null;
}
bool useCoverClass = materialClass == CoverMaterialClassFe1 || materialClass == CoverMaterialClassFe3;
var names = candidateConsumables
.Where(item => useCoverClass
? IsCoverClass(selectedConsumable.SteelType, item.SteelType)
: selectedConsumable.SteelType == item.SteelType)
.Select(item => item.ConsumablesName)
.ToList();
return names.Any() ? string.Join(",", names) : null;
}
/// <summary>
/// 判断焊材钢号类别是否能覆盖母材类别。
/// </summary>
private static bool IsCoverClass(string wpsClass, string matClass)
{
if (wpsClass.Length <= 2 || matClass.Length <= 2)
{
return false;
}
string wpsPre = wpsClass.Substring(0, wpsClass.Length - 2);
string matPre = matClass.Substring(0, matClass.Length - 2);
int wpsSn = Funs.GetNewInt(wpsClass.Substring(wpsClass.Length - 1, 1)) ?? 0;
int matSn = Funs.GetNewInt(matClass.Substring(matClass.Length - 1, 1)) ?? 0;
return wpsPre == matPre && matSn >= wpsSn;
}
/// <summary>
///获取焊接任务单编号
/// </summary>
@@ -1357,174 +1357,87 @@ namespace BLL
}
/// <summary>
/// 获取焊接日志导出数据;传日报ID时导出单份日报,否则按单位工程和月份导出。
/// 将焊口信息转换为俄文焊口总览模板所需的数据。
/// </summary>
/// <param name="projectId">项目ID</param>
/// <param name="unitWorkId">单位工程ID</param>
/// <param name="weldingDailyId">焊接日报ID</param>
/// <param name="month">月份,格式为yyyy-MM</param>
/// <returns>仅包含俄文表头和业务数据的焊接日志</returns>
public static DataTable GetWeldingLogExportData(string projectId, string unitWorkId,
string weldingDailyId, string month)
public static DataTable GetRussianWeldJointExportData(IEnumerable<Model.View_HJGL_WeldJoint> weldJoints)
{
if (string.IsNullOrWhiteSpace(projectId)
|| (string.IsNullOrWhiteSpace(unitWorkId) && string.IsNullOrWhiteSpace(weldingDailyId)))
{
return new DataTable();
}
var joints = weldJoints.ToList();
var unitWorkIds = joints.Select(x => x.UnitWorkId).Where(x => x != null && x != string.Empty).Distinct().ToList();
var unitWorkCodes = (from x in Funs.DB.WBS_UnitWork
where unitWorkIds.Contains(x.UnitWorkId)
select new { x.UnitWorkId, x.UnitWorkCode })
.ToDictionary(x => x.UnitWorkId, x => x.UnitWorkCode);
DateTime monthStart = DateTime.MinValue;
if (string.IsNullOrWhiteSpace(weldingDailyId)
&& !DateTime.TryParse(month + "-01", out monthStart))
var rows = joints.Select(x =>
{
return new DataTable();
}
string unitWorkCode;
unitWorkCodes.TryGetValue(x.UnitWorkId ?? string.Empty, out unitWorkCode);
string[] methods = (x.WeldingMethodCode ?? string.Empty)
.Split(new[] { '+' }, StringSplitOptions.RemoveEmptyEntries);
string rootMethod = methods.Length == 0 ? string.Empty : methods[0].Trim();
string fillMethod = methods.Length == 0 ? string.Empty : methods[methods.Length - 1].Trim();
string detectionType = (x.DetectionTypeCode ?? string.Empty).ToUpperInvariant();
string componentName = string.Join("/", new[] { x.ComponentsCode1, x.ComponentsCode2 }
.Where(value => value != null && value != string.Empty));
string teamName = string.Join("/", new[] { x.BackingWelderTeamGroupName, x.CoverWelderTeamGroupName }
.Where(value => value != null && value != string.Empty).Distinct());
string condition;
var parameters = new List<SqlParameter>
{
new SqlParameter("@ProjectId", projectId)
};
if (!string.IsNullOrWhiteSpace(weldingDailyId))
{
condition = "jot.WeldingDailyId = @WeldingDailyId";
parameters.Add(new SqlParameter("@WeldingDailyId", weldingDailyId));
}
else
{
condition = @"jot.UnitWorkId = @UnitWorkId
AND jot.WeldingDateD >= @MonthStart
AND jot.WeldingDateD < @NextMonth";
parameters.Add(new SqlParameter("@UnitWorkId", unitWorkId));
parameters.Add(new SqlParameter("@MonthStart", monthStart.Date));
parameters.Add(new SqlParameter("@NextMonth", monthStart.Date.AddMonths(1)));
}
return new
{
MediumCode = x.MediumCode,
SheetNo = string.Empty,
AreaNo = unitWorkCode,
DrawingNo = x.SingleNumber,
PIDNo = string.Empty,
LineRevision = string.Empty,
PipelineCode = x.PipelineCode,
PipingClassCode = x.PipingClassCode,
FluidGroup = x.PressurePipingClassCode,
SpoolNo = x.FlowingSection,
WeldJointCode = x.WeldJointCode,
JointSymbol = x.JointAttribute == "预制口" ? "S" : x.JointAttribute == "安装口" ? "F" : x.JointAttribute,
RTRate = detectionType.Contains("RT") || detectionType.Contains("UT") ? x.DetectionRateCode : string.Empty,
PTRate = detectionType.Contains("PT") ? x.DetectionRateCode : string.Empty,
VTRate = detectionType.Contains("VT") ? x.DetectionRateCode : string.Empty,
Material1 = x.Material1Code,
Material2 = x.Material2Code,
Size = x.Size,
PipeSchedule = string.Empty,
Dia = x.Dia,
Thickness = x.Thickness,
Specification = x.Specification,
WeldType = x.WeldTypeCode,
WPSCode = x.WPQCode,
RootMethod = rootMethod,
FillMethod = fillMethod,
WeldingDate = x.WeldingDateD.HasValue ? x.WeldingDateD.Value.ToString("yyyy-MM-dd") : x.WeldingDate,
AmbientTemperature = string.Empty,
ComponentName = componentName,
RootWelderCode = x.BackingWelderCode,
RootWelderName = x.BackingWelderName,
FillWelderCode = x.CoverWelderCode,
FillWelderName = x.CoverWelderName,
VTTrustCode = detectionType.Contains("VT") ? x.TrustBatchCode : string.Empty,
RTUTTrustCode = detectionType.Contains("RT") || detectionType.Contains("UT") ? x.TrustBatchCode : string.Empty,
PTTrustCode = detectionType.Contains("PT") ? x.TrustBatchCode : string.Empty,
PMITrustCode = detectionType.Contains("PMI") ? x.TrustBatchCode : string.Empty,
PWHT = x.IsHotProess.HasValue ? (x.IsHotProess.Value ? "Yes" : "No") : string.Empty,
PWHTTrustCode = string.Empty,
WeldingMaterial1 = x.WeldingWireCode,
WeldingMaterial2 = x.WeldingRodCode,
ComponentCode1 = x.ComponentsCode1,
HeatNo1 = x.HeartNo1,
ComponentCode2 = x.ComponentsCode2,
HeatNo2 = x.HeartNo2,
TeamName = teamName,
WeldCheckCode = x.PointBatchCode,
DesignTemperature = x.DesignTemperature,
InsulationType = string.Empty,
Remark = x.Remark
};
}).ToList();
// 俄文日志列横跨焊口、日报、外观、热处理、硬度和无损检测,统一在服务层完成映射,页面仅负责下载。
string sql = @"
SELECT ROW_NUMBER() OVER (ORDER BY jot.WeldingDateD, jot.PipelineCode, jot.WeldJointCode) AS C01,
CONCAT(jot.PipelineCode, '/', jot.WeldJointCode,
CASE WHEN ISNULL(jot.WeldTypeCode, '') = '' THEN '' ELSE ', ' + jot.WeldTypeCode END) AS C02,
CASE WHEN welder.BackingDisplay = welder.CoverDisplay THEN welder.BackingDisplay
WHEN welder.BackingDisplay = '' THEN welder.CoverDisplay
WHEN welder.CoverDisplay = '' THEN welder.BackingDisplay
ELSE welder.BackingDisplay + CHAR(10) + welder.CoverDisplay END AS C03,
REPLACE(ISNULL(jot.MaterialCode, ''), '/', ' / ') AS C04,
REPLACE(REPLACE(
COALESCE(NULLIF(jot.Specification, ''),
CONCAT(CONVERT(varchar(30), jot.Dia), N'×', CONVERT(varchar(30), jot.Thickness))),
N'Φ', ''), '*', N'×') AS C05,
CONVERT(varchar(10), jot.WeldingDateD, 104) AS C06,
ISNULL(jot.WeldingMethodCode, '') AS C07,
CONCAT(
CASE WHEN ISNULL(jot.WeldingWireCode, '') = '' THEN ''
ELSE jot.WeldingWireCode + CASE WHEN ISNULL(wire.Standard, '') = '' THEN '' ELSE ' (' + wire.Standard + ')' END END,
CASE WHEN ISNULL(jot.WeldingWireCode, '') = '' OR ISNULL(jot.WeldingRodCode, '') = '' THEN '' ELSE CHAR(10) END,
CASE WHEN ISNULL(jot.WeldingRodCode, '') = '' THEN ''
ELSE jot.WeldingRodCode + CASE WHEN ISNULL(rod.Standard, '') = '' THEN '' ELSE ' (' + rod.Standard + ')' END END) AS C08,
CASE WHEN appearance.PreheatTemperature IS NULL AND appearance.InterpassTemperature IS NULL
THEN CASE WHEN ISNULL(jot.PreTemperature, '') = '' THEN '' ELSE jot.PreTemperature + N' °C' END
WHEN appearance.InterpassTemperature IS NULL
THEN CONCAT(CONVERT(varchar(30), appearance.PreheatTemperature), N' °C')
WHEN appearance.PreheatTemperature IS NULL
THEN CONCAT(CONVERT(varchar(30), appearance.InterpassTemperature), N' °C')
ELSE CONCAT(CONVERT(varchar(30), appearance.PreheatTemperature), ' / ',
CONVERT(varchar(30), appearance.InterpassTemperature), N' °C') END AS C09,
N'' AS C10,
N'' AS C11,
N'' AS C12,
ISNULL(hotProcess.RecordChartNo, '') AS C13,
CONCAT(
CASE WHEN hardness.HardNessValue1 IS NULL THEN '' ELSE CONVERT(varchar(20), hardness.HardNessValue1) END,
CASE WHEN hardness.HardNessValue2 IS NULL THEN '' ELSE '/' + CONVERT(varchar(20), hardness.HardNessValue2) END,
CASE WHEN hardness.HardNessValue3 IS NULL THEN '' ELSE '/' + CONVERT(varchar(20), hardness.HardNessValue3) END,
CASE WHEN ISNULL(hardness.HardReportNo, '') = '' THEN '' ELSE ', ' + RTRIM(hardness.HardReportNo) END,
CASE WHEN hardness.ReportDate IS NULL THEN '' ELSE ', ' + CONVERT(varchar(10), hardness.ReportDate, 104) END) AS C14,
CASE WHEN appearance.IsQualified = 1 THEN N'Годен'
WHEN appearance.IsQualified = 0 THEN N'Не годен'
ELSE N'' END AS C15,
ISNULL(ndt.ResultText, '') AS C16,
N'' AS C17
FROM dbo.View_HJGL_WeldJoint AS jot
LEFT JOIN dbo.Base_Consumables AS wire ON wire.ConsumablesId = jot.WeldingWire
LEFT JOIN dbo.Base_Consumables AS rod ON rod.ConsumablesId = jot.WeldingRod
OUTER APPLY
(
SELECT CONCAT(ISNULL(jot.BackingWelderName, ''),
CASE WHEN ISNULL(jot.BackingWelderCode, '') = '' THEN '' ELSE ' (' + jot.BackingWelderCode + ')' END) AS BackingDisplay,
CONCAT(ISNULL(jot.CoverWelderName, ''),
CASE WHEN ISNULL(jot.CoverWelderCode, '') = '' THEN '' ELSE ' (' + jot.CoverWelderCode + ')' END) AS CoverDisplay
) AS welder
OUTER APPLY
(
SELECT TOP 1 checkItem.IsQualified, checkItem.PreheatTemperature, checkItem.InterpassTemperature
FROM dbo.HJGL_WeldAppearanceCheck AS checkItem
WHERE checkItem.WeldJointId = jot.WeldJointId
ORDER BY checkItem.CheckTime DESC, checkItem.CreateTime DESC, checkItem.AppearanceCheckId DESC
) AS appearance
OUTER APPLY
(
SELECT TOP 1 report.RecordChartNo
FROM dbo.HJGL_HotProess_TrustItem AS trustItem
LEFT JOIN dbo.HJGL_HotProess_Report AS report
ON report.HotProessTrustItemId = trustItem.HotProessTrustItemId
WHERE trustItem.WeldJointId = jot.WeldJointId
ORDER BY report.ProessDate DESC, report.HotProessReportId DESC
) AS hotProcess
OUTER APPLY
(
SELECT TOP 1 report.HardReportNo, report.HardNessValue1, report.HardNessValue2,
report.HardNessValue3, hardTrust.ReportDate
FROM dbo.HJGL_Hard_TrustItem AS hardItem
LEFT JOIN dbo.HJGL_Hard_Report AS report ON report.HardTrustItemID = hardItem.HardTrustItemID
LEFT JOIN dbo.HJGL_Hard_Trust AS hardTrust ON hardTrust.HardTrustID = hardItem.HardTrustID
WHERE hardItem.WeldJointId = jot.WeldJointId
ORDER BY hardTrust.ReportDate DESC, report.SortIndex, report.HardReportId DESC
) AS hardness
OUTER APPLY
(
SELECT STUFF((
SELECT CHAR(10) + CONCAT(ISNULL(detectionType.DetectionTypeCode, ''),
CASE ndeItem.CheckResult WHEN '1' THEN N': Годен' WHEN '2' THEN N': Не годен' ELSE '' END,
CASE WHEN ISNULL(ndeItem.NDEReportNo, nde.NDECode) IS NULL THEN ''
ELSE ', ' + ISNULL(ndeItem.NDEReportNo, nde.NDECode) END,
CASE WHEN ndeItem.ReportDate IS NULL THEN '' ELSE ', ' + CONVERT(varchar(10), ndeItem.ReportDate, 104) END)
FROM dbo.HJGL_Batch_BatchTrustItem AS trustItem
INNER JOIN dbo.HJGL_Batch_NDEItem AS ndeItem ON ndeItem.TrustBatchItemId = trustItem.TrustBatchItemId
LEFT JOIN dbo.HJGL_Batch_NDE AS nde ON nde.NDEID = ndeItem.NDEID
LEFT JOIN dbo.Base_DetectionType AS detectionType ON detectionType.DetectionTypeId = ndeItem.DetectionTypeId
WHERE trustItem.WeldJointId = jot.WeldJointId
ORDER BY ndeItem.ReportDate, ndeItem.NDEItemID
FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '') AS ResultText
) AS ndt
WHERE jot.ProjectId = @ProjectId AND " + condition;
DataTable table = SQLHelper.GetDataTableRunText(sql, parameters.ToArray());
string[] headers =
{
"№\r\nп/п",
"Обозначение сварного соединения по исполнительному чертежу, тип сварного соединения ГОСТ 16037",
"Ф.И.О.\r\nсварщика,\r\nличное\r\nклеймо",
"Марка стали (композиция марок\r\nсталей), НД, №№ сертификатов",
"Наружный диаметр элемента трубопровода и толщина стенки Dн×S, мм",
"Дата сварки, температурные условия в рабочей зоне,°С",
"Способ\r\nсварки",
"Сварочные материалы (марка электрода, сварочной проволоки, защитный газ, флюс), НД, №№ сертификатов",
"Режим\r\nпредварительного и\r\nсопутствующего\r\nподогрева",
"Отметка о контроле\r\nкорня\r\nшва",
"Стилоскопирование металла шва,\r\n№ заключения, дата",
"Ф.И.О. оператора- термиста, личное клеймо",
"№ диаграммы по журналу термообработки сварных соединений",
"Твердость металла шва, № заключения, дата",
"Отметка о годности сварного соединения по внешнему осмотру и измерениям",
"Способ и результаты неразрушающего контроля сварного соединения, № заключения, дата",
"Результаты измерения ферритной фазы в металле шва, № заключения, дата"
};
for (int i = 0; i < headers.Length; i++)
{
table.Columns[i].ColumnName = headers[i];
}
return table;
return Funs.LINQToDataTable(rows);
}
public static Dictionary<string, object> GetFileOutValueById(string WeldingDailyId)