This commit is contained in:
高飞 2026-04-15 09:48:55 +08:00
commit 8924a666a7
5 changed files with 88 additions and 23 deletions

View File

@ -462,8 +462,7 @@ namespace BLL
weldingDaily.UnitId = weldTask?.UnitId;
weldingDaily.Tabler = Personid;
weldingDaily.TableDate = Convert.ToDateTime(time).Date;
db.HJGL_WeldingDaily.InsertOnSubmit(weldingDaily);
db.SubmitChanges();
BLL.WeldingDailyService.AddWeldingDaily(weldingDaily);
}
BLL.HJGL_PipelineComponentjointService.UpdateStateByWeldJointId(WeldJointId, (DateTime)weldingDaily.WeldingDate);//更改预制口实际时间和状态
PipelineService.UpdataDateByWeldJointId(WeldJointId);//更改安装口时间和状态

View File

@ -17033,7 +17033,10 @@
</COMReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v18.0\WebApplications\Microsoft.WebApplication.targets" />
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">

View File

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

View File

@ -124,26 +124,39 @@
<f:FormRow>
<Items>
<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="施工单位进度统计"
TitleToolTip="施工单位进度统计" AutoScroll="true">
Layout="Fit" ShowHeader="true" RegionSplitWidth="20px" BodyPadding="1px" Height="215px" Title="进度质量"
TitleToolTip="进度质量" AutoScroll="true">
<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"
EnableColumnLines="true" DataIDField="UnitName" AllowSorting="true" SortField="UnitName" SortDirection="ASC"
PageSize="15">
<Columns>
<f:RenderField HeaderText="施工单位" ColumnID="UnitName" ExpandUnusedSpace="true"
DataField="UnitName" SortField="UnitName" FieldType="String" HeaderTextAlign="Center"
TextAlign="Center" Width="300px">
TextAlign="Center" Width="200px">
</f:RenderField>
<f:RenderField HeaderText="当日完成达因数" ColumnID="TodayFinishSize"
DataField="TodayFinishSize" SortField="TodayFinishSize" FieldType="Double" HeaderTextAlign="Center"
TextAlign="Center" Width="250px">
TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="累计已完成达因数" ColumnID="FinishSize"
DataField="FinishSize" SortField="FinishSize" FieldType="Double" HeaderTextAlign="Center"
TextAlign="Center" Width="250px">
TextAlign="Center" Width="150px">
</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>
</f:Grid>
</Items>

View File

@ -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;
}
}