feat(HJGL): 焊接首页统计施工单位进度统计增加焊工数量、焊工日功效、焊接一次合格率列
This commit is contained in:
@@ -403,7 +403,7 @@ WHERE UnitWorkId = @UnitWorkId";
|
||||
List<SqlParameter> listStr = new List<SqlParameter>();
|
||||
if (this.rbType.SelectedValue == "1")
|
||||
{
|
||||
// 优化:使用 CTE 和聚合替代嵌套子查询
|
||||
// 优化:使用 CTE 和聚合替代嵌套子查询,增加焊工数量、焊工日功效、焊接一次合格率
|
||||
strSql = @"
|
||||
WITH UnitWeldingDaily AS (
|
||||
-- 获取项目的所有焊接日报记录
|
||||
@@ -413,8 +413,10 @@ WITH UnitWeldingDaily AS (
|
||||
WHERE wd.ProjectId = @ProjectId
|
||||
),
|
||||
TodayStats AS (
|
||||
-- 当日完成统计
|
||||
SELECT wd.UnitId, SUM(ISNULL(jot.Size, 0)) AS TodayFinishSize
|
||||
-- 当日完成统计(含焊工数量)
|
||||
SELECT wd.UnitId,
|
||||
SUM(ISNULL(jot.Size, 0)) AS TodayFinishSize,
|
||||
COUNT(DISTINCT CASE WHEN jot.CoverWelderId IS NOT NULL AND jot.CoverWelderId != '' THEN jot.CoverWelderId END) AS CurrentWelders
|
||||
FROM dbo.HJGL_WeldingDaily wd
|
||||
INNER JOIN dbo.HJGL_WeldJoint jot ON jot.WeldingDailyId = wd.WeldingDailyId
|
||||
WHERE wd.ProjectId = @ProjectId AND wd.WeldingDate = @WeldingDate AND jot.WeldingDailyId IS NOT NULL
|
||||
@@ -427,19 +429,41 @@ CumulativeStats AS (
|
||||
INNER JOIN dbo.HJGL_WeldJoint jot ON jot.WeldingDailyId = wd.WeldingDailyId
|
||||
WHERE wd.ProjectId = @ProjectId AND wd.WeldingDate <= @WeldingDate AND jot.WeldingDailyId IS NOT NULL
|
||||
GROUP BY wd.UnitId
|
||||
),
|
||||
NDERates AS (
|
||||
-- 焊接一次合格率统计(按施工单位)
|
||||
SELECT wd.UnitId,
|
||||
CAST(CASE WHEN COUNT(*) = 0 THEN 0
|
||||
ELSE 100.0 * SUM(CASE WHEN nde.CheckResult != '2' THEN 1 ELSE 0 END) / COUNT(*)
|
||||
END AS DECIMAL(8, 2)) AS WeldingFirstPassRate
|
||||
FROM dbo.HJGL_Batch_NDEItem nde
|
||||
INNER JOIN dbo.HJGL_Batch_BatchTrustItem bt ON nde.TrustBatchItemId = bt.TrustBatchItemId
|
||||
INNER JOIN dbo.HJGL_Batch_PointBatchItem pb ON bt.PointBatchItemId = pb.PointBatchItemId
|
||||
INNER JOIN dbo.HJGL_Batch_NDE n ON nde.NDEID = n.NDEID
|
||||
INNER JOIN dbo.HJGL_WeldJoint wj ON bt.WeldJointId = wj.WeldJointId
|
||||
INNER JOIN dbo.HJGL_WeldingDaily wd ON wj.WeldingDailyId = wd.WeldingDailyId
|
||||
WHERE pb.PointDate IS NOT NULL AND pb.PointState = '1' AND bt.RepairRecordId IS NULL
|
||||
AND n.ProjectId = @ProjectId
|
||||
GROUP BY wd.UnitId
|
||||
)
|
||||
SELECT uwd.UnitName,
|
||||
CAST(ISNULL(ts.TodayFinishSize, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
|
||||
CAST(ISNULL(cs.FinishSize, 0) AS DECIMAL(12, 3)) AS FinishSize
|
||||
CAST(ISNULL(cs.FinishSize, 0) AS DECIMAL(12, 3)) AS FinishSize,
|
||||
ISNULL(ts.CurrentWelders, 0) AS CurrentWelders,
|
||||
CASE WHEN ISNULL(ts.CurrentWelders, 0) = 0 THEN 0
|
||||
ELSE CAST(ISNULL(ts.TodayFinishSize, 0) * 1.0 / ts.CurrentWelders AS DECIMAL(12, 3))
|
||||
END AS WelderEfficiency,
|
||||
ISNULL(nr.WeldingFirstPassRate, 0) AS WeldingFirstPassRate
|
||||
FROM UnitWeldingDaily uwd
|
||||
LEFT JOIN TodayStats ts ON uwd.UnitId = ts.UnitId
|
||||
LEFT JOIN CumulativeStats cs ON uwd.UnitId = cs.UnitId";
|
||||
LEFT JOIN CumulativeStats cs ON uwd.UnitId = cs.UnitId
|
||||
LEFT JOIN NDERates nr ON uwd.UnitId = nr.UnitId";
|
||||
listStr.Add(new SqlParameter("@ProjectId", (CurrUser != null) ? CurrUser.LoginProjectId : ""));
|
||||
listStr.Add(new SqlParameter("@WeldingDate", this.txtWeldingDate.Text.Trim()));
|
||||
}
|
||||
else
|
||||
{
|
||||
// 优化:使用 CTE 和聚合(时间段模式)
|
||||
// 优化:使用 CTE 和聚合(时间段模式),增加焊工数量、焊工日功效、焊接一次合格率
|
||||
strSql = @"
|
||||
WITH UnitWeldingDaily AS (
|
||||
SELECT DISTINCT wd.UnitId, u.UnitName
|
||||
@@ -448,8 +472,10 @@ WITH UnitWeldingDaily AS (
|
||||
WHERE wd.ProjectId = @ProjectId
|
||||
),
|
||||
PeriodStats AS (
|
||||
-- 时间段完成统计
|
||||
SELECT wd.UnitId, SUM(ISNULL(jot.Size, 0)) AS TodayFinishSize
|
||||
-- 时间段完成统计(含焊工数量)
|
||||
SELECT wd.UnitId,
|
||||
SUM(ISNULL(jot.Size, 0)) AS TodayFinishSize,
|
||||
COUNT(DISTINCT CASE WHEN jot.CoverWelderId IS NOT NULL AND jot.CoverWelderId != '' THEN jot.CoverWelderId END) AS CurrentWelders
|
||||
FROM dbo.HJGL_WeldingDaily wd
|
||||
INNER JOIN dbo.HJGL_WeldJoint jot ON jot.WeldingDailyId = wd.WeldingDailyId
|
||||
WHERE wd.ProjectId = @ProjectId AND wd.WeldingDate >= @WeldingStartDate AND wd.WeldingDate <= @WeldingEndDate AND jot.WeldingDailyId IS NOT NULL
|
||||
@@ -462,13 +488,35 @@ CumulativeStats AS (
|
||||
INNER JOIN dbo.HJGL_WeldJoint jot ON jot.WeldingDailyId = wd.WeldingDailyId
|
||||
WHERE wd.ProjectId = @ProjectId AND wd.WeldingDate <= @WeldingEndDate AND jot.WeldingDailyId IS NOT NULL
|
||||
GROUP BY wd.UnitId
|
||||
),
|
||||
NDERates AS (
|
||||
-- 焊接一次合格率统计(按施工单位)
|
||||
SELECT wd.UnitId,
|
||||
CAST(CASE WHEN COUNT(*) = 0 THEN 0
|
||||
ELSE 100.0 * SUM(CASE WHEN nde.CheckResult != '2' THEN 1 ELSE 0 END) / COUNT(*)
|
||||
END AS DECIMAL(8, 2)) AS WeldingFirstPassRate
|
||||
FROM dbo.HJGL_Batch_NDEItem nde
|
||||
INNER JOIN dbo.HJGL_Batch_BatchTrustItem bt ON nde.TrustBatchItemId = bt.TrustBatchItemId
|
||||
INNER JOIN dbo.HJGL_Batch_PointBatchItem pb ON bt.PointBatchItemId = pb.PointBatchItemId
|
||||
INNER JOIN dbo.HJGL_Batch_NDE n ON nde.NDEID = n.NDEID
|
||||
INNER JOIN dbo.HJGL_WeldJoint wj ON bt.WeldJointId = wj.WeldJointId
|
||||
INNER JOIN dbo.HJGL_WeldingDaily wd ON wj.WeldingDailyId = wd.WeldingDailyId
|
||||
WHERE pb.PointDate IS NOT NULL AND pb.PointState = '1' AND bt.RepairRecordId IS NULL
|
||||
AND n.ProjectId = @ProjectId
|
||||
GROUP BY wd.UnitId
|
||||
)
|
||||
SELECT uwd.UnitName,
|
||||
CAST(ISNULL(ps.TodayFinishSize, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
|
||||
CAST(ISNULL(cs.FinishSize, 0) AS DECIMAL(12, 3)) AS FinishSize
|
||||
CAST(ISNULL(cs.FinishSize, 0) AS DECIMAL(12, 3)) AS FinishSize,
|
||||
ISNULL(ps.CurrentWelders, 0) AS CurrentWelders,
|
||||
CASE WHEN ISNULL(ps.CurrentWelders, 0) = 0 THEN 0
|
||||
ELSE CAST(ISNULL(ps.TodayFinishSize, 0) * 1.0 / ps.CurrentWelders AS DECIMAL(12, 3))
|
||||
END AS WelderEfficiency,
|
||||
ISNULL(nr.WeldingFirstPassRate, 0) AS WeldingFirstPassRate
|
||||
FROM UnitWeldingDaily uwd
|
||||
LEFT JOIN PeriodStats ps ON uwd.UnitId = ps.UnitId
|
||||
LEFT JOIN CumulativeStats cs ON uwd.UnitId = cs.UnitId";
|
||||
LEFT JOIN CumulativeStats cs ON uwd.UnitId = cs.UnitId
|
||||
LEFT JOIN NDERates nr ON uwd.UnitId = nr.UnitId";
|
||||
listStr.Add(new SqlParameter("@ProjectId", (CurrUser != null) ? CurrUser.LoginProjectId : ""));
|
||||
listStr.Add(new SqlParameter("@WeldingStartDate", this.txtWeldingStartDate.Text.Trim()));
|
||||
listStr.Add(new SqlParameter("@WeldingEndDate", this.txtWeldingEndDate.Text.Trim()));
|
||||
@@ -646,6 +694,7 @@ LEFT JOIN CumulativeStats cs ON uwd.UnitId = cs.UnitId";
|
||||
this.Grid1.Columns[1].HeaderText = "当日完成达因数";
|
||||
this.Grid2.Columns[2].HeaderText = "当日完成达因数";
|
||||
this.Grid3.Columns[1].HeaderText = "当日完成达因数";
|
||||
this.Grid3.Columns[3].HeaderText = "当日焊工数量";
|
||||
this.BtnAnalyse.Hidden = true;
|
||||
BindGrid1();
|
||||
BindGrid2(this.tvControlItem.SelectedNodeID);
|
||||
@@ -659,6 +708,7 @@ LEFT JOIN CumulativeStats cs ON uwd.UnitId = cs.UnitId";
|
||||
this.Grid1.Columns[1].HeaderText = "当期完成达因数";
|
||||
this.Grid2.Columns[2].HeaderText = "当期完成达因数";
|
||||
this.Grid3.Columns[1].HeaderText = "当期完成达因数";
|
||||
this.Grid3.Columns[3].HeaderText = "当期焊工数量";
|
||||
this.BtnAnalyse.Hidden = false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user