CNCEC_SUBQHSE_WUHUAN/SGGL/FineUIPro.Web/JDGL/SGManPower/ManPowerWorkChart.aspx.cs

183 lines
7.5 KiB
C#
Raw Normal View History

2025-08-11 14:21:24 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;
using System.Data;
using System.Data.SqlClient;
namespace FineUIPro.Web.JDGL.SGManPower
{
public partial class ManPowerWorkChart : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 初始化图表数据
InitializeChartData();
}
}
private void InitializeChartData()
{
try
{
// 获取查询参数
string unitId = Request.Params["UnitId"];
string startTime = Request.Params["StartTime"];
string endTime = Request.Params["EndTime"];
string workPostId = Request.Params["WorkPostId"];
2025-08-21 11:37:06 +08:00
string unitWorkId = Request.Params["UnitWorkId"];
2025-08-11 14:21:24 +08:00
// 检查必要参数
if (string.IsNullOrEmpty(startTime) || string.IsNullOrEmpty(endTime))
{
ShowNotify("缺少必要的参数,无法生成图表", MessageBoxIcon.Warning);
return;
}
DateTime startDate = Convert.ToDateTime(startTime);
DateTime endDate = Convert.ToDateTime(endTime);
// 使用原生SQL查询直接在数据库中进行聚合计算提高性能
string strSql = @"
2025-08-21 11:37:06 +08:00
SELECT e.UnitId, e.PostId, e.RecordDate, p.WorkAreaId as UnitWorkId
FROM T_d_EmployInOutRecord e INNER JOIN SitePerson_Person p ON e.IDCardNo = p.IdentityCard AND e.ProjectId = p.ProjectId
WHERE e.PostId IS NOT NULL AND e.PostId != ''
AND e.ProjectId = @ProjectId
AND e.RecordDate >= @StartDate
AND e.RecordDate <= @EndDate";
2025-08-11 14:21:24 +08:00
var parameters = new List<SqlParameter>
{
new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId),
new SqlParameter("@StartDate", startDate),
new SqlParameter("@EndDate", endDate)
};
// 添加单位筛选条件
if (!string.IsNullOrEmpty(unitId) && unitId != Const._Null)
{
2025-08-21 11:37:06 +08:00
strSql += " AND e.UnitId = @UnitId";
2025-08-11 14:21:24 +08:00
parameters.Add(new SqlParameter("@UnitId", unitId));
}
// 添加岗位筛选条件
if (!string.IsNullOrEmpty(workPostId) && workPostId != Const._Null)
{
2025-08-21 11:37:06 +08:00
strSql += " AND e.PostId = @WorkPostId";
2025-08-11 14:21:24 +08:00
parameters.Add(new SqlParameter("@WorkPostId", workPostId));
}
// 执行查询
var dt = SQLHelper.GetDataTableRunText(strSql, parameters.ToArray());
2025-08-21 11:37:06 +08:00
// 创建一个新的DataTable来存储处理后的数据
DataTable processedDt = dt.Clone();
foreach (System.Data.DataRow row in dt.Rows)
{
string ids = row["UnitWorkId"] != DBNull.Value ? row["UnitWorkId"].ToString() : string.Empty;
if (!string.IsNullOrEmpty(ids))
{
string[] unitWorkIdArray = ids.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string id in unitWorkIdArray)
{
// 往processedDt里面添加数据每个UnitWorkId一行
DataRow newRow = processedDt.NewRow();
newRow["UnitId"] = row["UnitId"];
newRow["PostId"] = row["PostId"];
newRow["RecordDate"] = row["RecordDate"];
newRow["UnitWorkId"] = id.Trim();
processedDt.Rows.Add(newRow);
}
}
else
{
DataRow newRow = processedDt.NewRow();
newRow["UnitId"] = row["UnitId"];
newRow["PostId"] = row["PostId"];
newRow["RecordDate"] = row["RecordDate"];
newRow["UnitWorkId"] = string.Empty;
processedDt.Rows.Add(newRow);
}
}
// 确定要用于后续处理的数据源
IEnumerable<DataRow> dataSource = processedDt.AsEnumerable();
// 如果选择了特定的装置进行筛选
if (!string.IsNullOrEmpty(unitWorkId) && unitWorkId != Const._Null)
{
dataSource = dataSource.Where(x => x["UnitWorkId"] != DBNull.Value && x["UnitWorkId"].ToString() == unitWorkId);
}
//针对dt中的数据进行分组
var data = dataSource
.GroupBy(row => new {
RecordDate = row["RecordDate"]
}).Select(group => new
{
RecordDate = group.Key.RecordDate,
RecordCount = group.Count()
}).ToList();
2025-08-11 14:21:24 +08:00
// 如果没有数据,显示提示信息
2025-08-21 11:37:06 +08:00
if (data.Count == 0)
2025-08-11 14:21:24 +08:00
{
ShowNotify("在指定时间范围内没有找到人力统计数据", MessageBoxIcon.Warning);
return;
}
// 根据数据点数量动态调整图表宽度,确保每个数据点有足够的显示空间
2025-08-21 11:37:06 +08:00
int chartWidth = Math.Max(1000, data.Count * 50); // 每个数据点至少50像素宽最小1000像素
2025-08-11 14:21:24 +08:00
// 创建图表数据对象
Model.DataSourceChart dataSourceChart = new Model.DataSourceChart
{
Title = "现场考勤人力统计图表",
ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Column,
Width = chartWidth,
Height = 500,
IsNotEnable3D = false
};
// 创建数据系列
Model.DataSourceTeam dataSourceTeam = new Model.DataSourceTeam
{
DataPointName = "人员数量",
DataSourcePoints = new List<Model.DataSourcePoint>()
};
// 添加数据点
2025-08-21 11:37:06 +08:00
foreach (var item in data)
2025-08-11 14:21:24 +08:00
{
2025-08-21 11:37:06 +08:00
if (item.RecordDate != null)
2025-08-11 14:21:24 +08:00
{
2025-08-21 11:37:06 +08:00
DateTime recordDate = Convert.ToDateTime(item.RecordDate);
2025-08-11 14:21:24 +08:00
Model.DataSourcePoint point = new Model.DataSourcePoint
{
PointText = recordDate.ToString("MM-dd"),
2025-08-21 11:37:06 +08:00
PointValue = item.RecordCount.ToString()
2025-08-11 14:21:24 +08:00
};
dataSourceTeam.DataSourcePoints.Add(point);
}
}
dataSourceChart.DataSourceTeams = new List<Model.DataSourceTeam> { dataSourceTeam };
// 生成图表
Chart1.CreateChart(dataSourceChart);
}
catch (Exception ex)
{
ShowNotify($"生成图表时发生错误: {ex.Message}", MessageBoxIcon.Error);
}
}
}
}