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

521 lines
20 KiB
C#
Raw Normal View History

2025-08-21 17:43:07 +08:00
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
/// <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;
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
/// <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;\">");
// 计算总列数,用于处理表头
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("<tr>");
foreach (GridColumn column in grid.Columns)
{
if (column is GroupField groupField && groupField.Columns != null)
{
// 对于分组列使用colspan跨越子列数量文本居中
sb.AppendFormat("<td colspan=\"{0}\" align=\"center\">{1}</td>", groupField.Columns.Count,
groupField.HeaderText);
}
else
{
// 普通列,跨两行,文本居中
sb.AppendFormat("<td rowspan=\"2\" align=\"center\">{0}</td>", column.HeaderText);
}
}
sb.Append("</tr>");
// 第二行表头(仅包含分组列的子列)- 居中显示
bool hasGroupColumns = grid.Columns.Any(c => c is GroupField && ((GroupField)c).Columns != null);
if (hasGroupColumns)
{
sb.Append("<tr>");
foreach (GridColumn column in grid.Columns)
{
if (column is GroupField groupField && groupField.Columns != null)
{
// 添加分组列的子列标题,居中显示
foreach (GridColumn subColumn in groupField.Columns)
{
sb.AppendFormat("<td align=\"center\">{0}</td>", subColumn.HeaderText);
}
}
}
sb.Append("</tr>");
}
// 添加数据行
foreach (GridRow row in grid.Rows)
{
sb.Append("<tr>");
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("<td>{0}</td>", 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("<td>{0}</td>", html);
}
}
sb.Append("</tr>");
}
// 添加合计行
if (grid.SummaryData != null)
{
sb.Append("<tr style=\"font-weight:bold; color:red;\">");
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("<td>{0}</td>", grid.SummaryData[dataField]);
}
else
{
sb.Append("<td></td>");
}
}
else
{
sb.Append("<td></td>");
}
}
}
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("<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();
}
#endregion
protected void btSearch_Click(object sender, EventArgs e)
{
BindGrid();
}
}
}