191 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			191 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | |||
|  | using System.Collections.Generic; | |||
|  | using System.Linq; | |||
|  | using BLL; | |||
|  | using System.Data; | |||
|  | 
 | |||
|  | 
 | |||
|  | namespace FineUIPro.Web.JDGL.SGManPower | |||
|  | { | |||
|  |     public partial class ManPowerPlanChart : PageBase | |||
|  |     { | |||
|  |         protected void Page_Load(object sender, EventArgs e) | |||
|  |         { | |||
|  |             if (!IsPostBack) | |||
|  |             { | |||
|  |                 UnitId = Request.Params["UnitId"]; | |||
|  |                 StartTime = Request.Params["StartTime"]; | |||
|  |                 EndTime = Request.Params["EndTime"]; | |||
|  |                 UnitWorkId = Request.Params["UnitWorkId"]; | |||
|  |                 WorkPostId = Request.Params["WorkPostId"]; | |||
|  |                 Version = Request.Params["Version"]; | |||
|  |                 // 初始化图表数据 | |||
|  |                 InitializeChartData(); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         public string UnitId | |||
|  |         { | |||
|  |             get => (string)ViewState["UnitId"]; | |||
|  |             set => ViewState["UnitId"] = value; | |||
|  |         } | |||
|  | 
 | |||
|  |         public string StartTime | |||
|  |         { | |||
|  |             get => (string)ViewState["StartTime"]; | |||
|  |             set => ViewState["StartTime"] = value; | |||
|  |         } | |||
|  | 
 | |||
|  |         public string EndTime | |||
|  |         { | |||
|  |             get => (string)ViewState["EndTime"]; | |||
|  |             set => ViewState["EndTime"] = value; | |||
|  |         } | |||
|  | 
 | |||
|  |         public string UnitWorkId | |||
|  |         { | |||
|  |             get => (string)ViewState["UnitWorkId"]; | |||
|  |             set => ViewState["UnitWorkId"] = value; | |||
|  |         } | |||
|  | 
 | |||
|  |         public string WorkPostId | |||
|  |         { | |||
|  |             get => (string)ViewState["WorkPostId"]; | |||
|  |             set => ViewState["WorkPostId"] = value; | |||
|  |         } | |||
|  | 
 | |||
|  |         public string Version | |||
|  |         { | |||
|  |             get => (string)ViewState["Version"]; | |||
|  |             set => ViewState["Version"] = value; | |||
|  |         } | |||
|  | 
 | |||
|  |         private void InitializeChartData() | |||
|  |         { | |||
|  |             // 检查必要参数 | |||
|  |             if (string.IsNullOrEmpty(StartTime) || string.IsNullOrEmpty(EndTime)) | |||
|  |             { | |||
|  |                 ShowNotify("缺少必要的参数,无法生成图表", MessageBoxIcon.Warning); | |||
|  |                 return; | |||
|  |             } | |||
|  | 
 | |||
|  |             try | |||
|  |             { | |||
|  |                 DateTime startDate = Convert.ToDateTime(StartTime); | |||
|  |                 DateTime endDate = Convert.ToDateTime(EndTime); | |||
|  | 
 | |||
|  |                 // 获取人力计划数据 | |||
|  |                 var manpowerQuery = from x in Funs.DB.JDGL_SGManPower | |||
|  |                     where x.ProjectId == this.CurrUser.LoginProjectId && x.PlanDate >= startDate && x.PlanDate <= endDate | |||
|  |                     select x; | |||
|  | 
 | |||
|  |                 if (UnitId != Const._Null) | |||
|  |                 { | |||
|  |                     manpowerQuery = manpowerQuery.Where(x => x.UnitId == UnitId); | |||
|  |                 } | |||
|  |                  | |||
|  |                 // 添加装置筛选条件 | |||
|  |                 if (!string.IsNullOrEmpty(UnitWorkId)) | |||
|  |                 { | |||
|  |                     manpowerQuery = manpowerQuery.Where(x => x.UnitWorkId == UnitWorkId); | |||
|  |                 } | |||
|  | 
 | |||
|  |                 // 添加岗位筛选条件 | |||
|  |                 if (!string.IsNullOrEmpty(WorkPostId)) | |||
|  |                 { | |||
|  |                     manpowerQuery = manpowerQuery.Where(x => x.WorkPostId == WorkPostId); | |||
|  |                 } | |||
|  | 
 | |||
|  |                 // 添加版本筛选条件 | |||
|  |                 if (!string.IsNullOrEmpty(Version)) | |||
|  |                 { | |||
|  |                     manpowerQuery = manpowerQuery.Where(x => x.Version == Version); | |||
|  |                 } | |||
|  | 
 | |||
|  |                 var manpowerPlans = manpowerQuery.ToList(); | |||
|  | 
 | |||
|  |                 // 按日期汇总人数 | |||
|  |                 var chartData = manpowerPlans | |||
|  |                     .Where(x => x.PlanDate.HasValue && x.Quantity.HasValue) | |||
|  |                     .GroupBy(x => x.PlanDate.Value.Date) | |||
|  |                     .Select(g => new | |||
|  |                     { | |||
|  |                         Date = g.Key, | |||
|  |                         TotalQuantity = g.Sum(x => x.Quantity.Value) | |||
|  |                     }) | |||
|  |                     .OrderBy(x => x.Date) | |||
|  |                     .ToList(); | |||
|  | 
 | |||
|  |                 // 如果没有数据,显示提示信息 | |||
|  |                 if (chartData.Count == 0) | |||
|  |                 { | |||
|  |                     ShowNotify("在指定时间范围内没有找到人力计划数据", MessageBoxIcon.Warning); | |||
|  |                     return; | |||
|  |                 } | |||
|  | 
 | |||
|  |                 // 构建图表数据源 | |||
|  |                 DataTable dt = new DataTable(); | |||
|  |                 dt.Columns.Add("日期", typeof(string)); | |||
|  |                 dt.Columns.Add("人员数量", typeof(int)); | |||
|  | 
 | |||
|  |                 foreach (var item in chartData) | |||
|  |                 { | |||
|  |                     DataRow row = dt.NewRow(); | |||
|  |                     row["日期"] = item.Date.ToString("MM-dd"); | |||
|  |                     row["人员数量"] = item.TotalQuantity; | |||
|  |                     dt.Rows.Add(row); | |||
|  |                 } | |||
|  | 
 | |||
|  |                 // 创建图表数据对象 | |||
|  |                 Model.DataSourceChart dataSourceChart = new Model.DataSourceChart | |||
|  |                 { | |||
|  |                     Title = "总人力需求计划", | |||
|  |                     ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Column, | |||
|  |                     Width = 1000, | |||
|  |                     Height = 500, | |||
|  |                     IsNotEnable3D = false | |||
|  |                 }; | |||
|  | 
 | |||
|  |                 // 创建数据系列 | |||
|  |                 Model.DataSourceTeam dataSourceTeam = new Model.DataSourceTeam | |||
|  |                 { | |||
|  |                     DataPointName = "人员数量", | |||
|  |                     DataSourcePoints = new List<Model.DataSourcePoint>() // 确保初始化 | |||
|  |                 }; | |||
|  | 
 | |||
|  |                 // 添加数据点 | |||
|  |                 foreach (DataRow row in dt.Rows) | |||
|  |                 { | |||
|  |                     Model.DataSourcePoint point = new Model.DataSourcePoint | |||
|  |                     { | |||
|  |                         PointText = row["日期"].ToString(), | |||
|  |                         PointValue = row["人员数量"].ToString() | |||
|  |                     }; | |||
|  |                     // 确保DataSourcePoints不为空后再添加 | |||
|  |                     if (dataSourceTeam.DataSourcePoints != null) | |||
|  |                     { | |||
|  |                         dataSourceTeam.DataSourcePoints.Add(point); | |||
|  |                     } | |||
|  |                 } | |||
|  | 
 | |||
|  |                 // 确保DataSourceTeams不为空后再添加 | |||
|  |                 if (dataSourceChart.DataSourceTeams != null) | |||
|  |                 { | |||
|  |                     dataSourceChart.DataSourceTeams.Add(dataSourceTeam); | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     // 如果DataSourceTeams为空,创建一个新的列表 | |||
|  |                     dataSourceChart.DataSourceTeams = new List<Model.DataSourceTeam> { dataSourceTeam }; | |||
|  |                 } | |||
|  | 
 | |||
|  |                 // 生成图表 | |||
|  |                 Chart1.CreateChart(dataSourceChart); | |||
|  |             } | |||
|  |             catch (Exception ex) | |||
|  |             { | |||
|  |                 ShowNotify($"生成图表时发生错误: {ex.Message}", MessageBoxIcon.Error); | |||
|  |             } | |||
|  |         } | |||
|  |     } | |||
|  | } |