feat(HJGL): 焊接首页统计施工单位进度统计增加焊工数量、焊工日功效、焊接一次合格率列

This commit is contained in:
李鹏飞 2026-04-13 21:20:58 +08:00
parent d4c0aeaab3
commit 467b936ae5
3 changed files with 82 additions and 19 deletions

View File

@ -123,14 +123,14 @@
DataField="CompletedRate" FieldType="String" HeaderTextAlign="Center" TextAlign="Left" DataField="CompletedRate" FieldType="String" HeaderTextAlign="Center" TextAlign="Left"
Width="120px"> Width="120px">
</f:RenderField> </f:RenderField>
<f:RenderField HeaderText="当前焊工数量" ColumnID="WelderCount" <%-- <f:RenderField HeaderText="当前焊工数量" ColumnID="WelderCount"
DataField="WelderCount" FieldType="Int" HeaderTextAlign="Center" TextAlign="Left" DataField="WelderCount" FieldType="Int" HeaderTextAlign="Center" TextAlign="Left"
Width="120px"> Width="120px">
</f:RenderField> </f:RenderField>
<f:RenderField HeaderText="焊工日功效" ColumnID="WarningWelderCount" <f:RenderField HeaderText="焊工日功效" ColumnID="WarningWelderCount"
DataField="WarningWelderCount" FieldType="Float" HeaderTextAlign="Center" TextAlign="Left" DataField="WarningWelderCount" FieldType="Float" HeaderTextAlign="Center" TextAlign="Left"
Width="120px"> Width="120px">
</f:RenderField> </f:RenderField>--%>
</Columns> </Columns>
<PageItems> <PageItems>
<f:ToolbarSeparator ID="ToolbarSeparator2" runat="server"> <f:ToolbarSeparator ID="ToolbarSeparator2" runat="server">

View File

@ -124,26 +124,39 @@
<f:FormRow> <f:FormRow>
<Items> <Items>
<f:Panel runat="server" ID="panel2" RegionPosition="Center" RegionSplit="true" EnableCollapse="true" ShowBorder="true" <f:Panel runat="server" ID="panel2" RegionPosition="Center" RegionSplit="true" EnableCollapse="true" ShowBorder="true"
Layout="Fit" ShowHeader="true" RegionSplitWidth="20px" BodyPadding="1px" Height="215px" Title="施工单位进度统计" Layout="Fit" ShowHeader="true" RegionSplitWidth="20px" BodyPadding="1px" Height="215px" Title="进度质量"
TitleToolTip="施工单位进度统计" AutoScroll="true"> TitleToolTip="进度质量" AutoScroll="true">
<Items> <Items>
<f:Grid ID="Grid3" ShowBorder="true" ShowHeader="false" Title="施工单位进度统计" <f:Grid ID="Grid3" ShowBorder="true" ShowHeader="false" Title="进度质量"
EnableCollapse="true" runat="server" BoxFlex="1" DataKeyNames="UnitName" EnableCollapse="true" runat="server" BoxFlex="1" DataKeyNames="UnitName"
EnableColumnLines="true" DataIDField="UnitName" AllowSorting="true" SortField="UnitName" SortDirection="ASC" EnableColumnLines="true" DataIDField="UnitName" AllowSorting="true" SortField="UnitName" SortDirection="ASC"
PageSize="15"> PageSize="15">
<Columns> <Columns>
<f:RenderField HeaderText="施工单位" ColumnID="UnitName" ExpandUnusedSpace="true" <f:RenderField HeaderText="施工单位" ColumnID="UnitName" ExpandUnusedSpace="true"
DataField="UnitName" SortField="UnitName" FieldType="String" HeaderTextAlign="Center" DataField="UnitName" SortField="UnitName" FieldType="String" HeaderTextAlign="Center"
TextAlign="Center" Width="300px"> TextAlign="Center" Width="200px">
</f:RenderField> </f:RenderField>
<f:RenderField HeaderText="当日完成达因数" ColumnID="TodayFinishSize" <f:RenderField HeaderText="当日完成达因数" ColumnID="TodayFinishSize"
DataField="TodayFinishSize" SortField="TodayFinishSize" FieldType="Double" HeaderTextAlign="Center" DataField="TodayFinishSize" SortField="TodayFinishSize" FieldType="Double" HeaderTextAlign="Center"
TextAlign="Center" Width="250px"> TextAlign="Center" Width="150px">
</f:RenderField> </f:RenderField>
<f:RenderField HeaderText="累计已完成达因数" ColumnID="FinishSize" <f:RenderField HeaderText="累计已完成达因数" ColumnID="FinishSize"
DataField="FinishSize" SortField="FinishSize" FieldType="Double" HeaderTextAlign="Center" DataField="FinishSize" SortField="FinishSize" FieldType="Double" HeaderTextAlign="Center"
TextAlign="Center" Width="250px"> TextAlign="Center" Width="150px">
</f:RenderField> </f:RenderField>
<f:RenderField HeaderText="当前焊工数量" ColumnID="CurrentWelders"
DataField="CurrentWelders" SortField="CurrentWelders" FieldType="Double" HeaderTextAlign="Center"
TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="焊工日功效" ColumnID="WelderEfficiency"
DataField="WelderEfficiency" SortField="WelderEfficiency" FieldType="Double" HeaderTextAlign="Center"
TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="焊接一次合格率" ColumnID="WeldingFirstPassRate"
DataField="WeldingFirstPassRate" SortField="WeldingFirstPassRate" FieldType="Double" HeaderTextAlign="Center"
TextAlign="Center" Width="150px">
</f:RenderField>
</Columns> </Columns>
</f:Grid> </f:Grid>
</Items> </Items>

