using BLL; using System; using System.Text; using System.Collections.Generic; using System.Linq; using Newtonsoft.Json.Linq; namespace FineUIPro.Web.ZHGL.CQMSData { public partial class CQMSBasicData : PageBase { //使用DateTime.Now获取当前日期,然后获取该月第一天 DateTime firstDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); public Model.SGGLDB db = Funs.DB; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.ddlPageSize.SelectedValue = this.Grid1.PageSize.ToString(); // 绑定表格 this.BindGrid(); } } #region 绑定数据 /// /// 绑定数据 /// private void BindGrid() { var list = BaseDataService.GetBeUnderConstruction(); if (!string.IsNullOrEmpty(this.txtProjectName.Text.Trim())) { list = list.Where(p => p.ProjectName.Contains(this.txtProjectName.Text.Trim())).ToList(); } var result = new List(); foreach (var project in list) { int value1 = 0; // 五环专业工程师 int value2 = 0; // 分包商专业工程师 int value3 = 0; int value4 = 0; int value5 = 0; int value6 = 0; int value7 = 0; int value8 = 0; int value9 = 0; int value10 = 0; int value11 = 0; int value12 = 0; int value13 = 0; int value14 = 0; int value15 = 0; int value16 = 0; int value17 = 0; int value18 = 0; //根据项目获取总包单位 var generalContractorUnit = Funs.DB.Project_ProjectUnit.FirstOrDefault(pu => pu.ProjectId == project.ProjectId && pu.UnitType == Const.ProjectUnitType_1); // 总包单位 if (generalContractorUnit != null) { var constructionManagerGCs = (from x in Funs.DB.Project_ProjectUser where x.ProjectId == project.ProjectId && x.UnitId == generalContractorUnit.UnitId && x.IsPost == true && x.RoleId.Contains(Const.ZBCNEngineer) //专业工程师 select x).ToList(); //五环专业工程师 value1 = constructionManagerGCs.Count; } // 获取分包单位的专业工程师 var subContractorUnits = (from x in Funs.DB.Project_ProjectUnit where x.ProjectId == project.ProjectId && x.UnitType == Const.ProjectUnitType_2 //分包单位 select x).ToList(); foreach (var unit in subContractorUnits) { var subContractorUsers = (from x in Funs.DB.Project_ProjectUser where x.ProjectId == project.ProjectId && x.UnitId == unit.UnitId && x.IsPost == true && x.RoleId.Contains(Const.ZBCNEngineer) //分包商专业工程师 select x).ToList(); value2 += subContractorUsers.Count; } #region 一般施工方案审批 var query1 = (from c in db.Comprehensive_GeneralPlanApproval where c.ProjectId == project.ProjectId select new { c.ApprovalDate, c.ProjectId, c.CompileDate }).ToList(); value3 = query1.Where(x => x.ApprovalDate >= firstDayOfMonth).Count(); value4 = query1.Count(); #endregion #region 危大工程方案审批 var query2 = (from c in db.Comprehensive_MajorPlanApproval where c.ProjectId == project.ProjectId select new { c.ApprovalDate, c.ProjectId, c.ExpertReviewMan, c.IsReview, c.CompileDate }).ToList(); value5 = query2.Where(x => x.ApprovalDate >= firstDayOfMonth).Count(); value6 = query2.Count(); #endregion #region ITP发布情况 var query3 = (from c in db.Inspection_Test_Plan where c.ProjectId == project.ProjectId select new { c.ApprovalDate, c.ProjectId, c.CreateDate }).ToList(); value7 = query3.Where(x => x.CreateDate >= firstDayOfMonth).Count(); value8 = query3.Count(); #endregion #region 设计交底(次) var query4 = (from c in db.Comprehensive_DesignDetails where c.ProjectId == project.ProjectId select new { c.Status, c.CompileDate, c.ProjectId, }).ToList(); value9 = query4.Where(x => x.CompileDate >= firstDayOfMonth).Count(); value10 = query4.Count(); #endregion #region 图纸会审(次) var query5 = (from c in db.Comprehensive_ReviewDrawings where c.ProjectId == project.ProjectId select new { c.Status, c.ReviewDate, c.ProjectId, }).ToList(); value11 = query5.Where(x => x.ReviewDate >= firstDayOfMonth).Count(); value12 = query5.Count(); #endregion #region 设计变更管理 var query6 = (from c in db.Comprehensive_ReviewDrawings where c.ProjectId == project.ProjectId select new { c.Status, c.ReviewDate, c.ProjectId, }).ToList(); value13 = query6.Where(x => x.ReviewDate >= firstDayOfMonth).Count(); value14 = query6.Count(); #endregion #region 现场质量培训 var query7 = (from x in Funs.DB.Comprehensive_InspectionPerson join p in Funs.DB.Base_Project on x.ProjectId equals p.ProjectId into pGroup from p in pGroup.DefaultIfEmpty() join u in Funs.DB.Base_Unit on x.UnitId equals u.UnitId into uGroup from u in uGroup.DefaultIfEmpty() join y in Funs.DB.SitePerson_Person on x.InspectionPersonId equals y.PersonId into yGroup from y in yGroup.DefaultIfEmpty() join m in Funs.DB.Base_WorkPost on y.WorkPostId equals m.WorkPostId into mGroup from m in mGroup.DefaultIfEmpty() where p.ProjectId == project.ProjectId && x.IsTrain == true select new { x.ProjectId, p.ProjectName, u.UnitId, u.UnitName, Name = x.PersonName, Sex = y.Sex == null ? "" : (y.Sex == "1" ? "男" : "女"), y.IdentityCard, WorkPostName = m.WorkPostName == null ? "" : m.WorkPostName, Phone = y.Telephone, x.CompileDate }).ToList(); value17 = query7.Where(x => x.CompileDate >= firstDayOfMonth).Count(); value18 = query7.Count(); #endregion // 构造动态对象用于绑定到Grid result.Add(new { project.ProjectId, project.ProjectName, project.ShortName, Value1 = value1, Value2 = value2, Value3 = value3, // 一般施工方案审批本月 Value4 = value4, // 一般施工方案审批累计 Value5 = value5, // 危大工程审批情况本月 Value6 = value6, // 危大工程审批情况累计 Value7 = value7, // ITP发布情况本月 Value8 = value8, // ITP发布情况累计 Value9 = value9, // 设计交底本月 Value10 = value10, // 设计交底累计 Value11 = value11, // 图纸会审本月 Value12 = value12, // 图纸会审累计 Value13 = value13, // 设计变更管理本月 Value14 = value14, // 设计变更管理累计 Value15 = value15, // 现场质量培训本月培训次数 Value16 = value16, // 现场质量培训累计培训次数 Value17 = value17, // 现场质量培训本月培训人数 Value18 = value18 // 现场质量培训累计培训人数 }); } var pagedResult = result.Skip(Grid1.PageIndex * Grid1.PageSize).Take(Grid1.PageSize).ToList(); Grid1.RecordCount = result.Count; Grid1.DataSource = pagedResult; Grid1.DataBind(); JObject summary = new JObject(); summary.Add("ProjectName", "合计"); summary.Add("Value1", pagedResult.Sum(p => p.Value1)); summary.Add("Value2", pagedResult.Sum(p => p.Value2)); summary.Add("Value3", pagedResult.Sum(p => p.Value3)); summary.Add("Value4", pagedResult.Sum(p => p.Value4)); summary.Add("Value5", pagedResult.Sum(p => p.Value5)); summary.Add("Value6", pagedResult.Sum(p => p.Value6)); summary.Add("Value7", pagedResult.Sum(p => p.Value7)); summary.Add("Value8", pagedResult.Sum(p => p.Value8)); summary.Add("Value9", pagedResult.Sum(p => p.Value9)); summary.Add("Value10", pagedResult.Sum(p => p.Value10)); summary.Add("Value11", pagedResult.Sum(p => p.Value11)); summary.Add("Value12", pagedResult.Sum(p => p.Value12)); summary.Add("Value13", pagedResult.Sum(p => p.Value13)); summary.Add("Value14", pagedResult.Sum(p => p.Value14)); summary.Add("Value15", pagedResult.Sum(p => p.Value15)); summary.Add("Value16", pagedResult.Sum(p => p.Value16)); summary.Add("Value17", pagedResult.Sum(p => p.Value17)); summary.Add("Value18", pagedResult.Sum(p => p.Value18)); Grid1.SummaryData = summary; } #endregion #region GV 数据操作 /// /// 分页 /// /// /// protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) { this.BindGrid(); } /// /// 排序 /// /// /// protected void Grid1_Sort(object sender, GridSortEventArgs e) { this.BindGrid(); } /// /// 分页显示条数下拉框 /// /// /// protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) { Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue); this.BindGrid(); } #endregion #region 关闭弹出窗 /// /// 关闭弹出窗 /// /// /// protected void Window1_Close(object sender, WindowCloseEventArgs e) { BindGrid(); } #endregion #region 导出按钮 /// 导出按钮 /// /// /// protected void btnOut_Click(object sender, EventArgs e) { Response.ClearContent(); string filename = Funs.GetNewFileName(); Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("质量基本信息表" + filename, System.Text.Encoding.UTF8) + ".xls"); Response.ContentType = "application/excel"; Response.ContentEncoding = System.Text.Encoding.UTF8; this.BindGrid(); Response.Write(GetGridTableHtml(Grid1)); Response.End(); } /// /// 导出方法 /// /// /// private string GetGridTableHtml(Grid grid) { StringBuilder sb = new StringBuilder(); sb.Append(""); sb.Append(""); // 计算总列数,用于处理表头 int totalColumns = 0; foreach (GridColumn column in grid.Columns) { if (column is GroupField groupField && groupField.Columns != null) { totalColumns += groupField.Columns.Count; } else { totalColumns += 1; } } // 第一行表头 - 居中显示 sb.Append(""); foreach (GridColumn column in grid.Columns) { if (column is GroupField groupField && groupField.Columns != null) { // 对于分组列,使用colspan跨越子列数量,文本居中 sb.AppendFormat("", groupField.Columns.Count, groupField.HeaderText); } else { // 普通列,跨两行,文本居中 sb.AppendFormat("", column.HeaderText); } } sb.Append(""); // 第二行表头(仅包含分组列的子列)- 居中显示 bool hasGroupColumns = grid.Columns.Any(c => c is GroupField && ((GroupField)c).Columns != null); if (hasGroupColumns) { sb.Append(""); foreach (GridColumn column in grid.Columns) { if (column is GroupField groupField && groupField.Columns != null) { // 添加分组列的子列标题,居中显示 foreach (GridColumn subColumn in groupField.Columns) { sb.AppendFormat("", subColumn.HeaderText); } } } sb.Append(""); } // 添加数据行 foreach (GridRow row in grid.Rows) { sb.Append(""); foreach (GridColumn column in grid.Columns) { if (column is GroupField groupField && groupField.Columns != null) { // 处理分组列中的每个子列 foreach (GridColumn subColumn in groupField.Columns) { string html = row.Values[subColumn.ColumnIndex].ToString(); if (subColumn.ColumnID == "tfNumber") { html = (row.FindControl("lblNumber") as System.Web.UI.WebControls.Label).Text; } sb.AppendFormat("", html); } } else { // 处理普通列 string html = row.Values[column.ColumnIndex].ToString(); if (column.ColumnID == "tfNumber") { html = (row.FindControl("lblNumber") as System.Web.UI.WebControls.Label).Text; } sb.AppendFormat("", html); } } sb.Append(""); } // 添加合计行 if (grid.SummaryData != null) { sb.Append(""); foreach (GridColumn column in grid.Columns) { if (column is GroupField groupField && groupField.Columns != null) { // 处理分组列中的每个子列 foreach (GridColumn subColumn in groupField.Columns) { // 使用反射获取DataField属性值,避免编译错误 var dataFieldProperty = subColumn.GetType().GetProperty("DataField"); if (dataFieldProperty != null) { string dataField = dataFieldProperty.GetValue(subColumn, null) as string; if (!string.IsNullOrEmpty(dataField) && grid.SummaryData.ContainsKey(dataField)) { sb.AppendFormat("", grid.SummaryData[dataField]); } else { sb.Append(""); } } else { sb.Append(""); } } } else { // 处理普通列 // 使用反射获取DataField属性值,避免编译错误 var dataFieldProperty = column.GetType().GetProperty("DataField"); if (dataFieldProperty != null) { string dataField = dataFieldProperty.GetValue(column, null) as string; if (!string.IsNullOrEmpty(dataField) && grid.SummaryData.ContainsKey(dataField)) { sb.AppendFormat("", grid.SummaryData[dataField]); } else if (!string.IsNullOrEmpty(dataField) && dataField == "ProjectName") { sb.Append(""); } else { sb.Append(""); } } else { sb.Append(""); } } } sb.Append(""); } sb.Append("
{1}{0}
{0}
{0}{0}
{0}{0}合计
"); return sb.ToString(); } #endregion protected void btSearch_Click(object sender, EventArgs e) { BindGrid(); } } }