441 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			441 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C#
		
	
	
	
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 WeldingData : 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;
 | 
						||
                string value13 = "0%";
 | 
						||
                string value14 = "0%";
 | 
						||
 | 
						||
 | 
						||
                
 | 
						||
                #region 管道、钢结构、设备、其他焊工
 | 
						||
 | 
						||
                var query1 = from c in db.Comprehensive_InspectionPerson
 | 
						||
                    join cn in db.Base_CNProfessional on c.CNProfessionalId equals cn.CNProfessionalId into cnJoin
 | 
						||
                    from cn in cnJoin.DefaultIfEmpty()
 | 
						||
                    join p in db.Base_Post on c.PostId equals p.PostId into postJoin
 | 
						||
                    from p in postJoin.DefaultIfEmpty()
 | 
						||
                    where c.ProjectId == project.ProjectId
 | 
						||
                    select new
 | 
						||
                    {
 | 
						||
                        c.InspectionPersonId,
 | 
						||
                        c.ProjectId,
 | 
						||
                        c.PersonName,
 | 
						||
                        c.ApprovalTime,
 | 
						||
                        cn.ProfessionalName,
 | 
						||
                        p.PostName
 | 
						||
                    };
 | 
						||
                
 | 
						||
                var totalWelderList = query1.ToList();
 | 
						||
                var welderList = query1.Where(x => x.ApprovalTime >= firstDayOfMonth);
 | 
						||
                value1 = welderList.Count(x => x.ProfessionalName == "管道" && x.PostName == "焊工");
 | 
						||
                value2 = totalWelderList.Count(x => x.ProfessionalName == "管道" && x.PostName == "焊工");
 | 
						||
                value3 = welderList.Count(x => x.ProfessionalName == "土建" && x.PostName == "焊工");
 | 
						||
                value4 = totalWelderList.Count(x => x.ProfessionalName == "土建" && x.PostName == "焊工");
 | 
						||
                value5 = welderList.Count(x => x.ProfessionalName == "设备" && x.PostName == "焊工");
 | 
						||
                value6 = totalWelderList.Count(x => x.ProfessionalName == "设备" && x.PostName == "焊工");
 | 
						||
                value7 = welderList.Count(x => x.ProfessionalName != "管道" && x.ProfessionalName != "土建" && x.ProfessionalName != "设备" && x.PostName == "焊工");
 | 
						||
                value8 = totalWelderList.Count(x => x.ProfessionalName != "管道" && x.ProfessionalName != "土建" && x.ProfessionalName != "设备" && x.PostName == "焊工");
 | 
						||
 | 
						||
                #endregion 
 | 
						||
                
 | 
						||
                #region PQR/WPS报验
 | 
						||
 | 
						||
                var query = (from x in db.Report_Construction_Plan
 | 
						||
                    join y in db.Report_WeekAndMonthReport_New on x.ReportId equals y.Id into yJoin
 | 
						||
                    from y in yJoin.DefaultIfEmpty()
 | 
						||
                    where y.ProjectId == project.ProjectId && x.ReType == "5"
 | 
						||
                    select new
 | 
						||
                    {
 | 
						||
                        x.Quantity1,
 | 
						||
                        x.Quantity2,
 | 
						||
                        x.Quantity3,
 | 
						||
                        x.QuaRate,
 | 
						||
                        y.CreateDate
 | 
						||
                    }).ToList();
 | 
						||
 | 
						||
                var sum1 = query.Sum(x => x.Quantity1 ?? 0);
 | 
						||
                var sum2 = query.Sum(x => x.Quantity2 ?? 0);
 | 
						||
                var sum3 = query.Sum(x => x.Quantity3 ?? 0);
 | 
						||
                value10 = sum1 + sum2 + sum3;
 | 
						||
                var sum4 = query.Where(x => x.CreateDate >= firstDayOfMonth).Sum(x => x.Quantity1 ?? 0);
 | 
						||
                var sum5 = query.Where(x => x.CreateDate >= firstDayOfMonth).Sum(x => x.Quantity2 ?? 0);
 | 
						||
                var sum6 = query.Where(x => x.CreateDate >= firstDayOfMonth).Sum(x => x.Quantity3 ?? 0);
 | 
						||
                value9 = sum4 + sum5 + sum6;
 | 
						||
 | 
						||
                #endregion
 | 
						||
                
 | 
						||
                
 | 
						||
                #region 无损检测管理
 | 
						||
 | 
						||
                var query2 = from c in db.ProcessControl_NondestructiveTest_New
 | 
						||
                    where c.ProjectId == project.ProjectId
 | 
						||
                    orderby c.CreateDate descending
 | 
						||
                    select new
 | 
						||
                    {
 | 
						||
                        c.CreateDate,
 | 
						||
                        c.ProjectId,
 | 
						||
                        c.ProfessionalName,
 | 
						||
                        c.MonthQuantity,
 | 
						||
                        c.TotalQuantity,
 | 
						||
                        c.MonthRate,
 | 
						||
                        c.TotalRate
 | 
						||
                    };
 | 
						||
 | 
						||
                if (query2.Count()>0)
 | 
						||
                {
 | 
						||
                    var data1 = query2.FirstOrDefault(x => x.ProfessionalName == "工艺管道");
 | 
						||
                    var data2 = query2.FirstOrDefault(x => x.ProfessionalName == "地管");
 | 
						||
                    var data3 = query2.FirstOrDefault(x => x.ProfessionalName == "非标");
 | 
						||
                    value11 = (int)((data1?.MonthQuantity ?? 0) + (data2?.MonthQuantity ?? 0) + (data3?.MonthQuantity ?? 0));
 | 
						||
                    value12 = (int)((data1?.TotalQuantity ?? 0) + (data2?.TotalQuantity ?? 0) + (data3?.TotalQuantity ?? 0));
 | 
						||
                }
 | 
						||
 | 
						||
 | 
						||
                #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, // PQR/WPS报验本月
 | 
						||
                    Value10 = value10, // PQR/WPS报验累计
 | 
						||
                    Value11 = value11, // 本月拍片数
 | 
						||
                    Value12 = value12, // 累计拍片数
 | 
						||
                    Value13 = value13, // 本月一次合格率
 | 
						||
                    Value14 = value14, // 累计一次合格率
 | 
						||
                });
 | 
						||
            }
 | 
						||
 | 
						||
            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));
 | 
						||
 | 
						||
            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();
 | 
						||
        }
 | 
						||
    }
 | 
						||
} |