CNCEC_SUBQHSE_WUHUAN/SGGL/FineUIPro.Web/ZHGL/CQMSData/CQMSNoticeDetailsData.aspx.cs

663 lines
25 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 CQMSNoticeDetailsData : 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
/// <summary>
/// 绑定数据
/// </summary>
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<dynamic>();
foreach (var project in list)
{
int value1 = 0;
int value2 = 0;
int value3 = 0;
int value4 = 0;
string value5 = "0%";
string value6 = "0%";
int value7 = 0;
int value8 = 0;
int value9 = 0;
int value10 = 0;
string value11 = "0%";
string value12 = "0%";
int value13 = 0;
int value14 = 0;
int value15 = 0;
int value16 = 0;
string value17 = "0%";
string value18 = "0%";
int value19 = 0;
int value20 = 0;
int value21 = 0;
int value22 = 0;
string value23 = "0%";
string value24 = "0%";
int value25 = 0;
int value26 = 0;
int value27 = 0;
int value28 = 0;
string value29 = "0%";
string value30 = "0%";
#region
//专业下所有集合
List<Model.View_MonthReport_InspectionManagement> totalManagementList = BLL.InspectionManagementService.getViewMonthReportInspectionManagementByCNProfessionalIdAndDate(project.ProjectId, null, Convert.ToDateTime("2015-01-01"), DateTime.Now, false);
//专业下当期集合
List<Model.View_MonthReport_InspectionManagement> managementList = BLL.InspectionManagementService.getViewMonthReportInspectionManagementByCNProfessionalIdAndDate(project.ProjectId, null, firstDayOfMonth, DateTime.Now, false);
#region
string cNProfessionalId1 = (from x in db.Base_CNProfessional where x.CNProfessionalCode == "CV" select x.CNProfessionalId).FirstOrDefault();
//专业下所有集合
var totalManagementList1 = totalManagementList.Where(x => x.CNProfessionalId == cNProfessionalId1);
//专业下当期集合
var managementList1 = managementList.Where(x => x.CNProfessionalId == cNProfessionalId1);
value1 = managementList1.Count();
value2 = totalManagementList1.Count();
value3 = managementList1.Count(x => x.IsOnceQualified == true);
value4 = totalManagementList1.Count(x => x.IsOnceQualified == true);
if (value1 != 0)//被除数不能为零
{
value5 = Math.Round((double)value3 / (double)value1 * 100, 2) + "%";//保留两位小数、后四舍五入
}
if (value2 != 0)//被除数不能为零
{
value6 = Math.Round((double)value4 / (double)value2 * 100, 2) + "%";//保留两位小数、后四舍五入
}
#endregion
#region
string cNProfessionalId2 = (from x in db.Base_CNProfessional where x.CNProfessionalCode == "EQ" select x.CNProfessionalId).FirstOrDefault();
//专业下所有集合
var totalManagementList2 = totalManagementList.Where(x => x.CNProfessionalId == cNProfessionalId2);
//专业下当期集合
var managementList2 = managementList.Where(x => x.CNProfessionalId == cNProfessionalId2);
value7 = managementList2.Count();
value8 = totalManagementList2.Count();
value9 = managementList2.Count(x => x.IsOnceQualified == true);
value10 = totalManagementList2.Count(x => x.IsOnceQualified == true);
if (value7 != 0)//被除数不能为零
{
value11 = Math.Round((double)value9 / (double)value7 * 100, 2) + "%";//保留两位小数、后四舍五入
}
if (value8 != 0)//被除数不能为零
{
value12 = Math.Round((double)value10 / (double)value8 * 100, 2) + "%";//保留两位小数、后四舍五入
}
#endregion
#region
string cNProfessionalId3 = (from x in db.Base_CNProfessional where x.CNProfessionalCode == "EL" select x.CNProfessionalId).FirstOrDefault();
//专业下所有集合
var totalManagementList3 = totalManagementList.Where(x => x.CNProfessionalId == cNProfessionalId3);
//专业下当期集合
var managementList3 = managementList.Where(x => x.CNProfessionalId == cNProfessionalId3);
value13 = managementList3.Count();
value14 = totalManagementList3.Count();
value15 = managementList3.Count(x => x.IsOnceQualified == true);
value16 = totalManagementList3.Count(x => x.IsOnceQualified == true);
if (value13 != 0)//被除数不能为零
{
value17 = Math.Round((double)value15 / (double)value13 * 100, 2) + "%";//保留两位小数、后四舍五入
}
if (value14 != 0)//被除数不能为零
{
value18 = Math.Round((double)value16 / (double)value14 * 100, 2) + "%";//保留两位小数、后四舍五入
}
#endregion
#region
string cNProfessionalId4 = (from x in db.Base_CNProfessional where x.CNProfessionalCode == "IN" select x.CNProfessionalId).FirstOrDefault();
//专业下所有集合
var totalManagementList4 = totalManagementList.Where(x => x.CNProfessionalId == cNProfessionalId4);
//专业下当期集合
var managementList4 = managementList.Where(x => x.CNProfessionalId == cNProfessionalId4);
value19 = managementList4.Count();
value20 = totalManagementList4.Count();
value21 = managementList4.Count(x => x.IsOnceQualified == true);
value22 = totalManagementList4.Count(x => x.IsOnceQualified == true);
if (value19 != 0)//被除数不能为零
{
value23 = Math.Round((double)value21 / (double)value19 * 100, 2) + "%";//保留两位小数、后四舍五入
}
if (value20 != 0)//被除数不能为零
{
value24 = Math.Round((double)value22 / (double)value20 * 100, 2) + "%";//保留两位小数、后四舍五入
}
#endregion
#region
string cNProfessionalId5 = (from x in db.Base_CNProfessional where x.CNProfessionalCode == "AC" select x.CNProfessionalId).FirstOrDefault();
//专业下所有集合
var totalManagementList5 = totalManagementList.Where(x => x.CNProfessionalId == cNProfessionalId5);
//专业下当期集合
var managementList5 = managementList.Where(x => x.CNProfessionalId == cNProfessionalId5);
value25 = managementList5.Count();
value26 = totalManagementList5.Count();
value27 = managementList5.Count(x => x.IsOnceQualified == true);
value28 = totalManagementList5.Count(x => x.IsOnceQualified == true);
if (value25 != 0)//被除数不能为零
{
value29 = Math.Round((double)value27 / (double)value25 * 100, 2) + "%";//保留两位小数、后四舍五入
}
if (value26 != 0)//被除数不能为零
{
value30 = Math.Round((double)value28 / (double)value26 * 100, 2) + "%";//保留两位小数、后四舍五入
}
#endregion
#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,
Value8 = value8,
Value9 = value9,
Value10 = value10,
Value11 = value11,
Value12 = value12,
Value13 = value13,
Value14 = value14,
Value15 = value15,
Value16 = value16,
Value17 = value17,
Value18 = value18,
Value19 = value19,
Value20 = value20,
Value21 = value21,
Value22 = value22,
Value23 = value23,
Value24 = value24,
Value25 = value25,
Value26 = value26,
Value27 = value27,
Value28 = value28,
Value29 = value29,
Value30 = value30
});
}
var pagedResult = result.Skip(Grid1.PageIndex * Grid1.PageSize).Take(Grid1.PageSize).ToList();
Grid1.RecordCount = result.Count;
Grid1.DataSource = pagedResult;
Grid1.DataBind();
var Value1Sum = pagedResult.Sum(p => p.Value1);
var Value2Sum = pagedResult.Sum(p => p.Value2);
var Value3Sum = pagedResult.Sum(p => p.Value3);
var Value4Sum = pagedResult.Sum(p => p.Value4);
var Value7Sum = pagedResult.Sum(p => p.Value7);
var Value8Sum = pagedResult.Sum(p => p.Value8);
var Value9Sum = pagedResult.Sum(p => p.Value9);
var Value10Sum = pagedResult.Sum(p => p.Value10);
var Value13Sum = pagedResult.Sum(p => p.Value13);
var Value14Sum = pagedResult.Sum(p => p.Value14);
var Value15Sum = pagedResult.Sum(p => p.Value15);
var Value16Sum = pagedResult.Sum(p => p.Value16);
var Value19Sum = pagedResult.Sum(p => p.Value19);
var Value20Sum = pagedResult.Sum(p => p.Value20);
var Value21Sum = pagedResult.Sum(p => p.Value21);
var Value22Sum = pagedResult.Sum(p => p.Value22);
var Value25Sum = pagedResult.Sum(p => p.Value25);
var Value26Sum = pagedResult.Sum(p => p.Value26);
var Value27Sum = pagedResult.Sum(p => p.Value27);
var Value28Sum = pagedResult.Sum(p => p.Value28);
JObject summary = new JObject();
summary.Add("ProjectName", "合计");
summary.Add("Value1", Value1Sum);
summary.Add("Value2", Value2Sum);
summary.Add("Value3", Value3Sum);
summary.Add("Value4", Value4Sum);
if (Value1Sum != 0)
{
summary.Add("Value5", Math.Round((double)Value3Sum / (double)Value1Sum * 100, 2) + "%");
}
else
{
summary.Add("Value5", "0%");
}
if (Value2Sum != 0)
{
summary.Add("Value6", Math.Round((double)Value4Sum / (double)Value2Sum * 100, 2) + "%");
}
else
{
summary.Add("Value6", "0%");
}
summary.Add("Value7", Value7Sum);
summary.Add("Value8", Value8Sum);
summary.Add("Value9", Value9Sum);
summary.Add("Value10", Value10Sum);
if (Value7Sum != 0)
{
summary.Add("Value11", Math.Round((double)Value9Sum / (double)Value7Sum * 100, 2) + "%");
}
else
{
summary.Add("Value11", "0%");
}
if (Value8Sum != 0)
{
summary.Add("Value12", Math.Round((double)Value10Sum / (double)Value8Sum * 100, 2) + "%");
}
else
{
summary.Add("Value12", "0%");
}
summary.Add("Value13", Value13Sum);
summary.Add("Value14", Value14Sum);
summary.Add("Value15", Value15Sum);
summary.Add("Value16", Value16Sum);
if (Value13Sum != 0)
{
summary.Add("Value17", Math.Round((double)Value15Sum / (double)Value13Sum * 100, 2) + "%");
}
else
{
summary.Add("Value17", "0%");
}
if (Value14Sum != 0)
{
summary.Add("Value18", Math.Round((double)Value16Sum / (double)Value14Sum * 100, 2) + "%");
}
else
{
summary.Add("Value18", "0%");
}
summary.Add("Value19", Value19Sum);
summary.Add("Value20", Value20Sum);
summary.Add("Value21", Value21Sum);
summary.Add("Value22", Value22Sum);
if (Value19Sum != 0)
{
summary.Add("Value23", Math.Round((double)Value21Sum / (double)Value19Sum * 100, 2) + "%");
}
else
{
summary.Add("Value23", "0%");
}
if (Value20Sum != 0)
{
summary.Add("Value24", Math.Round((double)Value22Sum / (double)Value20Sum * 100, 2) + "%");
}
else
{
summary.Add("Value24", "0%");
}
summary.Add("Value25", Value25Sum);
summary.Add("Value26", Value26Sum);
summary.Add("Value27", Value27Sum);
summary.Add("Value28", Value28Sum);
if (Value25Sum != 0)
{
summary.Add("Value29", Math.Round((double)Value27Sum / (double)Value25Sum * 100, 2) + "%");
}
else
{
summary.Add("Value29", "0%");
}
if (Value26Sum != 0)
{
summary.Add("Value30", Math.Round((double)Value28Sum / (double)Value26Sum * 100, 2) + "%");
}
else
{
summary.Add("Value30", "0%");
}
Grid1.SummaryData = summary;
}
#endregion
#region GV
/// <summary>
/// 分页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
{
this.BindGrid();
}
/// <summary>
/// 排序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Grid1_Sort(object sender, GridSortEventArgs e)
{
this.BindGrid();
}
/// <summary>
/// 分页显示条数下拉框
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
this.BindGrid();
}
#endregion
#region
/// <summary>
/// 关闭弹出窗
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Window1_Close(object sender, WindowCloseEventArgs e)
{
BindGrid();
}
#endregion
#region
/// 导出按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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();
}
/// <summary>
/// 导出方法
/// </summary>
/// <param name="grid"></param>
/// <returns></returns>
private string GetGridTableHtml(Grid grid)
{
StringBuilder sb = new StringBuilder();
sb.Append("<meta http-equiv=\"content-type\" content=\"application/excel; charset=UTF-8\"/>");
sb.Append("<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">");
// 收集所有列信息,包括嵌套的列
List<GridColumn> flattenedColumns = new List<GridColumn>();
List<int> columnLevels = new List<int>();
int maxLevel = GetFlattenedColumns(grid.Columns, flattenedColumns, columnLevels, 0);
// 生成表头
for (int level = 0; level <= maxLevel; level++)
{
sb.Append("<tr>");
int i = 0;
while (i < flattenedColumns.Count)
{
GridColumn column = flattenedColumns[i];
int columnLevel = columnLevels[i];
if (columnLevel == level)
{
// 计算跨行和跨列数
int rowspan = 1;
int colspan = 1;
if (column is GroupField groupField && groupField.Columns != null && groupField.Columns.Count > 0)
{
// 这是一个分组列,计算它的子列数量
colspan = CountLeafColumns(groupField);
rowspan = 1;
}
else
{
// 这是一个叶子列,需要跨行
rowspan = maxLevel - level + 1;
colspan = 1;
}
string cellValue = column.HeaderText ?? "";
if (rowspan > 1)
{
sb.AppendFormat("<td rowspan=\"{0}\" align=\"center\">{1}</td>", rowspan, cellValue);
}
else
{
sb.AppendFormat("<td colspan=\"{0}\" align=\"center\">{1}</td>", colspan, cellValue);
}
// 跳过已处理的子列
if (colspan > 1)
{
i += colspan;
}
else
{
i++;
}
}
else if (columnLevel < level && !(column is GroupField))
{
// 已经由rowspan处理的单元格跳过
i++;
}
else
{
i++;
}
}
sb.Append("</tr>");
}
// 添加数据行
foreach (GridRow row in grid.Rows)
{
sb.Append("<tr>");
List<GridColumn> leafColumns = GetLeafColumns(grid.Columns);
foreach (GridColumn column in leafColumns)
{
string html = row.Values[column.ColumnIndex].ToString();
if (column.ColumnID == "tfNumber")
{
html = (row.FindControl("lblNumber") as System.Web.UI.WebControls.Label).Text;
}
sb.AppendFormat("<td>{0}</td>", html);
}
sb.Append("</tr>");
}
// 添加合计行
if (grid.SummaryData != null)
{
sb.Append("<tr style=\"font-weight:bold; color:red;\">");
List<GridColumn> leafColumns = GetLeafColumns(grid.Columns);
foreach (GridColumn column in leafColumns)
{
// 使用反射获取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("<td>{0}</td>", grid.SummaryData[dataField]);
}
else if (!string.IsNullOrEmpty(dataField) && dataField == "ProjectName")
{
sb.Append("<td>合计</td>");
}
else
{
sb.Append("<td></td>");
}
}
else
{
sb.Append("<td></td>");
}
}
sb.Append("</tr>");
}
sb.Append("</table>");
return sb.ToString();
}
// 获取扁平化的列结构和对应的层级
private int GetFlattenedColumns(GridColumnCollection columns, List<GridColumn> flattenedColumns, List<int> columnLevels, int currentLevel)
{
int maxLevel = currentLevel;
foreach (GridColumn column in columns)
{
flattenedColumns.Add(column);
columnLevels.Add(currentLevel);
if (column is GroupField groupField && groupField.Columns != null)
{
int childLevel = GetFlattenedColumns(groupField.Columns, flattenedColumns, columnLevels, currentLevel + 1);
if (childLevel > maxLevel)
maxLevel = childLevel;
}
}
return maxLevel;
}
// 计算一个分组列下的叶子节点数量
private int CountLeafColumns(GridColumn column)
{
if (column is GroupField groupField && groupField.Columns != null)
{
int count = 0;
foreach (GridColumn subColumn in groupField.Columns)
{
count += CountLeafColumns(subColumn);
}
return count;
}
else
{
return 1;
}
}
// 获取所有叶子节点列
private List<GridColumn> GetLeafColumns(GridColumnCollection columns)
{
List<GridColumn> leafColumns = new List<GridColumn>();
foreach (GridColumn column in columns)
{
if (column is GroupField groupField && groupField.Columns != null)
{
leafColumns.AddRange(GetLeafColumns(groupField.Columns));
}
else
{
leafColumns.Add(column);
}
}
return leafColumns;
}
#endregion
protected void btSearch_Click(object sender, EventArgs e)
{
BindGrid();
}
}
}