2023-11-25 12:34:55 +08:00
|
|
|
|
using BLL;
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Data;
|
|
|
|
|
|
using System.Data.SqlClient;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
|
|
|
|
|
|
namespace FineUIPro.Web.common
|
|
|
|
|
|
{
|
|
|
|
|
|
public partial class mainMenu_HJGL3 : PageBase
|
|
|
|
|
|
{
|
|
|
|
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!IsPostBack)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.InitTreeMenu();//加载树
|
2023-11-30 18:46:59 +08:00
|
|
|
|
this.txtWeldingDate.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now);
|
2023-11-25 12:34:55 +08:00
|
|
|
|
BindGrid1();
|
2023-12-04 12:11:39 +08:00
|
|
|
|
BindGrid3();
|
2023-11-25 12:34:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-11-30 18:46:59 +08:00
|
|
|
|
protected void WeldingDateText_OnTextChanged(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
BindGrid1();
|
|
|
|
|
|
BindGrid2(this.tvControlItem.SelectedNodeID);
|
2023-12-04 12:11:39 +08:00
|
|
|
|
BindGrid3();
|
2023-11-30 18:46:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-11-25 12:34:55 +08:00
|
|
|
|
#region 加载树装置-单位-工作区
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 加载树
|
2025-12-23 17:16:35 +08:00
|
|
|
|
/// 优化版本:解决 N+1 查询问题,一次性获取所有管线统计数据
|
2023-11-25 12:34:55 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void InitTreeMenu()
|
|
|
|
|
|
{
|
|
|
|
|
|
this.tvControlItem.Nodes.Clear();
|
|
|
|
|
|
|
|
|
|
|
|
TreeNode rootNode1 = new TreeNode();
|
|
|
|
|
|
rootNode1.NodeID = "1";
|
|
|
|
|
|
rootNode1.Text = "建筑工程";
|
|
|
|
|
|
rootNode1.CommandName = "建筑工程";
|
|
|
|
|
|
rootNode1.Selectable = false;
|
|
|
|
|
|
this.tvControlItem.Nodes.Add(rootNode1);
|
|
|
|
|
|
|
|
|
|
|
|
TreeNode rootNode2 = new TreeNode();
|
|
|
|
|
|
rootNode2.NodeID = "2";
|
|
|
|
|
|
rootNode2.Text = "安装工程";
|
|
|
|
|
|
rootNode2.CommandName = "安装工程";
|
|
|
|
|
|
rootNode2.Expanded = true;
|
|
|
|
|
|
this.tvControlItem.Nodes.Add(rootNode2);
|
|
|
|
|
|
|
2025-12-23 17:16:35 +08:00
|
|
|
|
// 优化:一次性获取所有管线统计数据,避免 N+1 查询
|
2026-04-02 11:55:50 +08:00
|
|
|
|
var pipelineCountByUnitWork = (from x in Funs.DB.View_HJGL_Pipeline
|
2025-12-23 17:16:35 +08:00
|
|
|
|
where x.ProjectId == this.CurrUser.LoginProjectId
|
|
|
|
|
|
group x by x.UnitWorkId into g
|
2026-04-02 11:55:50 +08:00
|
|
|
|
select new { UnitWorkId = g.Key, Count = g.Count(), TotalDin = g.Sum(x => x.TotalDin) })
|
|
|
|
|
|
.ToDictionary(x => x.UnitWorkId, x => new { x.Count, x.TotalDin });
|
2025-12-23 17:16:35 +08:00
|
|
|
|
|
2023-11-25 12:34:55 +08:00
|
|
|
|
var pUnits = (from x in Funs.DB.Project_ProjectUnit where x.ProjectId == this.CurrUser.LoginProjectId select x).ToList();
|
|
|
|
|
|
// 获取当前用户所在单位
|
|
|
|
|
|
var currUnit = pUnits.FirstOrDefault(x => x.UnitId == this.CurrUser.UnitId);
|
|
|
|
|
|
|
|
|
|
|
|
var unitWorkList = (from x in Funs.DB.WBS_UnitWork
|
|
|
|
|
|
where x.ProjectId == this.CurrUser.LoginProjectId
|
|
|
|
|
|
&& x.SuperUnitWork == null && x.UnitId != null && x.ProjectType != null
|
|
|
|
|
|
select x).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
List<Model.WBS_UnitWork> unitWork1 = null;
|
|
|
|
|
|
List<Model.WBS_UnitWork> unitWork2 = null;
|
|
|
|
|
|
|
|
|
|
|
|
unitWork1 = (from x in unitWorkList where x.ProjectType == "1" select x).ToList();
|
|
|
|
|
|
unitWork2 = (from x in unitWorkList where x.ProjectType == "2" select x).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
if (unitWork1.Count() > 0)
|
|
|
|
|
|
{
|
2026-04-02 11:55:50 +08:00
|
|
|
|
foreach (var q in unitWork1)
|
2023-11-25 12:34:55 +08:00
|
|
|
|
{
|
2025-12-23 17:16:35 +08:00
|
|
|
|
// 优化:从内存字典中获取管线数量,避免数据库查询
|
2026-04-02 11:55:50 +08:00
|
|
|
|
int a = pipelineCountByUnitWork.ContainsKey(q.UnitWorkId) ? pipelineCountByUnitWork[q.UnitWorkId].Count : 0;
|
2023-11-25 12:34:55 +08:00
|
|
|
|
var unitNamesUnitIds = BLL.UnitService.getUnitNamesUnitIds(q.UnitId);
|
|
|
|
|
|
TreeNode tn1 = new TreeNode();
|
|
|
|
|
|
tn1.NodeID = q.UnitWorkId;
|
2026-04-03 00:46:38 +08:00
|
|
|
|
tn1.Text = q.UnitWorkName + "【" + a.ToString() + "】" + "管线" ;
|
2023-11-25 12:34:55 +08:00
|
|
|
|
tn1.ToolTip = "施工单位:" + unitNamesUnitIds;
|
|
|
|
|
|
tn1.EnableClickEvent = true;
|
|
|
|
|
|
rootNode1.Nodes.Add(tn1);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (unitWork2.Count() > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var q in unitWork2)
|
|
|
|
|
|
{
|
2025-12-23 17:16:35 +08:00
|
|
|
|
// 优化:从内存字典中获取管线数量,避免数据库查询
|
2026-04-02 11:55:50 +08:00
|
|
|
|
int a = pipelineCountByUnitWork.ContainsKey(q.UnitWorkId) ? pipelineCountByUnitWork[q.UnitWorkId].Count : 0;
|
2023-11-25 12:34:55 +08:00
|
|
|
|
var unitNamesUnitIds = BLL.UnitService.getUnitNamesUnitIds(q.UnitId);
|
|
|
|
|
|
TreeNode tn2 = new TreeNode();
|
|
|
|
|
|
tn2.NodeID = q.UnitWorkId;
|
2026-04-03 00:46:38 +08:00
|
|
|
|
tn2.Text = q.UnitWorkName + "【" + a.ToString() + "】" + "管线" ;
|
2023-11-25 12:34:55 +08:00
|
|
|
|
tn2.ToolTip = "施工单位:" + unitNamesUnitIds;
|
|
|
|
|
|
tn2.EnableClickEvent = true;
|
|
|
|
|
|
rootNode2.Nodes.Add(tn2);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 点击TreeView
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 点击TreeView
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (this.tvControlItem.SelectedNodeID.Length > 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.BindGrid2(this.tvControlItem.SelectedNodeID);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 数据绑定
|
|
|
|
|
|
/// <summary>
|
2025-12-23 17:16:35 +08:00
|
|
|
|
/// 数据绑定 - 项目进度统计
|
|
|
|
|
|
/// 优化版本:使用 CTE 和 JOIN 替代嵌套子查询,提高性能
|
2023-11-25 12:34:55 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void BindGrid1()
|
|
|
|
|
|
{
|
2023-12-04 16:52:05 +08:00
|
|
|
|
string strSql = string.Empty;
|
|
|
|
|
|
List<SqlParameter> listStr = new List<SqlParameter>();
|
|
|
|
|
|
if (this.rbType.SelectedValue == "1")
|
|
|
|
|
|
{
|
2025-12-23 17:16:35 +08:00
|
|
|
|
// 优化:使用 CTE 和 LEFT JOIN 替代嵌套子查询
|
|
|
|
|
|
strSql = @"
|
|
|
|
|
|
WITH AllWeldJoints AS (
|
|
|
|
|
|
-- 所有焊口总量
|
|
|
|
|
|
SELECT ProjectId, SUM(ISNULL(Size, 0)) AS TotalDin
|
|
|
|
|
|
FROM dbo.HJGL_WeldJoint
|
|
|
|
|
|
WHERE ProjectId = @ProjectId
|
|
|
|
|
|
GROUP BY ProjectId
|
|
|
|
|
|
),
|
|
|
|
|
|
TodayWelding AS (
|
|
|
|
|
|
-- 当日焊接记录(返回 WeldingDailyId)
|
|
|
|
|
|
SELECT wd.WeldingDailyId
|
|
|
|
|
|
FROM dbo.HJGL_WeldingDaily wd
|
|
|
|
|
|
WHERE wd.ProjectId = @ProjectId AND wd.WeldingDate = @WeldingDate
|
|
|
|
|
|
),
|
|
|
|
|
|
TodayWeldJoints AS (
|
|
|
|
|
|
-- 当日完成焊口
|
|
|
|
|
|
SELECT jot.ProjectId, SUM(ISNULL(jot.Size, 0)) AS TodayFinishSize
|
|
|
|
|
|
FROM dbo.HJGL_WeldJoint jot
|
|
|
|
|
|
INNER JOIN TodayWelding tw ON jot.WeldingDailyId = tw.WeldingDailyId
|
|
|
|
|
|
WHERE jot.ProjectId = @ProjectId AND jot.WeldingDailyId IS NOT NULL
|
|
|
|
|
|
GROUP BY jot.ProjectId
|
|
|
|
|
|
),
|
|
|
|
|
|
CumulativeWeldJoints AS (
|
|
|
|
|
|
-- 累计完成焊口
|
|
|
|
|
|
SELECT jot.ProjectId, SUM(ISNULL(jot.Size, 0)) AS FinishSize
|
|
|
|
|
|
FROM dbo.HJGL_WeldJoint jot
|
|
|
|
|
|
INNER JOIN dbo.HJGL_WeldingDaily wd ON jot.WeldingDailyId = wd.WeldingDailyId
|
|
|
|
|
|
WHERE jot.ProjectId = @ProjectId AND jot.WeldingDailyId IS NOT NULL AND wd.WeldingDate <= @WeldingDate
|
|
|
|
|
|
GROUP BY jot.ProjectId
|
|
|
|
|
|
)
|
|
|
|
|
|
SELECT b.ProjectId,
|
|
|
|
|
|
ISNULL(aw.TotalDin, 0) AS TotalDin,
|
|
|
|
|
|
ISNULL(tw.TodayFinishSize, 0) AS TodayFinishSize,
|
|
|
|
|
|
ISNULL(cw.FinishSize, 0) AS FinishSize,
|
|
|
|
|
|
CONVERT(NVARCHAR(10), CAST(CASE ISNULL(aw.TotalDin, 0) WHEN 0 THEN 0
|
|
|
|
|
|
ELSE 100.0 * ISNULL(cw.FinishSize, 0) / (1.0 * aw.TotalDin) END AS DECIMAL(8, 2))) + '%' AS Rate
|
|
|
|
|
|
FROM Base_Project b
|
|
|
|
|
|
LEFT JOIN AllWeldJoints aw ON b.ProjectId = aw.ProjectId
|
|
|
|
|
|
LEFT JOIN TodayWeldJoints tw ON b.ProjectId = tw.ProjectId
|
|
|
|
|
|
LEFT JOIN CumulativeWeldJoints cw ON b.ProjectId = cw.ProjectId
|
|
|
|
|
|
WHERE b.ProjectId = @ProjectId";
|
2023-12-04 16:52:05 +08:00
|
|
|
|
listStr.Add(new SqlParameter("@ProjectId", (CurrUser != null) ? CurrUser.LoginProjectId : ""));
|
|
|
|
|
|
listStr.Add(new SqlParameter("@WeldingDate", this.txtWeldingDate.Text.Trim()));
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2025-12-23 17:16:35 +08:00
|
|
|
|
// 优化:使用 CTE 和 LEFT JOIN 替代嵌套子查询(时间段模式)
|
|
|
|
|
|
strSql = @"
|
|
|
|
|
|
WITH AllWeldJoints AS (
|
|
|
|
|
|
SELECT ProjectId, SUM(ISNULL(Size, 0)) AS TotalDin
|
|
|
|
|
|
FROM dbo.HJGL_WeldJoint
|
|
|
|
|
|
WHERE ProjectId = @ProjectId
|
|
|
|
|
|
GROUP BY ProjectId
|
|
|
|
|
|
),
|
|
|
|
|
|
PeriodWeldJoints AS (
|
|
|
|
|
|
SELECT jot.ProjectId, SUM(ISNULL(jot.Size, 0)) AS TodayFinishSize
|
|
|
|
|
|
FROM dbo.HJGL_WeldJoint jot
|
|
|
|
|
|
INNER JOIN dbo.HJGL_WeldingDaily wd ON jot.WeldingDailyId = wd.WeldingDailyId
|
|
|
|
|
|
WHERE jot.ProjectId = @ProjectId AND jot.WeldingDailyId IS NOT NULL
|
|
|
|
|
|
AND wd.WeldingDate >= @WeldingStartDate AND wd.WeldingDate <= @WeldingEndDate
|
|
|
|
|
|
GROUP BY jot.ProjectId
|
|
|
|
|
|
),
|
|
|
|
|
|
CumulativeWeldJoints AS (
|
|
|
|
|
|
SELECT jot.ProjectId, SUM(ISNULL(jot.Size, 0)) AS FinishSize
|
|
|
|
|
|
FROM dbo.HJGL_WeldJoint jot
|
|
|
|
|
|
INNER JOIN dbo.HJGL_WeldingDaily wd ON jot.WeldingDailyId = wd.WeldingDailyId
|
|
|
|
|
|
WHERE jot.ProjectId = @ProjectId AND jot.WeldingDailyId IS NOT NULL AND wd.WeldingDate <= @WeldingEndDate
|
|
|
|
|
|
GROUP BY jot.ProjectId
|
|
|
|
|
|
)
|
|
|
|
|
|
SELECT b.ProjectId,
|
|
|
|
|
|
ISNULL(aw.TotalDin, 0) AS TotalDin,
|
|
|
|
|
|
ISNULL(pw.TodayFinishSize, 0) AS TodayFinishSize,
|
|
|
|
|
|
ISNULL(cw.FinishSize, 0) AS FinishSize,
|
|
|
|
|
|
CONVERT(NVARCHAR(10), CAST(CASE ISNULL(aw.TotalDin, 0) WHEN 0 THEN 0
|
|
|
|
|
|
ELSE 100.0 * ISNULL(cw.FinishSize, 0) / (1.0 * aw.TotalDin) END AS DECIMAL(8, 2))) + '%' AS Rate
|
|
|
|
|
|
FROM Base_Project b
|
|
|
|
|
|
LEFT JOIN AllWeldJoints aw ON b.ProjectId = aw.ProjectId
|
|
|
|
|
|
LEFT JOIN PeriodWeldJoints pw ON b.ProjectId = pw.ProjectId
|
|
|
|
|
|
LEFT JOIN CumulativeWeldJoints cw ON b.ProjectId = cw.ProjectId
|
|
|
|
|
|
WHERE b.ProjectId = @ProjectId";
|
2023-12-04 16:52:05 +08:00
|
|
|
|
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()));
|
|
|
|
|
|
}
|
2023-11-25 12:34:55 +08:00
|
|
|
|
SqlParameter[] parameter = listStr.ToArray();
|
|
|
|
|
|
DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
|
|
|
|
|
|
Grid1.RecordCount = tb.Rows.Count;
|
|
|
|
|
|
tb = GetFilteredTable(Grid1.FilteredData, tb);
|
|
|
|
|
|
var table = GetPagedDataTable(Grid1, tb);
|
|
|
|
|
|
Grid1.DataSource = table;
|
|
|
|
|
|
Grid1.DataBind();
|
2025-12-23 17:16:35 +08:00
|
|
|
|
if (Grid1.Rows.Count > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
decimal totalDin = Funs.GetNewDecimalOrZero(this.Grid1.Rows[0].Values[0].ToString());
|
|
|
|
|
|
decimal finishSize = Funs.GetNewDecimalOrZero(this.Grid1.Rows[0].Values[2].ToString());
|
|
|
|
|
|
decimal notCompleteDin = totalDin - finishSize;
|
|
|
|
|
|
this.lbNotCompleteDinTotal.Text = notCompleteDin.ToString();
|
|
|
|
|
|
}
|
2023-11-25 12:34:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2025-12-23 17:16:35 +08:00
|
|
|
|
/// 数据绑定 - 单位工程进度统计
|
|
|
|
|
|
/// 优化版本:使用 CTE 替代复杂嵌套子查询,提高性能
|
2023-11-25 12:34:55 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void BindGrid2(string unitWorkId)
|
|
|
|
|
|
{
|
2023-12-04 16:52:05 +08:00
|
|
|
|
string strSql = string.Empty;
|
|
|
|
|
|
List<SqlParameter> listStr = new List<SqlParameter>();
|
|
|
|
|
|
if (this.rbType.SelectedValue == "1")
|
|
|
|
|
|
{
|
2025-12-23 17:16:35 +08:00
|
|
|
|
// 优化:使用 CTE 和条件聚合替代 UNION 和嵌套子查询
|
|
|
|
|
|
strSql = @"
|
|
|
|
|
|
WITH UnitWorkData AS (
|
|
|
|
|
|
-- 获取单位工程的管线数据
|
|
|
|
|
|
SELECT p.PipelineId, p.PipeArea, p.UnitWorkId
|
|
|
|
|
|
FROM dbo.HJGL_Pipeline p
|
|
|
|
|
|
WHERE p.UnitWorkId = @UnitWorkId
|
|
|
|
|
|
),
|
|
|
|
|
|
JointData AS (
|
|
|
|
|
|
-- 获取焊口数据并分类
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
j.WeldJointId,
|
|
|
|
|
|
j.Size,
|
|
|
|
|
|
j.WeldingDailyId,
|
|
|
|
|
|
j.JointAttribute,
|
2026-04-03 00:46:38 +08:00
|
|
|
|
j.PipelineId,
|
2025-12-23 17:16:35 +08:00
|
|
|
|
p.PipeArea,
|
|
|
|
|
|
p.UnitWorkId
|
|
|
|
|
|
FROM dbo.HJGL_WeldJoint j
|
|
|
|
|
|
INNER JOIN UnitWorkData p ON j.PipelineId = p.PipelineId
|
|
|
|
|
|
),
|
|
|
|
|
|
WeldingInfo AS (
|
|
|
|
|
|
-- 焊接日期信息
|
|
|
|
|
|
SELECT wd.WeldingDailyId, wd.WeldingDate
|
|
|
|
|
|
FROM dbo.HJGL_WeldingDaily wd
|
|
|
|
|
|
WHERE wd.WeldingDate = @WeldingDate
|
|
|
|
|
|
),
|
|
|
|
|
|
Stats AS (
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
ud.UnitWorkId,
|
|
|
|
|
|
-- 工厂预制总量
|
|
|
|
|
|
SUM(CASE WHEN ud.PipeArea = '1' AND jd.JointAttribute = '预制口' THEN ISNULL(jd.Size, 0) ELSE 0 END) AS FactoryTotal,
|
|
|
|
|
|
-- 现场施工总量 (PipeArea='2' 或 PipeArea='1' 且为安装口)
|
|
|
|
|
|
SUM(CASE WHEN ud.PipeArea = '2' OR (ud.PipeArea = '1' AND jd.JointAttribute = '安装口') THEN ISNULL(jd.Size, 0) ELSE 0 END) AS SiteTotal,
|
|
|
|
|
|
-- 工厂预制当日完成
|
|
|
|
|
|
SUM(CASE WHEN ud.PipeArea = '1' AND jd.JointAttribute = '预制口' AND jd.WeldingDailyId IS NOT NULL AND wi.WeldingDailyId IS NOT NULL THEN ISNULL(jd.Size, 0) ELSE 0 END) AS FactoryToday,
|
|
|
|
|
|
-- 现场施工当日完成
|
|
|
|
|
|
SUM(CASE WHEN (ud.PipeArea = '2' OR (ud.PipeArea = '1' AND jd.JointAttribute = '安装口')) AND jd.WeldingDailyId IS NOT NULL AND wi.WeldingDailyId IS NOT NULL THEN ISNULL(jd.Size, 0) ELSE 0 END) AS SiteToday,
|
|
|
|
|
|
-- 工厂预制累计完成
|
|
|
|
|
|
SUM(CASE WHEN ud.PipeArea = '1' AND jd.JointAttribute = '预制口' AND jd.WeldingDailyId IS NOT NULL THEN ISNULL(jd.Size, 0) ELSE 0 END) AS FactoryCumulative,
|
|
|
|
|
|
-- 现场施工累计完成
|
|
|
|
|
|
SUM(CASE WHEN (ud.PipeArea = '2' OR (ud.PipeArea = '1' AND jd.JointAttribute = '安装口')) AND jd.WeldingDailyId IS NOT NULL THEN ISNULL(jd.Size, 0) ELSE 0 END) AS SiteCumulative
|
|
|
|
|
|
FROM UnitWorkData ud
|
|
|
|
|
|
LEFT JOIN JointData jd ON ud.PipelineId = jd.PipelineId
|
|
|
|
|
|
LEFT JOIN WeldingInfo wi ON jd.WeldingDailyId = wi.WeldingDailyId
|
|
|
|
|
|
GROUP BY ud.UnitWorkId
|
|
|
|
|
|
)
|
|
|
|
|
|
SELECT '工厂预制焊口' AS PipeArea, UnitWorkId,
|
|
|
|
|
|
CAST(ISNULL(FactoryTotal, 0) AS DECIMAL(12, 3)) AS TotalDin,
|
|
|
|
|
|
CAST(ISNULL(FactoryToday, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
|
|
|
|
|
|
CAST(ISNULL(FactoryCumulative, 0) AS DECIMAL(12, 3)) AS FinishSize,
|
|
|
|
|
|
CONVERT(NVARCHAR(10), CAST(CASE ISNULL(FactoryTotal, 0) WHEN 0 THEN 0
|
|
|
|
|
|
ELSE 100.0 * ISNULL(FactoryCumulative, 0) / (1.0 * FactoryTotal) END AS DECIMAL(8, 2))) + '%' AS Rate
|
|
|
|
|
|
FROM Stats
|
|
|
|
|
|
WHERE UnitWorkId = @UnitWorkId
|
|
|
|
|
|
UNION ALL
|
|
|
|
|
|
SELECT '现场施工焊口' AS PipeArea, UnitWorkId,
|
|
|
|
|
|
CAST(ISNULL(SiteTotal, 0) AS DECIMAL(12, 3)) AS TotalDin,
|
|
|
|
|
|
CAST(ISNULL(SiteToday, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
|
|
|
|
|
|
CAST(ISNULL(SiteCumulative, 0) AS DECIMAL(12, 3)) AS FinishSize,
|
|
|
|
|
|
CONVERT(NVARCHAR(10), CAST(CASE ISNULL(SiteTotal, 0) WHEN 0 THEN 0
|
|
|
|
|
|
ELSE 100.0 * ISNULL(SiteCumulative, 0) / (1.0 * SiteTotal) END AS DECIMAL(8, 2))) + '%' AS Rate
|
|
|
|
|
|
FROM Stats
|
|
|
|
|
|
WHERE UnitWorkId = @UnitWorkId";
|
2023-12-04 16:52:05 +08:00
|
|
|
|
listStr.Add(new SqlParameter("@UnitWorkId", unitWorkId));
|
|
|
|
|
|
listStr.Add(new SqlParameter("@WeldingDate", this.txtWeldingDate.Text.Trim()));
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2025-12-23 17:16:35 +08:00
|
|
|
|
// 优化:使用 CTE 和条件聚合(时间段模式)
|
|
|
|
|
|
strSql = @"
|
|
|
|
|
|
WITH UnitWorkData AS (
|
|
|
|
|
|
SELECT p.PipelineId, p.PipeArea, p.UnitWorkId
|
|
|
|
|
|
FROM dbo.HJGL_Pipeline p
|
|
|
|
|
|
WHERE p.UnitWorkId = @UnitWorkId
|
|
|
|
|
|
),
|
|
|
|
|
|
JointData AS (
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
j.WeldJointId,
|
|
|
|
|
|
j.Size,
|
|
|
|
|
|
j.WeldingDailyId,
|
|
|
|
|
|
j.JointAttribute,
|
2026-04-03 00:46:38 +08:00
|
|
|
|
j.PipelineId,
|
2025-12-23 17:16:35 +08:00
|
|
|
|
p.PipeArea,
|
|
|
|
|
|
p.UnitWorkId
|
|
|
|
|
|
FROM dbo.HJGL_WeldJoint j
|
|
|
|
|
|
INNER JOIN UnitWorkData p ON j.PipelineId = p.PipelineId
|
|
|
|
|
|
),
|
|
|
|
|
|
WeldingInfo AS (
|
|
|
|
|
|
SELECT wd.WeldingDailyId, wd.WeldingDate
|
|
|
|
|
|
FROM dbo.HJGL_WeldingDaily wd
|
|
|
|
|
|
WHERE wd.WeldingDate >= @WeldingStartDate AND wd.WeldingDate <= @WeldingEndDate
|
|
|
|
|
|
),
|
|
|
|
|
|
Stats AS (
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
ud.UnitWorkId,
|
|
|
|
|
|
SUM(CASE WHEN ud.PipeArea = '1' AND jd.JointAttribute = '预制口' THEN ISNULL(jd.Size, 0) ELSE 0 END) AS FactoryTotal,
|
|
|
|
|
|
SUM(CASE WHEN ud.PipeArea = '2' OR (ud.PipeArea = '1' AND jd.JointAttribute = '安装口') THEN ISNULL(jd.Size, 0) ELSE 0 END) AS SiteTotal,
|
|
|
|
|
|
SUM(CASE WHEN ud.PipeArea = '1' AND jd.JointAttribute = '预制口' AND jd.WeldingDailyId IS NOT NULL AND wi.WeldingDailyId IS NOT NULL THEN ISNULL(jd.Size, 0) ELSE 0 END) AS FactoryToday,
|
|
|
|
|
|
SUM(CASE WHEN (ud.PipeArea = '2' OR (ud.PipeArea = '1' AND jd.JointAttribute = '安装口')) AND jd.WeldingDailyId IS NOT NULL AND wi.WeldingDailyId IS NOT NULL THEN ISNULL(jd.Size, 0) ELSE 0 END) AS SiteToday,
|
|
|
|
|
|
SUM(CASE WHEN ud.PipeArea = '1' AND jd.JointAttribute = '预制口' AND jd.WeldingDailyId IS NOT NULL AND wi.WeldingDate <= @WeldingEndDate THEN ISNULL(jd.Size, 0) ELSE 0 END) AS FactoryCumulative,
|
|
|
|
|
|
SUM(CASE WHEN (ud.PipeArea = '2' OR (ud.PipeArea = '1' AND jd.JointAttribute = '安装口')) AND jd.WeldingDailyId IS NOT NULL AND wi.WeldingDate <= @WeldingEndDate THEN ISNULL(jd.Size, 0) ELSE 0 END) AS SiteCumulative
|
|
|
|
|
|
FROM UnitWorkData ud
|
|
|
|
|
|
LEFT JOIN JointData jd ON ud.PipelineId = jd.PipelineId
|
|
|
|
|
|
LEFT JOIN WeldingInfo wi ON jd.WeldingDailyId = wi.WeldingDailyId
|
|
|
|
|
|
GROUP BY ud.UnitWorkId
|
|
|
|
|
|
)
|
|
|
|
|
|
SELECT '工厂预制焊口' AS PipeArea, UnitWorkId,
|
|
|
|
|
|
CAST(ISNULL(FactoryTotal, 0) AS DECIMAL(12, 3)) AS TotalDin,
|
|
|
|
|
|
CAST(ISNULL(FactoryToday, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
|
|
|
|
|
|
CAST(ISNULL(FactoryCumulative, 0) AS DECIMAL(12, 3)) AS FinishSize,
|
|
|
|
|
|
CONVERT(NVARCHAR(10), CAST(CASE ISNULL(FactoryTotal, 0) WHEN 0 THEN 0
|
|
|
|
|
|
ELSE 100.0 * ISNULL(FactoryCumulative, 0) / (1.0 * FactoryTotal) END AS DECIMAL(8, 2))) + '%' AS Rate
|
|
|
|
|
|
FROM Stats
|
|
|
|
|
|
WHERE UnitWorkId = @UnitWorkId
|
|
|
|
|
|
UNION ALL
|
|
|
|
|
|
SELECT '现场施工焊口' AS PipeArea, UnitWorkId,
|
|
|
|
|
|
CAST(ISNULL(SiteTotal, 0) AS DECIMAL(12, 3)) AS TotalDin,
|
|
|
|
|
|
CAST(ISNULL(SiteToday, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
|
|
|
|
|
|
CAST(ISNULL(SiteCumulative, 0) AS DECIMAL(12, 3)) AS FinishSize,
|
|
|
|
|
|
CONVERT(NVARCHAR(10), CAST(CASE ISNULL(SiteTotal, 0) WHEN 0 THEN 0
|
|
|
|
|
|
ELSE 100.0 * ISNULL(SiteCumulative, 0) / (1.0 * SiteTotal) END AS DECIMAL(8, 2))) + '%' AS Rate
|
|
|
|
|
|
FROM Stats
|
|
|
|
|
|
WHERE UnitWorkId = @UnitWorkId";
|
2023-12-04 16:52:05 +08:00
|
|
|
|
listStr.Add(new SqlParameter("@UnitWorkId", unitWorkId));
|
|
|
|
|
|
listStr.Add(new SqlParameter("@WeldingStartDate", this.txtWeldingStartDate.Text.Trim()));
|
|
|
|
|
|
listStr.Add(new SqlParameter("@WeldingEndDate", this.txtWeldingEndDate.Text.Trim()));
|
|
|
|
|
|
}
|
2023-11-25 12:34:55 +08:00
|
|
|
|
SqlParameter[] parameter = listStr.ToArray();
|
|
|
|
|
|
DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
|
|
|
|
|
|
Grid2.RecordCount = tb.Rows.Count;
|
|
|
|
|
|
tb = GetFilteredTable(Grid2.FilteredData, tb);
|
|
|
|
|
|
var table = GetPagedDataTable(Grid2, tb);
|
|
|
|
|
|
Grid2.DataSource = table;
|
|
|
|
|
|
Grid2.DataBind();
|
2023-11-30 18:46:59 +08:00
|
|
|
|
if (Grid2.RecordCount > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
decimal totalDin1 = Funs.GetNewDecimalOrZero(this.Grid2.Rows[0].Values[1].ToString());
|
2023-12-01 12:11:50 +08:00
|
|
|
|
decimal finishSize1 = Funs.GetNewDecimalOrZero(this.Grid2.Rows[0].Values[3].ToString());
|
2023-11-30 18:46:59 +08:00
|
|
|
|
decimal notCompleteDin1 = totalDin1 - finishSize1;
|
|
|
|
|
|
this.lbNotCompleteDin1.Text = notCompleteDin1.ToString();
|
2025-12-23 17:16:35 +08:00
|
|
|
|
if (Grid2.Rows.Count > 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
decimal totalDin2 = Funs.GetNewDecimalOrZero(this.Grid2.Rows[1].Values[1].ToString());
|
|
|
|
|
|
decimal finishSize2 = Funs.GetNewDecimalOrZero(this.Grid2.Rows[1].Values[3].ToString());
|
|
|
|
|
|
decimal notCompleteDin2 = totalDin2 - finishSize2;
|
|
|
|
|
|
this.lbNotCompleteDin2.Text = notCompleteDin2.ToString();
|
|
|
|
|
|
}
|
2023-11-30 18:46:59 +08:00
|
|
|
|
}
|
2023-11-25 12:34:55 +08:00
|
|
|
|
}
|
2023-12-04 12:11:39 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2025-12-23 17:16:35 +08:00
|
|
|
|
/// 数据绑定 - 施工单位进度统计
|
|
|
|
|
|
/// 优化版本:使用 CTE 和 JOIN 替代嵌套子查询
|
2023-12-04 12:11:39 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void BindGrid3()
|
|
|
|
|
|
{
|
2023-12-04 16:52:05 +08:00
|
|
|
|
string strSql = string.Empty;
|
|
|
|
|
|
List<SqlParameter> listStr = new List<SqlParameter>();
|
|
|
|
|
|
if (this.rbType.SelectedValue == "1")
|
|
|
|
|
|
{
|
2026-04-13 21:20:58 +08:00
|
|
|
|
// 优化:使用 CTE 和聚合替代嵌套子查询,增加焊工数量、焊工日功效、焊接一次合格率
|
2025-12-23 17:16:35 +08:00
|
|
|
|
strSql = @"
|
|
|
|
|
|
WITH UnitWeldingDaily AS (
|
|
|
|
|
|
-- 获取项目的所有焊接日报记录
|
|
|
|
|
|
SELECT DISTINCT wd.UnitId, u.UnitName
|
|
|
|
|
|
FROM dbo.HJGL_WeldingDaily wd
|
|
|
|
|
|
INNER JOIN Base_Unit u ON wd.UnitId = u.UnitId
|
|
|
|
|
|
WHERE wd.ProjectId = @ProjectId
|
|
|
|
|
|
),
|
|
|
|
|
|
TodayStats AS (
|
2026-04-13 21:20:58 +08:00
|
|
|
|
-- 当日完成统计(含焊工数量)
|
|
|
|
|
|
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
|
2025-12-23 17:16:35 +08:00
|
|
|
|
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
|
|
|
|
|
|
GROUP BY wd.UnitId
|
|
|
|
|
|
),
|
|
|
|
|
|
CumulativeStats AS (
|
|
|
|
|
|
-- 累计完成统计
|
|
|
|
|
|
SELECT wd.UnitId, SUM(ISNULL(jot.Size, 0)) AS FinishSize
|
|
|
|
|
|
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
|
|
|
|
|
|
GROUP BY wd.UnitId
|
2026-04-13 21:20:58 +08:00
|
|
|
|
),
|
|
|
|
|
|
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
|
2025-12-23 17:16:35 +08:00
|
|
|
|
)
|
|
|
|
|
|
SELECT uwd.UnitName,
|
|
|
|
|
|
CAST(ISNULL(ts.TodayFinishSize, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
|
2026-04-13 21:20:58 +08:00
|
|
|
|
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
|
2025-12-23 17:16:35 +08:00
|
|
|
|
FROM UnitWeldingDaily uwd
|
|
|
|
|
|
LEFT JOIN TodayStats ts ON uwd.UnitId = ts.UnitId
|
2026-04-13 21:20:58 +08:00
|
|
|
|
LEFT JOIN CumulativeStats cs ON uwd.UnitId = cs.UnitId
|
|
|
|
|
|
LEFT JOIN NDERates nr ON uwd.UnitId = nr.UnitId";
|
2023-12-04 16:52:05 +08:00
|
|
|
|
listStr.Add(new SqlParameter("@ProjectId", (CurrUser != null) ? CurrUser.LoginProjectId : ""));
|
|
|
|
|
|
listStr.Add(new SqlParameter("@WeldingDate", this.txtWeldingDate.Text.Trim()));
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2026-04-13 21:20:58 +08:00
|
|
|
|
// 优化:使用 CTE 和聚合(时间段模式),增加焊工数量、焊工日功效、焊接一次合格率
|
2025-12-23 17:16:35 +08:00
|
|
|
|
strSql = @"
|
|
|
|
|
|
WITH UnitWeldingDaily AS (
|
|
|
|
|
|
SELECT DISTINCT wd.UnitId, u.UnitName
|
|
|
|
|
|
FROM dbo.HJGL_WeldingDaily wd
|
|
|
|
|
|
INNER JOIN Base_Unit u ON wd.UnitId = u.UnitId
|
|
|
|
|
|
WHERE wd.ProjectId = @ProjectId
|
|
|
|
|
|
),
|
|
|
|
|
|
PeriodStats AS (
|
2026-04-13 21:20:58 +08:00
|
|
|
|
-- 时间段完成统计(含焊工数量)
|
|
|
|
|
|
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
|
2025-12-23 17:16:35 +08:00
|
|
|
|
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
|
|
|
|
|
|
GROUP BY wd.UnitId
|
|
|
|
|
|
),
|
|
|
|
|
|
CumulativeStats AS (
|
|
|
|
|
|
-- 累计完成统计
|
|
|
|
|
|
SELECT wd.UnitId, SUM(ISNULL(jot.Size, 0)) AS FinishSize
|
|
|
|
|
|
FROM dbo.HJGL_WeldingDaily wd
|
|
|
|
|
|
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
|
2026-04-13 21:20:58 +08:00
|
|
|
|
),
|
|
|
|
|
|
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
|
2025-12-23 17:16:35 +08:00
|
|
|
|
)
|
|
|
|
|
|
SELECT uwd.UnitName,
|
|
|
|
|
|
CAST(ISNULL(ps.TodayFinishSize, 0) AS DECIMAL(12, 3)) AS TodayFinishSize,
|
2026-04-13 21:20:58 +08:00
|
|
|
|
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
|
2025-12-23 17:16:35 +08:00
|
|
|
|
FROM UnitWeldingDaily uwd
|
|
|
|
|
|
LEFT JOIN PeriodStats ps ON uwd.UnitId = ps.UnitId
|
2026-04-13 21:20:58 +08:00
|
|
|
|
LEFT JOIN CumulativeStats cs ON uwd.UnitId = cs.UnitId
|
|
|
|
|
|
LEFT JOIN NDERates nr ON uwd.UnitId = nr.UnitId";
|
2023-12-04 16:52:05 +08:00
|
|
|
|
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()));
|
|
|
|
|
|
}
|
2023-12-04 12:11:39 +08:00
|
|
|
|
SqlParameter[] parameter = listStr.ToArray();
|
|
|
|
|
|
DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
|
|
|
|
|
|
Grid3.RecordCount = tb.Rows.Count;
|
|
|
|
|
|
tb = GetFilteredTable(Grid3.FilteredData, tb);
|
|
|
|
|
|
var table = GetPagedDataTable(Grid3, tb);
|
|
|
|
|
|
Grid3.DataSource = table;
|
|
|
|
|
|
Grid3.DataBind();
|
|
|
|
|
|
}
|
2023-11-25 12:34:55 +08:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
2023-11-27 16:06:24 +08:00
|
|
|
|
protected void btnQuery1_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (this.tvControlItem.SelectedNodeID.Length > 1)
|
|
|
|
|
|
{
|
2023-11-30 18:46:59 +08:00
|
|
|
|
if (string.IsNullOrEmpty(this.txtPlanEndDate1.Text.Trim()))
|
2023-11-27 16:06:24 +08:00
|
|
|
|
{
|
2023-11-30 18:46:59 +08:00
|
|
|
|
ShowNotify("请输入计划完成日期!", MessageBoxIcon.Warning);
|
2023-11-27 16:06:24 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtWorkEfficiency1.Text.Trim()))
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("请输入日工效!", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
decimal totalDin = Funs.GetNewDecimalOrZero(this.Grid2.Rows[0].Values[1].ToString());
|
2023-12-01 12:11:50 +08:00
|
|
|
|
decimal finishSize = Funs.GetNewDecimalOrZero(this.Grid2.Rows[0].Values[3].ToString());
|
2023-11-27 16:06:24 +08:00
|
|
|
|
decimal notCompleteDin = totalDin - finishSize;
|
|
|
|
|
|
this.lbNotCompleteDin1.Text = notCompleteDin.ToString();
|
2023-11-30 18:46:59 +08:00
|
|
|
|
TimeSpan ts = (TimeSpan)(Funs.GetNewDateTime(this.txtPlanEndDate1.Text.Trim()) - Funs.GetNewDateTime(this.txtWeldingDate.Text.Trim()));
|
|
|
|
|
|
decimal leaveDay = Convert.ToDecimal(ts.Days);
|
2023-11-27 16:06:24 +08:00
|
|
|
|
decimal workEfficiency = Funs.GetNewDecimalOrZero(this.txtWorkEfficiency1.Text.Trim());
|
|
|
|
|
|
if (notCompleteDin > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (leaveDay == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("剩余工期(天)为0!", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (workEfficiency == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("日工效为0!", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2023-11-30 18:46:59 +08:00
|
|
|
|
this.lbDayNeedSize1.Text = Convert.ToInt32(Math.Ceiling(notCompleteDin / leaveDay)).ToString();
|
2023-11-27 16:06:24 +08:00
|
|
|
|
this.lbNeedWelderNum1.Text = Convert.ToInt32(Math.Ceiling(notCompleteDin / leaveDay / workEfficiency)).ToString();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("工厂预制未完成达因为0!", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("请选择单位工程", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
protected void btnQuery2_Click(object sender, EventArgs e)
|
2023-11-25 12:34:55 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (this.tvControlItem.SelectedNodeID.Length > 1)
|
|
|
|
|
|
{
|
2023-11-30 18:46:59 +08:00
|
|
|
|
if (string.IsNullOrEmpty(this.txtPlanEndDate2.Text.Trim()))
|
2023-11-25 12:34:55 +08:00
|
|
|
|
{
|
2023-11-30 18:46:59 +08:00
|
|
|
|
ShowNotify("请输入计划完成日期!", MessageBoxIcon.Warning);
|
2023-11-25 12:34:55 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
2023-11-30 18:46:59 +08:00
|
|
|
|
if (string.IsNullOrEmpty(this.txtWorkEfficiency2.Text.Trim()))
|
2023-11-25 12:34:55 +08:00
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("请输入日工效!", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2023-11-27 16:06:24 +08:00
|
|
|
|
decimal totalDin = Funs.GetNewDecimalOrZero(this.Grid2.Rows[1].Values[1].ToString());
|
2023-12-01 12:11:50 +08:00
|
|
|
|
decimal finishSize = Funs.GetNewDecimalOrZero(this.Grid2.Rows[1].Values[3].ToString());
|
2023-11-25 12:34:55 +08:00
|
|
|
|
decimal notCompleteDin = totalDin - finishSize;
|
2023-11-27 16:06:24 +08:00
|
|
|
|
this.lbNotCompleteDin2.Text = notCompleteDin.ToString();
|
2023-11-30 18:46:59 +08:00
|
|
|
|
TimeSpan ts = (TimeSpan)(Funs.GetNewDateTime(this.txtPlanEndDate2.Text.Trim()) - Funs.GetNewDateTime(this.txtWeldingDate.Text.Trim()));
|
|
|
|
|
|
decimal leaveDay = Convert.ToDecimal(ts.Days);
|
2023-11-27 16:06:24 +08:00
|
|
|
|
decimal workEfficiency = Funs.GetNewDecimalOrZero(this.txtWorkEfficiency2.Text.Trim());
|
2023-11-25 12:34:55 +08:00
|
|
|
|
if (notCompleteDin > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (leaveDay == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("剩余工期(天)为0!", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (workEfficiency == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("日工效为0!", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2023-11-30 18:46:59 +08:00
|
|
|
|
this.lbDayNeedSize2.Text = Convert.ToInt32(Math.Ceiling(notCompleteDin / leaveDay)).ToString();
|
2023-11-27 16:06:24 +08:00
|
|
|
|
this.lbNeedWelderNum2.Text = Convert.ToInt32(Math.Ceiling(notCompleteDin / leaveDay / workEfficiency)).ToString();
|
2023-11-25 12:34:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2023-12-01 12:56:11 +08:00
|
|
|
|
ShowNotify("现场施工未完成达因为0!", MessageBoxIcon.Warning);
|
2023-11-25 12:34:55 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("请选择单位工程", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-11-26 17:43:05 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
protected void btnQueryTotal_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
2023-11-30 18:46:59 +08:00
|
|
|
|
if (string.IsNullOrEmpty(this.txtPlanEndDate.Text.Trim()))
|
2023-11-26 17:43:05 +08:00
|
|
|
|
{
|
2023-11-30 18:46:59 +08:00
|
|
|
|
ShowNotify("请输入计划完成日期!", MessageBoxIcon.Warning);
|
2023-11-26 17:43:05 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(this.txtWorkEfficiencyTotal.Text.Trim()))
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("请输入日工效!", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
decimal totalDin = Funs.GetNewDecimalOrZero(this.Grid1.Rows[0].Values[0].ToString());
|
2023-12-01 12:11:50 +08:00
|
|
|
|
decimal finishSize = Funs.GetNewDecimalOrZero(this.Grid1.Rows[0].Values[2].ToString());
|
2023-11-26 17:43:05 +08:00
|
|
|
|
decimal notCompleteDin = totalDin - finishSize;
|
2023-12-04 16:52:05 +08:00
|
|
|
|
TimeSpan ts = (TimeSpan)(Funs.GetNewDateTime(this.txtPlanEndDate.Text.Trim()) - Funs.GetNewDateTime(this.txtWeldingDate.Text.Trim()));
|
2023-11-30 18:46:59 +08:00
|
|
|
|
decimal leaveDay = Convert.ToDecimal(ts.Days);
|
2023-11-26 17:43:05 +08:00
|
|
|
|
decimal workEfficiency = Funs.GetNewDecimalOrZero(this.txtWorkEfficiencyTotal.Text.Trim());
|
|
|
|
|
|
if (notCompleteDin > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (leaveDay == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("剩余工期(天)为0!", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (workEfficiency == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("日工效为0!", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2023-11-30 18:46:59 +08:00
|
|
|
|
this.lbDayNeedSize.Text = Convert.ToInt32(Math.Ceiling(notCompleteDin / leaveDay)).ToString();
|
2023-11-26 17:43:05 +08:00
|
|
|
|
this.lbNeedWelderNumTotal.Text = Convert.ToInt32(Math.Ceiling(notCompleteDin / leaveDay / workEfficiency)).ToString();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("未完成达因为0!", MessageBoxIcon.Warning);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-12-04 16:52:05 +08:00
|
|
|
|
|
|
|
|
|
|
protected void rbType_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (this.rbType.SelectedValue == "1")
|
|
|
|
|
|
{
|
|
|
|
|
|
this.txtWeldingDate.Hidden = false;
|
|
|
|
|
|
this.txtWeldingStartDate.Hidden = true;
|
|
|
|
|
|
this.txtWeldingEndDate.Hidden = true;
|
|
|
|
|
|
this.Grid1.Columns[1].HeaderText = "当日完成达因数";
|
|
|
|
|
|
this.Grid2.Columns[2].HeaderText = "当日完成达因数";
|
|
|
|
|
|
this.Grid3.Columns[1].HeaderText = "当日完成达因数";
|
2026-04-13 21:20:58 +08:00
|
|
|
|
this.Grid3.Columns[3].HeaderText = "当日焊工数量";
|
2023-12-04 16:52:05 +08:00
|
|
|
|
this.BtnAnalyse.Hidden = true;
|
|
|
|
|
|
BindGrid1();
|
|
|
|
|
|
BindGrid2(this.tvControlItem.SelectedNodeID);
|
|
|
|
|
|
BindGrid3();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
this.txtWeldingDate.Hidden = true;
|
|
|
|
|
|
this.txtWeldingStartDate.Hidden = false;
|
|
|
|
|
|
this.txtWeldingEndDate.Hidden = false;
|
|
|
|
|
|
this.Grid1.Columns[1].HeaderText = "当期完成达因数";
|
|
|
|
|
|
this.Grid2.Columns[2].HeaderText = "当期完成达因数";
|
|
|
|
|
|
this.Grid3.Columns[1].HeaderText = "当期完成达因数";
|
2026-04-13 21:20:58 +08:00
|
|
|
|
this.Grid3.Columns[3].HeaderText = "当期焊工数量";
|
2023-12-04 16:52:05 +08:00
|
|
|
|
this.BtnAnalyse.Hidden = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 统计
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
protected void BtnAnalyse_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!string.IsNullOrEmpty(this.txtWeldingStartDate.Text.Trim()) && !string.IsNullOrEmpty(this.txtWeldingEndDate.Text.Trim()))
|
|
|
|
|
|
{
|
|
|
|
|
|
BindGrid1();
|
|
|
|
|
|
BindGrid2(this.tvControlItem.SelectedNodeID);
|
|
|
|
|
|
BindGrid3();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
ShowNotify("请选择开始日期和结束日期!", MessageBoxIcon.Warning);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-11-25 12:34:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|