using BLL;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
namespace FineUIPro.Web.TestRun.Feeding
{
    public partial class FeedingRunApplication : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                InitTreeMenu();
            }
        }
        #region 数加载
        /// 
        /// 加载树
        /// 
        private void InitTreeMenu()
        {
            this.tvControlItem.Nodes.Clear();
            TreeNode rootNode = new TreeNode();
            rootNode.Text = "检查表";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.ToolTip = "";
            rootNode.EnableClickEvent = true;
            this.tvControlItem.Nodes.Add(rootNode);
            var inspectTerms = Funs.DB.FeedingRun_SubInspectTerm.Where(x => x.InspectIsClose == 1).ToList();
            if (inspectTerms.Count == 0) return;
            var subInstallationIds = inspectTerms.ConvertAll(x => x.InstallationId);
            var list = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 1 && subInstallationIds.Contains(x.PreRunId)).OrderBy(a => a.Sort);
            if (list.Count() > 0)
            {
                foreach (var item in list)
                {
                    TreeNode rootOneNode = new TreeNode();
                    rootOneNode.NodeID = item.PreRunId;
                    rootOneNode.Text = item.PreRunName;
                    rootOneNode.ToolTip = item.PreRunName;
                    rootOneNode.CommandName = "";
                    rootOneNode.EnableClickEvent = true;
                    rootOneNode.EnableExpandEvent = false;
                    rootNode.Nodes.Add(rootOneNode);
                    rootOneNode.Expanded = true;
                }
            }
        }
        /// 
        /// 树点击
        /// 
        protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e)
        {
            BindGrid();
        }
        #endregion
        #region 数据绑定
        /// 
        /// 绑定数据
        /// 
        public void BindGrid()
        {
            List listStr = new List();
            string sqlStr = $"select  a.SubInspectId,a.ProjectId,a.InstallationId,a.DriverCharge,c.UserName as DriverChargeName,a.DrivingManager,d.UserName as DrivingManagerName,a.ProjectManager,e.UserName as ProjectManagerName,a.WanderIsComplete,a.WanderCompleteData,a.IsUnifyWanderAbout,a.UnifyWanderAboutData,a.InspectIsClose,a.InspectCloseData,b.ProjectCode,b.ProjectName from FeedingRun_SubInspectTerm as a inner join Base_Project as b on a.ProjectId=b.ProjectId inner join Sys_User as c on c.UserId=a.DriverCharge inner join Sys_User as d on d.UserId=a.DrivingManager inner join Sys_User as e on e.UserId=a.ProjectManager where a.InspectIsClose=1 and a.ProjectId=@projectid ";
            listStr.Add(new SqlParameter("@projectid", this.CurrUser.LoginProjectId));
            if(!string.IsNullOrWhiteSpace(this.tvControlItem.SelectedNodeID))
            {
                sqlStr += $"and a.InstallationId=@InstallationId ";
                listStr.Add(new SqlParameter("@InstallationId", this.tvControlItem.SelectedNodeID));
            }
            sqlStr += " order by a.InspectCloseData desc";
            SqlParameter[] parameter = listStr.ToArray();
            DataTable tb = SQLHelper.GetDataTableRunText(sqlStr, parameter);
            Grid1.RecordCount = tb.Rows.Count;
            var table = this.GetPagedDataTable(Grid1, tb);
            Grid1.DataSource = table;
            Grid1.DataBind();
        }
        /// 
        /// 分页
        /// 
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid1.PageIndex = e.NewPageIndex;
            BindGrid();
        }
        /// 
        /// 分页下拉框
        /// 
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
            BindGrid();
        }
        /// 
        /// 排序
        /// 
        protected void Grid1_Sort(object sender, GridSortEventArgs e)
        {
            BindGrid();
        }
        #endregion
        #region 按钮和事件
        /// 
        /// 查询
        /// 
        protected void btnQuery_Click(object sender, EventArgs e)
        {
            BindGrid();
        }
        /// 
        /// 导出投料试车申请表
        /// 
        protected void btnExport_Click(object sender, EventArgs e)
        {
            //string rootPath = Server.MapPath("~/") + Const.ExcelUrl;
            ////导出文件
            //string filePath = rootPath + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\";
            //if (!Directory.Exists(filePath))
            //{
            //    Directory.CreateDirectory(filePath);
            //}
            //string ReportFileName = filePath + "投料试车申请.xlsx";
            ////获取工作包检查表
            //var termData = from a in Funs.DB.FeedingRun_SubInspectTerm
            //               join b in Funs.DB.Base_Project on a.ProjectId equals b.ProjectId
            //               join zz in Funs.DB.PreRun_SysDevice on a.InstallationId equals zz.PreRunId//装置
            //               select new { a.SubInspectId, a.ProjectId, b.ProjectName, b.ShortName, b.ProjectCode, a.InstallationId, a.DriverCharge, a.DrivingManager, a.ProjectManager, a.InspectionIsAllPass, a.DriverChargeIsAllPass, a.DrivingManagerIsAllPass, a.ProjectManagerIsAllPass, a.InspectTime, a.AddUser, a.AddTime, zzName = zz.PreRunName };
            //if (termData != null)
            //{
            //    var termModel = termData.FirstOrDefault();
            //    //获取工作包检查项表
            //    var termItems = Funs.DB.FeedingRun_SubInspectTermItem.Where(x => x.SubInspectId == this.SubInspectId).OrderBy(x => x.Sort).ToList();
            //    int rowIndex = 0;
            //    XSSFWorkbook hssfworkbook = new XSSFWorkbook();
            //    XSSFSheet ws = (XSSFSheet)hssfworkbook.CreateSheet("投料试车申请");
            //    #region 列宽
            //    ws.SetColumnWidth(0, (7 * 256));
            //    ws.SetColumnWidth(1, (4 * 256));
            //    ws.SetColumnWidth(2, (4 * 256));
            //    ws.SetColumnWidth(3, (4 * 256));
            //    ws.SetColumnWidth(4, (10 * 256));
            //    ws.SetColumnWidth(5, (10 * 256));
            //    ws.SetColumnWidth(6, (10 * 256));
            //    ws.SetColumnWidth(7, (10 * 256));
            //    ws.SetColumnWidth(8, (3 * 256));
            //    ws.SetColumnWidth(9, (3 * 256));
            //    ws.SetColumnWidth(10, (3 * 256));
            //    ws.SetColumnWidth(11, (3 * 256));
            //    ws.SetColumnWidth(12, (3 * 256));
            //    ws.SetColumnWidth(13, (3 * 256));
            //    ws.SetColumnWidth(14, (3 * 256));
            //    ws.SetColumnWidth(15, (3 * 256));
            //    ws.SetColumnWidth(16, (3 * 256));
            //    ws.SetColumnWidth(17, (3 * 256));
            //    #endregion
            //    #region 样式
            //    //头部样式居中
            //    ICellStyle titleStyle = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 14, true, true);
            //    //头部样式靠左
            //    ICellStyle leftTitleStyle = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Left, 14, true, true);
            //    //公共样式
            //    ICellStyle style = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true);
            //    //公共样式靠左
            //    ICellStyle leftStyle = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Left, 10.5, true);
            //    //公共样式靠左上对其
            //    ICellStyle leftTopStyle = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Top, HorizontalAlignment.Left, 10.5, true);
            //    //公共样式加粗
            //    ICellStyle styleBold = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true, true);
            //    #endregion
            //    #region 头部
            //    ws = ExcelCreateRowTitle(ws, hssfworkbook, style, rowIndex, rowIndex + 5, 0, 17);
            //    //行1
            //    var region = new CellRangeAddress(rowIndex, rowIndex + 2, 0, 0);
            //    ws.AddMergedRegion(region);
            //    byte[] bytes = File.ReadAllBytes(Server.MapPath("~/") + "Images\\Template.png");
            //    int pictureIdx = hssfworkbook.AddPicture(bytes, PictureType.JPEG);
            //    IDrawing patriarch = ws.CreateDrawingPatriarch();
            //    IClientAnchor anchor = patriarch.CreateAnchor(0, 0, 0, 0, 0, rowIndex, 1, rowIndex + 2);
            //    IPicture pict = patriarch.CreatePicture(anchor, pictureIdx);
            //    //pict.Resize();
            //    region = new CellRangeAddress(rowIndex, rowIndex + 2, 1, 3);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex).GetCell(1).SetCellValue("中国五环工程有限公司");
            //    ws.GetRow(rowIndex).GetCell(1).CellStyle =
            //    ws.GetRow(rowIndex).GetCell(2).CellStyle =
            //    ws.GetRow(rowIndex).GetCell(3).CellStyle = leftTitleStyle;
            //    region = new CellRangeAddress(rowIndex, rowIndex, 4, 7);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex).GetCell(4).SetCellValue(termModel.ProjectName);
            //    ws.GetRow(rowIndex).GetCell(4).CellStyle = style;
            //    region = new CellRangeAddress(rowIndex, rowIndex, 8, 12);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex).GetCell(8).SetCellValue("项目号");
            //    ws.GetRow(rowIndex).GetCell(8).CellStyle = style;
            //    region = new CellRangeAddress(rowIndex, rowIndex, 13, 17);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex).GetCell(13).SetCellValue(termModel.ProjectCode);
            //    ws.GetRow(rowIndex).GetCell(13).CellStyle = style;
            //    region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 4, 7);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 1).GetCell(4).SetCellValue($"({termModel.zzName})");
            //    ws.GetRow(rowIndex + 1).GetCell(4).CellStyle = style;
            //    region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 8, 12);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 1).GetCell(8).SetCellValue("(文件号)");
            //    ws.GetRow(rowIndex + 1).GetCell(8).CellStyle = style;
            //    region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 13, 17);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 1).GetCell(13).SetCellValue("");
            //    ws.GetRow(rowIndex + 1).GetCell(13).CellStyle = style;
            //    region = new CellRangeAddress(rowIndex + 2, rowIndex + 2, 4, 7);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 2).GetCell(4).SetCellValue($"投料试车条件检查表");
            //    ws.GetRow(rowIndex + 2).GetCell(4).CellStyle = titleStyle;
            //    region = new CellRangeAddress(rowIndex + 2, rowIndex + 2, 8, 12);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 2).GetCell(8).SetCellValue("第   1    页");
            //    ws.GetRow(rowIndex + 2).GetCell(8).CellStyle = style;
            //    region = new CellRangeAddress(rowIndex + 2, rowIndex + 2, 13, 17);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 2).GetCell(13).SetCellValue("共    1     页");
            //    ws.GetRow(rowIndex + 2).GetCell(13).CellStyle = style;
            //    //行4,行5
            //    region = new CellRangeAddress(rowIndex + 3, rowIndex + 4, 0, 2);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 3).GetCell(0).CellStyle = style;
            //    ws.GetRow(rowIndex + 3).GetCell(0).SetCellValue("");
            //    region = new CellRangeAddress(rowIndex + 3, rowIndex + 4, 3, 11);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 3).GetCell(3).CellStyle = leftStyle;
            //    ws.GetRow(rowIndex + 3).GetCell(3).SetCellValue("");
            //    region = new CellRangeAddress(rowIndex + 3, rowIndex + 3, 12, 17);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 3).GetCell(12).CellStyle = style;
            //    ws.GetRow(rowIndex + 3).GetCell(12).SetCellValue("检查日期");
            //    region = new CellRangeAddress(rowIndex + 4, rowIndex + 4, 12, 17);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 4).GetCell(12).CellStyle = style;
            //    ws.GetRow(rowIndex + 4).GetCell(12).SetCellValue(DateTime.Now.ToString("yyyy年MM月dd日"));
            //    //行6
            //    ws.GetRow(rowIndex + 5).GetCell(0).CellStyle = styleBold;
            //    ws.GetRow(rowIndex + 5).GetCell(0).SetCellValue("序号");
            //    region = new CellRangeAddress(rowIndex + 5, rowIndex + 5, 1, 7);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 5).GetCell(1).CellStyle = styleBold;
            //    ws.GetRow(rowIndex + 5).GetCell(1).SetCellValue("检查项目");
            //    region = new CellRangeAddress(rowIndex + 5, rowIndex + 5, 8, 12);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 5).GetCell(8).CellStyle = styleBold;
            //    ws.GetRow(rowIndex + 5).GetCell(8).SetCellValue("结果");
            //    region = new CellRangeAddress(rowIndex + 5, rowIndex + 5, 13, 17);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 5).GetCell(13).CellStyle = styleBold;
            //    ws.GetRow(rowIndex + 5).GetCell(13).SetCellValue("备注");
            //    #endregion
            //    #region 表格
            //    var start = rowIndex + 6;
            //    var end = rowIndex + 5 + termItems.Count;
            //    ws = ExcelCreateRowTitle(ws, hssfworkbook, style, start, end, 0, 17);
            //    //合并单元格
            //    for (int hb = start; hb <= end; hb++)
            //    {
            //        region = new CellRangeAddress(hb, hb, 1, 7);
            //        ws.AddMergedRegion(region);
            //        region = new CellRangeAddress(hb, hb, 8, 12);
            //        ws.AddMergedRegion(region);
            //        region = new CellRangeAddress(hb, hb, 13, 17);
            //        ws.AddMergedRegion(region);
            //    }
            //    //数据
            //    int num = 1;
            //    var dataIndex = 6;
            //    foreach (var item in termItems)
            //    {
            //        //序号
            //        ws.GetRow(dataIndex).GetCell(0).SetCellValue(num);
            //        //检查项目
            //        ws.GetRow(dataIndex).GetCell(1).SetCellValue(item.WorkInspectName);
            //        ws.GetRow(dataIndex).GetCell(1).CellStyle = leftStyle;
            //        //结果
            //        ws.GetRow(dataIndex).GetCell(8).SetCellValue("");
            //        //备注
            //        ws.GetRow(dataIndex).GetCell(13).SetCellValue("");
            //        dataIndex++;
            //        num++;
            //    }
            //    rowIndex = start + termItems.Count;
            //    #endregion
            //    #region 尾部
            //    ws = ExcelCreateRowTitle(ws, hssfworkbook, style, rowIndex, rowIndex, 0, 17, 100);
            //    //行1
            //    ws.GetRow(rowIndex).GetCell(0).SetCellValue("结论");
            //    region = new CellRangeAddress(rowIndex, rowIndex, 1, 17);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex).GetCell(1).SetCellValue("是否同意进行(包括整改意见):");
            //    ws.GetRow(rowIndex).GetCell(1).CellStyle = leftTopStyle;
            //    //行2
            //    ws = ExcelCreateRowTitle(ws, hssfworkbook, style, rowIndex + 1, rowIndex + 1, 0, 17, 80);
            //    ws.GetRow(rowIndex + 1).GetCell(0).SetCellValue("检查人员");
            //    region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 1, 4);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 1).GetCell(1).SetCellValue("施工单位:");
            //    ws.GetRow(rowIndex + 1).GetCell(1).CellStyle = leftTopStyle;
            //    region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 5, 6);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 1).GetCell(5).SetCellValue("装置开车负责人:");
            //    ws.GetRow(rowIndex + 1).GetCell(5).CellStyle = leftTopStyle;
            //    region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 7, 11);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 1).GetCell(7).SetCellValue("开车经理:");
            //    ws.GetRow(rowIndex + 1).GetCell(7).CellStyle = leftTopStyle;
            //    region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 12, 17);
            //    ws.AddMergedRegion(region);
            //    ws.GetRow(rowIndex + 1).GetCell(12).SetCellValue("项目经理:");
            //    ws.GetRow(rowIndex + 1).GetCell(12).CellStyle = leftTopStyle;
            //    #endregion
            //    ws.PrintSetup.Landscape = false;
            //    ws.PrintSetup.PaperSize = 9;
            //    ws.ForceFormulaRecalculation = true;
            //    using (FileStream filess = 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("投料试车申请.xlsx"));
            //    // 添加头信息,指定文件大小,让浏览器能够显示下载进度
            //    Response.AddHeader("Content-Length", filet.Length.ToString());
            //    // 指定返回的是一个不能被客户端读取的流,必须被下载
            //    Response.ContentType = "application/ms-excel";
            //    // 把文件流发送到客户端
            //    Response.WriteFile(filet.FullName);
            //    // 停止页面的执行
            //    Response.End();
            //}
        }
        /// 
        /// 右击导出投料试车申请表
        /// 
        protected void btnMenuExport_Click(object sender, EventArgs e)
        {
            btnExport_Click(null, null);
        }
        /// 
        /// 双击事件
        /// 
        protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e)
        {
            btnExport_Click(null, null);
        }
        #endregion
        #region 私有方法
        /// 
        /// 创建样式
        /// 
        /// 
        public static ICellStyle SetExcelStyle(XSSFWorkbook wb, BorderStyle Bottom, BorderStyle Left, BorderStyle Right, BorderStyle Top, VerticalAlignment VerAig, HorizontalAlignment HorAig, double FontSize, bool WrapText = true, bool Bold = false, string FontName = "宋体")
        {
            ICellStyle style = wb.CreateCellStyle();
            style.BorderBottom = Bottom;
            style.BorderLeft = Left;
            style.BorderRight = Right;
            style.BorderTop = Top;
            style.VerticalAlignment = VerAig;
            style.Alignment = HorAig;
            IFont font = wb.CreateFont();
            font.FontHeightInPoints = FontSize;
            font.IsBold = Bold;
            font.FontName = FontName;
            style.SetFont(font);
            style.WrapText = WrapText;
            return style;
        }
        /// 
        /// 创建头部
        /// 
        /// 
        private XSSFSheet ExcelCreateRowTitle(XSSFSheet ws, XSSFWorkbook hssfworkbook, ICellStyle style, int sRows, int eRows, int cStart, int cEnd, float height = 21)
        {
            for (int i = sRows; i <= eRows; i++)
            {
                ws.CreateRow(i);
                ws.GetRow(i).HeightInPoints = height;
                for (int j = cStart; j <= cEnd; j++)
                {
                    ws.GetRow(i).CreateCell(j);
                    ws.GetRow(i).CreateCell(j).CellStyle = style;
                }
            }
            return ws;
        }
        #endregion
    }
}