using BLL;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.HSSF.Util;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using Newtonsoft.Json.Linq;
namespace FineUIPro.Web.WeldingProcess.WeldingReport
{
    public partial class JointComprehensive : PageBase
    {
        #region 加载
        /// 
        /// 加载页面
        /// 
        /// 
        /// 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.ddlPageSize.SelectedValue = this.Grid1.PageSize.ToString();
                BLL.Project_WorkAreaService.InitWorkAreaDropDownList(this.drpWorkAreaId, true, this.CurrUser.LoginProjectId, string.Empty, string.Empty, string.Empty, Resources.Lan.PleaseSelect);//区域
            }
        }
        private DataTable GetDataTable()
        {
            List listStr = new List();
            listStr.Add(new SqlParameter("@projectId", this.CurrUser.LoginProjectId));
            if (drpWorkAreaId.SelectedValue != Const._Null && drpWorkAreaId.SelectedValue != null)
            {
                listStr.Add(new SqlParameter("@workAreaId", this.drpWorkAreaId.SelectedValue));
            }
            if (!string.IsNullOrEmpty(drpPipeLine.SelectedValue))
            {
                string[] pipeList = drpPipeLine.SelectedValueArray;
                string pipeLineIds = string.Join(",", pipeList);
                listStr.Add(new SqlParameter("@pipelineIds", pipeLineIds));
            }
            else
            {
                listStr.Add(new SqlParameter("@pipelineIds", null));
            }
            //if (!string.IsNullOrEmpty(this.drpWorkAreaId.Text.Trim()))
            //{
            //    listStr.Add(new SqlParameter("@pipelineCode", this.txtPipelineCode.Text.Trim()));
            //}
            //else
            //{
            //    listStr.Add(new SqlParameter("@pipelineCode", null));
            //}
            SqlParameter[] parameter = listStr.ToArray();
            DataTable dt = SQLHelper.GetDataTableRunProc("sp_rpt_JointComprehensive", parameter);
            return dt;
        }
        /// 
        /// 绑定数据
        /// 
        private void BindGrid()
        {
            DataTable tb = GetDataTable();
            this.Grid1.RecordCount = tb.Rows.Count;
            var table = this.GetPagedDataTable(Grid1, tb);
            Grid1.DataSource = table;
            Grid1.DataBind();
            var distinctPipelineCode = tb.AsEnumerable().GroupBy(row => row.Field("PipelineId")).Select(group => group.First());
            var distinctSingleNumber = tb.AsEnumerable().GroupBy(row => row.Field("SingleNumber")).Select(group => group.First());
            var backingWelder = tb.AsEnumerable().Where(row => row.Field("BackingWelderCode")!=null).GroupBy(row => row.Field("BackingWelderCode")).Select(group => group.First());
            var coverWelder = tb.AsEnumerable().Where(row => row.Field("CoverWelderCode")!= null).GroupBy(row => row.Field("CoverWelderCode")).Select(group => group.First());
            var jotNum = from x in tb.AsEnumerable()
                         group x by new { pipe = x.Field("PipelineId"), jot = x.Field("WeldJointCode"), Size = x.Field("JOT_Size") }
                         into g
                         select new { pipe=g.Key.pipe,jot=g.Key.jot, Size=g.Key.Size };
            JObject summary = new JObject();
            summary.Add("tfNumber", "合计");
            summary.Add("SingleNumber", distinctSingleNumber.Count().ToString());
            summary.Add("PipelineCode", distinctPipelineCode.Count().ToString());
            summary.Add("WeldJointCode", jotNum.Count());
            summary.Add("JOT_Size", jotNum.Sum(x=>Convert.ToDouble(x.Size)));
            summary.Add("BackingWelderCode", backingWelder.Count().ToString());
            summary.Add("CoverWelderCode", coverWelder.Count().ToString());
            Grid1.SummaryData = summary;
        }
        protected void drpWorkAreaId_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            string workAreaId = drpWorkAreaId.SelectedValue;
            if (!string.IsNullOrEmpty(workAreaId))
            {
                BLL.Pipeline_PipelineService.InitPipelineDropDownList(drpPipeLine, workAreaId);
            }
        }
        /// 
        /// 改变索引事件
        /// 
        /// 
        /// 
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            BindGrid();
        }
        /// 
        /// 分页下拉选择事件
        /// 
        /// 
        /// 
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
            BindGrid();
        }
        /// 
        /// 排序
        /// 
        /// 
        /// 
        protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e)
        {
            this.BindGrid();
        }
        #endregion
        #region 统计按钮事件
        /// 
        /// 统计
        /// 
        /// 
        /// 
        protected void BtnAnalyse_Click(object sender, EventArgs e)
        {
            BindGrid();
        }
        #endregion
        #region 导出按钮
        /// 导出按钮
        /// 
        /// 
        /// 
        protected void btnOut_Click(object sender, EventArgs e)
        {
            string rootPath = Server.MapPath("~/") + Const.ExcelUrl;
            //模板文件
            string TempletFileName = rootPath + "JointComprehensive.xlsx";
            //导出文件
            string filePath = rootPath + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\";
            if (!Directory.Exists(filePath))
            {
                Directory.CreateDirectory(filePath);
            }
            string ReportFileName = filePath + "out.xlsx";
            FileStream file = new FileStream(TempletFileName, FileMode.Open, FileAccess.Read);
            XSSFWorkbook hssfworkbook = new XSSFWorkbook(file);
            #region JointComprehensive
            XSSFSheet reportModel = (XSSFSheet)hssfworkbook.GetSheet("Sheet1");
            XSSFFont cs_content_Font1 = (XSSFFont)hssfworkbook.CreateFont(); //创建字体
            cs_content_Font1.FontName = "sans-serif";//字体
            cs_content_Font1.FontHeightInPoints = 9; //字体大小
            ICellStyle style = hssfworkbook.CreateCellStyle();
            style.SetFont(cs_content_Font1);
            XSSFFont cs_content_Font = (XSSFFont)hssfworkbook.CreateFont(); //创建字体
            cs_content_Font.FontName = "sans-serif";//字体
            cs_content_Font.FontHeightInPoints = 10; //字体大小
            cs_content_Font.Color = HSSFColor.Red.Index;
            IDataFormat dataformat = hssfworkbook.CreateDataFormat();
            ICellStyle styleDate = hssfworkbook.CreateCellStyle();
            styleDate.SetFont(cs_content_Font1);
            styleDate.DataFormat = dataformat.GetFormat("yyyy-mm-dd");
            // 排序
            DataTable dataTable = GetDataTable();
            dataTable.DefaultView.Sort = "WorkAreaCode asc,PipelineCode asc,WeldJointCode asc";
            DataTable tb = dataTable.DefaultView.ToTable();
            if (tb.Rows.Count > 0)
            {
                var rowIndex = 1;
                foreach (DataRow itemOver in tb.Rows)
                {
                    if (reportModel.GetRow(rowIndex) == null) reportModel.CreateRow(rowIndex);
                    #region 列赋值
                    //序号
                    if (reportModel.GetRow(rowIndex).GetCell(0) == null) reportModel.GetRow(rowIndex).CreateCell(0);
                    reportModel.GetRow(rowIndex).GetCell(0).SetCellValue((rowIndex).ToString());
                    reportModel.GetRow(rowIndex).GetCell(0).CellStyle = style; //将字体绑定到样式
                    //区域
                    if (reportModel.GetRow(rowIndex).GetCell(1) == null) reportModel.GetRow(rowIndex).CreateCell(1);
                    reportModel.GetRow(rowIndex).GetCell(1).SetCellValue(itemOver["WorkAreaCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(1).CellStyle = style;
                    //系统号
                    if (reportModel.GetRow(rowIndex).GetCell(2) == null) reportModel.GetRow(rowIndex).CreateCell(2);
                    reportModel.GetRow(rowIndex).GetCell(2).SetCellValue(itemOver["SystemNumber"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(2).CellStyle = style;
                    //试压包号
                    if (reportModel.GetRow(rowIndex).GetCell(3) == null) reportModel.GetRow(rowIndex).CreateCell(3);
                    reportModel.GetRow(rowIndex).GetCell(3).SetCellValue(itemOver["TestPackageNo"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(3).CellStyle = style;
                    //单线图号
                    if (reportModel.GetRow(rowIndex).GetCell(4) == null) reportModel.GetRow(rowIndex).CreateCell(4);
                    reportModel.GetRow(rowIndex).GetCell(4).SetCellValue(itemOver["SingleNumber"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(4).CellStyle = style;
                   
                    //管线号
                    if (reportModel.GetRow(rowIndex).GetCell(5) == null) reportModel.GetRow(rowIndex).CreateCell(5);
                    reportModel.GetRow(rowIndex).GetCell(5).SetCellValue(itemOver["PipelineCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(5).CellStyle = style;
                    //管道等级
                    if (reportModel.GetRow(rowIndex).GetCell(6) == null) reportModel.GetRow(rowIndex).CreateCell(6);
                    reportModel.GetRow(rowIndex).GetCell(6).SetCellValue(itemOver["PipingClassCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(6).CellStyle = style;
                    //压力管道分级
                    if (reportModel.GetRow(rowIndex).GetCell(7) == null) reportModel.GetRow(rowIndex).CreateCell(7);
                    reportModel.GetRow(rowIndex).GetCell(7).SetCellValue(itemOver["PIPClassCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(7).CellStyle = style;
                    //图纸版次
                    if (reportModel.GetRow(rowIndex).GetCell(8) == null) reportModel.GetRow(rowIndex).CreateCell(8);
                    reportModel.GetRow(rowIndex).GetCell(8).SetCellValue(itemOver["DrawingsNum"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(8).CellStyle = style;
                    //页码
                    if (reportModel.GetRow(rowIndex).GetCell(9) == null) reportModel.GetRow(rowIndex).CreateCell(9);
                    reportModel.GetRow(rowIndex).GetCell(9).SetCellValue(itemOver["PageNum"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(9).CellStyle = style;
                    //管段
                    if (reportModel.GetRow(rowIndex).GetCell(10) == null) reportModel.GetRow(rowIndex).CreateCell(10);
                    reportModel.GetRow(rowIndex).GetCell(10).SetCellValue(itemOver["PipeSegment"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(10).CellStyle = style;
                    //焊口号
                    if (reportModel.GetRow(rowIndex).GetCell(11) == null) reportModel.GetRow(rowIndex).CreateCell(11);
                    reportModel.GetRow(rowIndex).GetCell(11).SetCellValue(itemOver["WeldJointCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(11).CellStyle = style;
                    //焊缝类型
                    if (reportModel.GetRow(rowIndex).GetCell(12) == null) reportModel.GetRow(rowIndex).CreateCell(12);
                    reportModel.GetRow(rowIndex).GetCell(12).SetCellValue(itemOver["WeldTypeCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(12).CellStyle = style;
                    //焊接位置
                    if (reportModel.GetRow(rowIndex).GetCell(13) == null) reportModel.GetRow(rowIndex).CreateCell(13);
                    reportModel.GetRow(rowIndex).GetCell(13).SetCellValue(itemOver["WeldingLocationCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(13).CellStyle = style;
                    //管径
                    if (reportModel.GetRow(rowIndex).GetCell(14) == null) reportModel.GetRow(rowIndex).CreateCell(14);
                    reportModel.GetRow(rowIndex).GetCell(14).SetCellValue(itemOver["JOT_Size"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(14).CellStyle = style;
                    //规格
                    if (reportModel.GetRow(rowIndex).GetCell(15) == null) reportModel.GetRow(rowIndex).CreateCell(15);
                    reportModel.GetRow(rowIndex).GetCell(15).SetCellValue(itemOver["Specification"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(15).CellStyle = style;
                    //材质1
                    if (reportModel.GetRow(rowIndex).GetCell(16) == null) reportModel.GetRow(rowIndex).CreateCell(16);
                    reportModel.GetRow(rowIndex).GetCell(16).SetCellValue(itemOver["MaterialCode1"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(16).CellStyle = style;
                    //材质2
                    if (reportModel.GetRow(rowIndex).GetCell(17) == null) reportModel.GetRow(rowIndex).CreateCell(17);
                    reportModel.GetRow(rowIndex).GetCell(17).SetCellValue(itemOver["MaterialCode2"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(17).CellStyle = style;
                    //组件1
                    if (reportModel.GetRow(rowIndex).GetCell(18) == null) reportModel.GetRow(rowIndex).CreateCell(18);
                    reportModel.GetRow(rowIndex).GetCell(18).SetCellValue(itemOver["PipeAssembly1"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(18).CellStyle = style;
                    //组件2
                    if (reportModel.GetRow(rowIndex).GetCell(19) == null) reportModel.GetRow(rowIndex).CreateCell(19);
                    reportModel.GetRow(rowIndex).GetCell(19).SetCellValue(itemOver["PipeAssembly2"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(19).CellStyle = style;
                    //炉批号1
                    if (reportModel.GetRow(rowIndex).GetCell(20) == null) reportModel.GetRow(rowIndex).CreateCell(20);
                    reportModel.GetRow(rowIndex).GetCell(20).SetCellValue(itemOver["HeartNo1"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(20).CellStyle = style;
                    //炉批号2
                    if (reportModel.GetRow(rowIndex).GetCell(21) == null) reportModel.GetRow(rowIndex).CreateCell(21);
                    reportModel.GetRow(rowIndex).GetCell(21).SetCellValue(itemOver["HeartNo2"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(21).CellStyle = style;
                    //WPS编号
                    if (reportModel.GetRow(rowIndex).GetCell(22) == null) reportModel.GetRow(rowIndex).CreateCell(22);
                    reportModel.GetRow(rowIndex).GetCell(22).SetCellValue(itemOver["WPQCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(22).CellStyle = style;
                    //打底焊工
                    if (reportModel.GetRow(rowIndex).GetCell(23) == null) reportModel.GetRow(rowIndex).CreateCell(23);
                    reportModel.GetRow(rowIndex).GetCell(23).SetCellValue(itemOver["BackingWelderCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(23).CellStyle = style;
                    //盖面焊工
                    if (reportModel.GetRow(rowIndex).GetCell(24) == null) reportModel.GetRow(rowIndex).CreateCell(24);
                    reportModel.GetRow(rowIndex).GetCell(24).SetCellValue(itemOver["CoverWelderCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(24).CellStyle = style;
                    //焊接方法
                    if (reportModel.GetRow(rowIndex).GetCell(25) == null) reportModel.GetRow(rowIndex).CreateCell(25);
                    reportModel.GetRow(rowIndex).GetCell(25).SetCellValue(itemOver["WeldingMethodName"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(25).CellStyle = style;
                    //介质
                    if (reportModel.GetRow(rowIndex).GetCell(26) == null) reportModel.GetRow(rowIndex).CreateCell(26);
                    reportModel.GetRow(rowIndex).GetCell(26).SetCellValue(itemOver["MediumName"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(26).CellStyle = style;
                    //焊接日期
                    if (reportModel.GetRow(rowIndex).GetCell(27) == null) reportModel.GetRow(rowIndex).CreateCell(27);
                    if (itemOver["WeldingDate"] != null && itemOver["WeldingDate"].ToString() != string.Empty)
                    {
                        reportModel.GetRow(rowIndex).GetCell(27).SetCellValue((DateTime)Convert.ToDateTime(itemOver["WeldingDate"].ToString()));
                        reportModel.GetRow(rowIndex).GetCell(27).CellStyle = styleDate;
                    }
                    //reportModel.GetRow(rowIndex).GetCell(23).SetCellValue(itemOver["WeldingDate"].ToString());
                    //焊接日报号
                    if (reportModel.GetRow(rowIndex).GetCell(28) == null) reportModel.GetRow(rowIndex).CreateCell(28);
                    reportModel.GetRow(rowIndex).GetCell(28).SetCellValue(itemOver["WeldingDailyCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(28).CellStyle = style;
                    //检测类型
                    if (reportModel.GetRow(rowIndex).GetCell(29) == null) reportModel.GetRow(rowIndex).CreateCell(29);
                    reportModel.GetRow(rowIndex).GetCell(29).SetCellValue(itemOver["DetectionTypeCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(29).CellStyle = style;
                    //是否点口
                    if (reportModel.GetRow(rowIndex).GetCell(30) == null) reportModel.GetRow(rowIndex).CreateCell(30);
                    reportModel.GetRow(rowIndex).GetCell(30).SetCellValue(itemOver["if_dk"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(30).CellStyle = style;
                    //委托号
                    if (reportModel.GetRow(rowIndex).GetCell(31) == null) reportModel.GetRow(rowIndex).CreateCell(31);
                    reportModel.GetRow(rowIndex).GetCell(31).SetCellValue(itemOver["TrustBatchCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(31).CellStyle = style;
                    //检测比例
                    if (reportModel.GetRow(rowIndex).GetCell(32) == null) reportModel.GetRow(rowIndex).CreateCell(32);
                    reportModel.GetRow(rowIndex).GetCell(32).SetCellValue(itemOver["DetectionRateCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(32).CellStyle = style;
                    //合格等级
                    if (reportModel.GetRow(rowIndex).GetCell(33) == null) reportModel.GetRow(rowIndex).CreateCell(33);
                    reportModel.GetRow(rowIndex).GetCell(33).SetCellValue(itemOver["AcceptLevel"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(33).CellStyle = style;
                    //检测日期
                    if (reportModel.GetRow(rowIndex).GetCell(34) == null) reportModel.GetRow(rowIndex).CreateCell(34);
                    if (itemOver["CHT_CHECKDATE"] != null && itemOver["CHT_CHECKDATE"].ToString() != string.Empty)
                    {
                        reportModel.GetRow(rowIndex).GetCell(34).SetCellValue((DateTime)Convert.ToDateTime(itemOver["CHT_CHECKDATE"].ToString()));
                        reportModel.GetRow(rowIndex).GetCell(34).CellStyle = styleDate;
                    }
                    //reportModel.GetRow(rowIndex).GetCell(30).SetCellValue(itemOver["CHT_CHECKDATE"].ToString());
                    //检测报告
                    if (reportModel.GetRow(rowIndex).GetCell(35) == null) reportModel.GetRow(rowIndex).CreateCell(35);
                    reportModel.GetRow(rowIndex).GetCell(35).SetCellValue(itemOver["NDEReportNo"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(35).CellStyle = style;
                    //是否热处理
                    if (reportModel.GetRow(rowIndex).GetCell(36) == null) reportModel.GetRow(rowIndex).CreateCell(36);
                    reportModel.GetRow(rowIndex).GetCell(36).SetCellValue(itemOver["IsHotProess"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(36).CellStyle = style;
                    //热处理报告
                    if (reportModel.GetRow(rowIndex).GetCell(37) == null) reportModel.GetRow(rowIndex).CreateCell(37);
                    reportModel.GetRow(rowIndex).GetCell(37).SetCellValue(itemOver["HotReportCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(37).CellStyle = style;
                    //焊丝
                    if (reportModel.GetRow(rowIndex).GetCell(38) == null) reportModel.GetRow(rowIndex).CreateCell(38);
                    reportModel.GetRow(rowIndex).GetCell(38).SetCellValue(ConvertWeldSilk(itemOver["WeldSilkId"]));
                    reportModel.GetRow(rowIndex).GetCell(38).CellStyle = style;
                    //焊条
                    if (reportModel.GetRow(rowIndex).GetCell(39) == null) reportModel.GetRow(rowIndex).CreateCell(39);
                    reportModel.GetRow(rowIndex).GetCell(39).SetCellValue(itemOver["WMT_MatCode"].ToString());
                    reportModel.GetRow(rowIndex).GetCell(39).CellStyle = style;
                    //焊剂
                    if (reportModel.GetRow(rowIndex).GetCell(40) == null) reportModel.GetRow(rowIndex).CreateCell(40);
                    reportModel.GetRow(rowIndex).GetCell(40).SetCellValue(ConvertWeldFlux(itemOver["WeldSilkId"]));
                    reportModel.GetRow(rowIndex).GetCell(40).CellStyle = style;
                   
                    #endregion
                    rowIndex++;
                }
                var distinctPipelineCode = tb.AsEnumerable().GroupBy(row => row.Field("PipelineId")).Select(group => group.First());
                var distinctSingleNumber = tb.AsEnumerable().GroupBy(row => row.Field("SingleNumber")).Select(group => group.First());
                var backingWelder = tb.AsEnumerable().GroupBy(row => row.Field("BackingWelderCode")).Select(group => group.First());
                var coverWelder = tb.AsEnumerable().GroupBy(row => row.Field("CoverWelderCode")).Select(group => group.First());
                var jotNum = from x in tb.AsEnumerable()
                             group x by new { pipe = x.Field("PipelineId"), jot = x.Field("WeldJointCode"), Size = x.Field("JOT_Size") }
                             into g
                             select new { pipe = g.Key.pipe, jot = g.Key.jot, Size = g.Key.Size };
                // 合计
                if (reportModel.GetRow(rowIndex) == null) reportModel.CreateRow(rowIndex);
                if (reportModel.GetRow(rowIndex).GetCell(0) == null) reportModel.GetRow(rowIndex).CreateCell(0);
                reportModel.GetRow(rowIndex).GetCell(0).SetCellValue("合计:");
                reportModel.GetRow(rowIndex).GetCell(0).CellStyle.SetFont(cs_content_Font);//将字体绑定到样式
                //单线图号
                if (reportModel.GetRow(rowIndex).GetCell(4) == null) reportModel.GetRow(rowIndex).CreateCell(4);
                reportModel.GetRow(rowIndex).GetCell(4).SetCellValue(distinctSingleNumber.Count().ToString());
                reportModel.GetRow(rowIndex).GetCell(4).CellStyle.SetFont(cs_content_Font);
                //管线号
                if (reportModel.GetRow(rowIndex).GetCell(5) == null) reportModel.GetRow(rowIndex).CreateCell(5);
                reportModel.GetRow(rowIndex).GetCell(5).SetCellValue(distinctPipelineCode.Count().ToString());
                reportModel.GetRow(rowIndex).GetCell(5).CellStyle.SetFont(cs_content_Font);
                //焊口号
                if (reportModel.GetRow(rowIndex).GetCell(11) == null) reportModel.GetRow(rowIndex).CreateCell(11);
                reportModel.GetRow(rowIndex).GetCell(11).SetCellValue(jotNum.Count());
                reportModel.GetRow(rowIndex).GetCell(11).CellStyle.SetFont(cs_content_Font);
                // 寸径
                if (reportModel.GetRow(rowIndex).GetCell(14) == null) reportModel.GetRow(rowIndex).CreateCell(14);
                reportModel.GetRow(rowIndex).GetCell(14).SetCellValue(jotNum.Sum(x => Convert.ToDouble(x.Size)));
                reportModel.GetRow(rowIndex).GetCell(14).CellStyle.SetFont(cs_content_Font);
                //打底焊工号
                if (reportModel.GetRow(rowIndex).GetCell(23) == null) reportModel.GetRow(rowIndex).CreateCell(23);
                reportModel.GetRow(rowIndex).GetCell(23).SetCellValue(backingWelder.Count().ToString());
                reportModel.GetRow(rowIndex).GetCell(23).CellStyle.SetFont(cs_content_Font);
                //盖面焊工号
                if (reportModel.GetRow(rowIndex).GetCell(24) == null) reportModel.GetRow(rowIndex).CreateCell(24);
                reportModel.GetRow(rowIndex).GetCell(24).SetCellValue(coverWelder.Count().ToString());
                reportModel.GetRow(rowIndex).GetCell(24).CellStyle.SetFont(cs_content_Font);
            }
            #endregion
            reportModel.ForceFormulaRecalculation = true;
            using (FileStream filess = System.IO.File.OpenWrite(ReportFileName))
            {
                hssfworkbook.Write(filess);
            }
            FileInfo filet = new FileInfo(ReportFileName);
            Response.Clear();
            Response.Charset = "GB2312";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
            Response.AddHeader("Content-Disposition", "attachment; filename=焊口综合分析_" + Server.UrlEncode(DateTime.Now.ToString("yyyyMMddhhmmss") + ".xlsx"));
            // 添加头信息,指定文件大小,让浏览器能够显示下载进度
            Response.AddHeader("Content-Length", filet.Length.ToString());
            // 指定返回的是一个不能被客户端读取的流,必须被下载
            Response.ContentType = "application/ms-excel";
            // 把文件流发送到客户端
            Response.WriteFile(filet.FullName);
            // 停止页面的执行
            Response.End();
            //Response.ClearContent();
            //string filename = Funs.GetNewFileName();
            //Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(Resources.Lan.JointComprehensive + filename, System.Text.Encoding.UTF8) + ".xls");
            //Response.ContentType = "application/excel";
            //Response.ContentEncoding = System.Text.Encoding.UTF8;
            //Response.Write(GetGridTableHtml(Grid1));
            //Response.End();
        }
        /// 
        /// 导出方法
        /// 
        /// 
        /// 
        //private string GetGridTableHtml(Grid grid)
        //{
        //    StringBuilder sb = new StringBuilder();
        //    grid.PageSize = 500000;
        //    BindGrid();
        //    sb.Append("");
        //    sb.Append("");
        //    sb.Append("");
        //    foreach (GridColumn column in grid.Columns)
        //    {
        //        sb.AppendFormat("| {0} | ", column.HeaderText);
        //    }
        //    sb.Append("
");
        //    foreach (GridRow row in grid.Rows)
        //    {
        //        sb.Append("");
        //        foreach (GridColumn column in grid.Columns)
        //        {
        //            string html = row.Values[column.ColumnIndex].ToString();
        //            if (column.ColumnID == "tfNumber")
        //            {
        //                html = (row.FindControl("labNumber") as AspNet.Label).Text;
        //            }
        //            if (column.ColumnID == "tfIsHotProess")
        //            {
        //                html = (row.FindControl("lblIsHotProess") as AspNet.Label).Text;
        //            }
        //            if (column.ColumnID == "tfif_dk")
        //            {
        //                html = (row.FindControl("lblif_dk") as AspNet.Label).Text;
        //            }
        //            sb.AppendFormat("| {0} | ", html);
        //        }
        //        sb.Append("
");
        //    }
        //    sb.Append("
");
        //    return sb.ToString();
        //}
        #endregion
        #region 格式化字符串
        /// 
        /// 是否热处理
        /// 
        /// 
        /// 
        protected string ConvertIsHotProess(object isHotProess)
        {
            if (isHotProess != null)
            {
                if (isHotProess.ToString() == "True")
                {
                    return Resources.Lan.Yes;
                }
                else
                {
                    return Resources.Lan.No;
                }
            }
            return null;
        }
        /// 
        /// 是否点口
        /// 
        /// 
        /// 
        protected string Convertif_dk(object if_dk)
        {
            if (if_dk != null)
            {
                if (if_dk.ToString() == "1")
                {
                    return Resources.Lan.Yes;
                }
                else
                {
                    return Resources.Lan.No;
                }
            }
            return null;
        }
        protected string ConvertWeldSilk(object WeldSilkId)
        {
            string weldSilkName = string.Empty;
            if (WeldSilkId != null)
            {
                string[] weldSilkIds = WeldSilkId.ToString().Split(',');
                if (weldSilkIds.Count() > 0)
                {
                    foreach (string s in weldSilkIds)
                    {
                        var silk = BLL.Base_ConsumablesService.GetConsumablesByConsumablesId(s);
                        if (silk != null)
                        {
                            weldSilkName = weldSilkName + silk.ConsumablesName + ',';
                        }
                    }
                    if (weldSilkName.Length > 0)
                    {
                        weldSilkName = weldSilkName.Substring(0, weldSilkName.Length - 1);
                    }
                }
            }
            return weldSilkName;
        }
        protected string ConvertWeldFlux(object WeldSilkId)
        {
            string weldFlux = string.Empty;
            string[] weldSilkIds = WeldSilkId.ToString().Split(',');
            if (weldSilkIds.Count() > 0)
            {
                foreach (string s in weldSilkIds)
                {
                    var silk = BLL.Base_ConsumablesService.GetConsumablesByConsumablesId(s);
                    if (silk!=null && !string.IsNullOrEmpty(silk.UserFlux))
                    {
                        weldFlux = weldFlux + silk.UserFlux + ',';
                    }
                    
                }
                if (weldFlux.Length > 0)
                {
                    weldFlux = weldFlux.Substring(0, weldFlux.Length - 1);
                }
            }
            return weldFlux;
        }
        #endregion
    }
}