View File

@ -403,7 +403,7 @@ WHERE UnitWorkId = @UnitWorkId";
List<SqlParameter> listStr = new List<SqlParameter>(); List<SqlParameter> listStr = new List<SqlParameter>();
if (this.rbType.SelectedValue == "1") if (this.rbType.SelectedValue == "1")
{ {
// 优化:使用 CTE 和聚合替代嵌套子查询 // 优化:使用 CTE 和聚合替代嵌套子查询,增加焊工数量、焊工日功效、焊接一次合格率
strSql = @" strSql = @"
WITH UnitWeldingDaily AS ( WITH UnitWeldingDaily AS (
-- --
@ -413,8 +413,10 @@ WITH UnitWeldingDaily AS (
WHERE wd.ProjectId = @ProjectId WHERE wd.ProjectId = @ProjectId
), ),
TodayStats AS ( 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 FROM dbo.HJGL_WeldingDaily wd
INNER JOIN dbo.HJGL_WeldJoint jot ON jot.WeldingDailyId = wd.WeldingDailyId 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 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 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 WHERE wd.ProjectId = @ProjectId AND wd.WeldingDate <= @WeldingDate AND jot.WeldingDailyId IS NOT NULL
GROUP BY wd.UnitId 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, SELECT uwd.UnitName,
CAST(ISNULL(ts.TodayFinishSize, 0) AS DECIMAL(12, 3)) AS TodayFinishSize, 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 FROM UnitWeldingDaily uwd
LEFT JOIN TodayStats ts ON uwd.UnitId = ts.UnitId 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("@ProjectId", (CurrUser != null) ? CurrUser.LoginProjectId : ""));
listStr.Add(new SqlParameter("@WeldingDate", this.txtWeldingDate.Text.Trim())); listStr.Add(new SqlParameter("@WeldingDate", this.txtWeldingDate.Text.Trim()));
} }
else else
{ {
// 优化:使用 CTE 和聚合(时间段模式) // 优化:使用 CTE 和聚合(时间段模式),增加焊工数量、焊工日功效、焊接一次合格率
strSql = @" strSql = @"
WITH UnitWeldingDaily AS ( WITH UnitWeldingDaily AS (
SELECT DISTINCT wd.UnitId, u.UnitName SELECT DISTINCT wd.UnitId, u.UnitName
@ -448,8 +472,10 @@ WITH UnitWeldingDaily AS (
WHERE wd.ProjectId = @ProjectId WHERE wd.ProjectId = @ProjectId
), ),
PeriodStats AS ( 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 FROM dbo.HJGL_WeldingDaily wd
INNER JOIN dbo.HJGL_WeldJoint jot ON jot.WeldingDailyId = wd.WeldingDailyId 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 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 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 WHERE wd.ProjectId = @ProjectId AND wd.WeldingDate <= @WeldingEndDate AND jot.WeldingDailyId IS NOT NULL
GROUP BY wd.UnitId 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, SELECT uwd.UnitName,
CAST(ISNULL(ps.TodayFinishSize, 0) AS DECIMAL(12, 3)) AS TodayFinishSize, 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 FROM UnitWeldingDaily uwd
LEFT JOIN PeriodStats ps ON uwd.UnitId = ps.UnitId 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("@ProjectId", (CurrUser != null) ? CurrUser.LoginProjectId : ""));
listStr.Add(new SqlParameter("@WeldingStartDate", this.txtWeldingStartDate.Text.Trim())); listStr.Add(new SqlParameter("@WeldingStartDate", this.txtWeldingStartDate.Text.Trim()));
listStr.Add(new SqlParameter("@WeldingEndDate", this.txtWeldingEndDate.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.Grid1.Columns[1].HeaderText = "当日完成达因数";
this.Grid2.Columns[2].HeaderText = "当日完成达因数"; this.Grid2.Columns[2].HeaderText = "当日完成达因数";
this.Grid3.Columns[1].HeaderText = "当日完成达因数"; this.Grid3.Columns[1].HeaderText = "当日完成达因数";
this.Grid3.Columns[3].HeaderText = "当日焊工数量";
this.BtnAnalyse.Hidden = true; this.BtnAnalyse.Hidden = true;
BindGrid1(); BindGrid1();
BindGrid2(this.tvControlItem.SelectedNodeID); BindGrid2(this.tvControlItem.SelectedNodeID);
@ -659,6 +708,7 @@ LEFT JOIN CumulativeStats cs ON uwd.UnitId = cs.UnitId";
this.Grid1.Columns[1].HeaderText = "当期完成达因数"; this.Grid1.Columns[1].HeaderText = "当期完成达因数";
this.Grid2.Columns[2].HeaderText = "当期完成达因数"; this.Grid2.Columns[2].HeaderText = "当期完成达因数";
this.Grid3.Columns[1].HeaderText = "当期完成达因数"; this.Grid3.Columns[1].HeaderText = "当期完成达因数";
this.Grid3.Columns[3].HeaderText = "当期焊工数量";
this.BtnAnalyse.Hidden = false; this.BtnAnalyse.Hidden = false;
} }
} }