460 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			460 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using BLL;
							 | 
						|||
| 
								 | 
							
								using Model;
							 | 
						|||
| 
								 | 
							
								using System;
							 | 
						|||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						|||
| 
								 | 
							
								using System.Data.SqlClient;
							 | 
						|||
| 
								 | 
							
								using System.Data;
							 | 
						|||
| 
								 | 
							
								using System.Linq;
							 | 
						|||
| 
								 | 
							
								using System.Web;
							 | 
						|||
| 
								 | 
							
								using System.Web.UI;
							 | 
						|||
| 
								 | 
							
								using System.Reflection;
							 | 
						|||
| 
								 | 
							
								using NPOI.SS.UserModel;
							 | 
						|||
| 
								 | 
							
								using NPOI.SS.Util;
							 | 
						|||
| 
								 | 
							
								using NPOI.XSSF.UserModel;
							 | 
						|||
| 
								 | 
							
								using System.IO;
							 | 
						|||
| 
								 | 
							
								using Newtonsoft.Json.Linq;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace FineUIPro.Web.TestRun.Report
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    public partial class FourDecisionSchedule : PageBase
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 点击树状主键
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        public string TreePreRunId { get { return (string)ViewState["TreePreRunId"]; } set { ViewState["TreePreRunId"] = value; } }
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 子系统主键
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        public List<string> SubSystemIds { get { return (List<string>)ViewState["SubSystemIds"]; } set { ViewState["SubSystemIds"] = value; } }
							 | 
						|||
| 
								 | 
							
								        protected void Page_Load(object sender, EventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (!IsPostBack)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if (SubSystemIds == null) SubSystemIds = new List<string>();
							 | 
						|||
| 
								 | 
							
								                this.InitTreeMenu();//加载树
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 加载树
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 加载树
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        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 allPreRunLs = Funs.DB.PreRun_SysDevice.Where(p => p.ProjectId == this.CurrUser.LoginProjectId).ToList();
							 | 
						|||
| 
								 | 
							
								            var onePreRunLs = allPreRunLs.Where(p => p.PreRunLevel == 1).OrderBy(x => x.Sort);
							 | 
						|||
| 
								 | 
							
								            foreach (var item in onePreRunLs)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                TreeNode rootUnitNode = new TreeNode();//定义根节点
							 | 
						|||
| 
								 | 
							
								                rootUnitNode.NodeID = item.PreRunId;
							 | 
						|||
| 
								 | 
							
								                rootUnitNode.Text = item.PreRunName;
							 | 
						|||
| 
								 | 
							
								                rootUnitNode.ToolTip = item.PreRunName;
							 | 
						|||
| 
								 | 
							
								                rootUnitNode.CommandName = "";
							 | 
						|||
| 
								 | 
							
								                rootUnitNode.EnableClickEvent = true;
							 | 
						|||
| 
								 | 
							
								                rootUnitNode.EnableExpandEvent = true;
							 | 
						|||
| 
								 | 
							
								                rootNode.Nodes.Add(rootUnitNode);
							 | 
						|||
| 
								 | 
							
								                rootUnitNode.Expanded = true;
							 | 
						|||
| 
								 | 
							
								                var otherPreRunls = allPreRunLs.Where(p => p.PreRunLevel != 1).ToList();
							 | 
						|||
| 
								 | 
							
								                this.BindNodes(rootUnitNode, otherPreRunls, item.PreRunId);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        ///  绑定树节点
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        private void BindNodes(TreeNode node, List<PreRun_SysDevice> list, string parentId)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var itemList = list.Where(p => p.ParentId == parentId).OrderBy(x => x.Sort).ToList();
							 | 
						|||
| 
								 | 
							
								            if (itemList.Count > 0)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                foreach (var item in itemList)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    TreeNode newNode = new TreeNode();
							 | 
						|||
| 
								 | 
							
								                    newNode.Text = item.PreRunName;
							 | 
						|||
| 
								 | 
							
								                    newNode.NodeID = item.PreRunId;
							 | 
						|||
| 
								 | 
							
								                    newNode.ToolTip = item.PreRunName;
							 | 
						|||
| 
								 | 
							
								                    newNode.CommandName = "";
							 | 
						|||
| 
								 | 
							
								                    newNode.EnableClickEvent = true;
							 | 
						|||
| 
								 | 
							
								                    node.Nodes.Add(newNode);
							 | 
						|||
| 
								 | 
							
								                    BindNodes(newNode, list, item.PreRunId);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 数加载
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        protected void tvControlItem_NodeExpand(object sender, TreeNodeEventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (e.Node.Nodes != null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                e.Node.Nodes.Clear();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            var allPreRunLs = Funs.DB.PreRun_SysDevice.Where(p => p.ProjectId == this.CurrUser.LoginProjectId).ToList();
							 | 
						|||
| 
								 | 
							
								            this.BindNodes(e.Node, allPreRunLs, e.NodeID);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 点击TreeView
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="sender"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="e"></param>
							 | 
						|||
| 
								 | 
							
								        protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var devices = new List<PreRun_SysDevice>();
							 | 
						|||
| 
								 | 
							
								            this.TreePreRunId = tvControlItem.SelectedNodeID != "0" ? tvControlItem.SelectedNodeID : string.Empty;
							 | 
						|||
| 
								 | 
							
								            if (!string.IsNullOrWhiteSpace(this.TreePreRunId))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                var model = Funs.DB.PreRun_SysDevice.FirstOrDefault(x => x.PreRunId == this.TreePreRunId);
							 | 
						|||
| 
								 | 
							
								                if (model.PreRunLevel == 4)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    this.SubSystemIds = new List<string>() { model.PreRunId };
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else if (model.PreRunLevel == 3)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4 && x.SystemId == model.PreRunId).ToList();
							 | 
						|||
| 
								 | 
							
								                    if (devices.Count > 0)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        this.SubSystemIds = devices.ConvertAll(x => x.PreRunId);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else if (model.PreRunLevel == 2)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4 && x.ProcessesId == model.PreRunId).ToList();
							 | 
						|||
| 
								 | 
							
								                    if (devices.Count > 0)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        this.SubSystemIds = devices.ConvertAll(x => x.PreRunId);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else if (model.PreRunLevel == 1)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4 && x.InstallationId == model.PreRunId).ToList();
							 | 
						|||
| 
								 | 
							
								                    if (devices.Count > 0)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        this.SubSystemIds = devices.ConvertAll(x => x.PreRunId);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4).ToList();
							 | 
						|||
| 
								 | 
							
								                if (devices.Count > 0)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    this.SubSystemIds = devices.ConvertAll(x => x.PreRunId);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            FourDecisionBrid();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 数据绑定/导出
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 三查四定绑定
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        public void FourDecisionBrid()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var result = new List<FourDecisionScheduleBridDto>();
							 | 
						|||
| 
								 | 
							
								            if (this.SubSystemIds.Count > 0)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                result = GetFourDecisionSchedules();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            GridFourDecision.DataSource = result;
							 | 
						|||
| 
								 | 
							
								            GridFourDecision.DataBind();
							 | 
						|||
| 
								 | 
							
								            JObject summary = new JObject();
							 | 
						|||
| 
								 | 
							
								            summary.Add("AllNum", result.Sum(x => x.AllNum));
							 | 
						|||
| 
								 | 
							
								            summary.Add("NoCloseNum", result.Sum(x => x.NoCloseNum));
							 | 
						|||
| 
								 | 
							
								            summary.Add("CloseNum", result.Sum(x => x.CloseNum));
							 | 
						|||
| 
								 | 
							
								            GridFourDecision.SummaryData = summary;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 导出
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        protected void btnScsdExport_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 result = GetFourDecisionSchedules();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (result.Count > 0)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                XSSFWorkbook hssfworkbook = new XSSFWorkbook();
							 | 
						|||
| 
								 | 
							
								                XSSFSheet ws = (XSSFSheet)hssfworkbook.CreateSheet("三查四定进度");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                #region 列宽
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                ws.SetColumnWidth(0, (30 * 256));
							 | 
						|||
| 
								 | 
							
								                ws.SetColumnWidth(1, (20 * 256));
							 | 
						|||
| 
								 | 
							
								                ws.SetColumnWidth(2, (20 * 256));
							 | 
						|||
| 
								 | 
							
								                ws.SetColumnWidth(3, (20 * 256));
							 | 
						|||
| 
								 | 
							
								                ws.SetColumnWidth(4, (20 * 256));
							 | 
						|||
| 
								 | 
							
								                ws.SetColumnWidth(5, (20 * 256));
							 | 
						|||
| 
								 | 
							
								                ws.SetColumnWidth(6, (20 * 256));
							 | 
						|||
| 
								 | 
							
								                ws.SetColumnWidth(7, (20 * 256));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                #region 样式
							 | 
						|||
| 
								 | 
							
								                //公共样式
							 | 
						|||
| 
								 | 
							
								                ICellStyle style = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 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, 0, 0, 0, 7);
							 | 
						|||
| 
								 | 
							
								                //行1
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(0).CellStyle = styleBold;
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(0).SetCellValue("级别");
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(1).CellStyle = styleBold;
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(1).SetCellValue("装置名称");
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(2).CellStyle = styleBold;
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(2).SetCellValue("工序名称");
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(3).CellStyle = styleBold;
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(3).SetCellValue("系统名称");
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(4).CellStyle = styleBold;
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(4).SetCellValue("子系统名称");
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(5).CellStyle = styleBold;
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(5).SetCellValue("尾项数量");
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(6).CellStyle = styleBold;
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(6).SetCellValue("未关闭尾项数量");
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(7).CellStyle = styleBold;
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(0).GetCell(7).SetCellValue("已关闭尾项数量");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                #region 表格
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                var start = 1;
							 | 
						|||
| 
								 | 
							
								                var end = result.Count;
							 | 
						|||
| 
								 | 
							
								                ws = ExcelCreateRowTitle(ws, hssfworkbook, style, start, end, 0, 7);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                //数据
							 | 
						|||
| 
								 | 
							
								                var dataIndex = 1;
							 | 
						|||
| 
								 | 
							
								                foreach (var item in result)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    ws.GetRow(dataIndex).GetCell(0).SetCellValue(item.Level);
							 | 
						|||
| 
								 | 
							
								                    ws.GetRow(dataIndex).GetCell(1).SetCellValue(item.InstallationName);
							 | 
						|||
| 
								 | 
							
								                    ws.GetRow(dataIndex).GetCell(2).SetCellValue(item.ProcessesName);
							 | 
						|||
| 
								 | 
							
								                    ws.GetRow(dataIndex).GetCell(3).SetCellValue(item.SystemName);
							 | 
						|||
| 
								 | 
							
								                    ws.GetRow(dataIndex).GetCell(4).SetCellValue(item.SubsystemName);
							 | 
						|||
| 
								 | 
							
								                    ws.GetRow(dataIndex).GetCell(5).SetCellValue(item.AllNum);
							 | 
						|||
| 
								 | 
							
								                    ws.GetRow(dataIndex).GetCell(6).SetCellValue(item.NoCloseNum);
							 | 
						|||
| 
								 | 
							
								                    ws.GetRow(dataIndex).GetCell(7).SetCellValue(item.CloseNum);
							 | 
						|||
| 
								 | 
							
								                    dataIndex++;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                #region 尾部
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                ws = ExcelCreateRowTitle(ws, hssfworkbook, style, end + 1, end + 1, 0, 7);
							 | 
						|||
| 
								 | 
							
								                var region = new CellRangeAddress(end + 1, end + 1, 0, 4);
							 | 
						|||
| 
								 | 
							
								                ws.AddMergedRegion(region);
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(end + 1).GetCell(0).SetCellValue("合计");
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(end + 1).GetCell(5).SetCellValue(result.Count > 0 ? result.Sum(x => x.AllNum).ToString() : "0");
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(end + 1).GetCell(6).SetCellValue(result.Count > 0 ? result.Sum(x => x.NoCloseNum).ToString() : "0");
							 | 
						|||
| 
								 | 
							
								                ws.GetRow(end + 1).GetCell(7).SetCellValue(result.Count > 0 ? result.Sum(x => x.CloseNum).ToString() : "0");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                #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();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 私有方法
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 创建头部
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        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;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 创建样式
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        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;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 获取三查四定统计
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        private List<FourDecisionScheduleBridDto> GetFourDecisionSchedules()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            var list = new List<FourDecisionScheduleBridDto>();
							 | 
						|||
| 
								 | 
							
								            string allStr = $"select Level,COUNT(1) as AllNum,SUM(case ISNULL(a.DecisionIsClose,0) when 0 then 1 else 0 end) as NoCloseNum,SUM(case ISNULL(a.DecisionIsClose,0) when 1 then 1 else 0 end) as CloseNum from PreRun_SubThreeChecksFourDecision as a where a.SubSystemId in ('{string.Join("','", this.SubSystemIds)}') and a.ProjectId='{this.CurrUser.LoginProjectId}' group by a.Level  order by a.Level asc";
							 | 
						|||
| 
								 | 
							
								            var dt = SQLHelper.GetDataTableRunText(allStr);
							 | 
						|||
| 
								 | 
							
								            if (dt.Rows.Count > 0)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                string deviceStr = $"select b.PreRunName as InstallationName,c.PreRunName as ProcessesName,d.PreRunName as SystemName,e.PreRunName as SubsystemName from PreRun_SysDevice as a left join PreRun_SysDevice as b on b.PreRunId=ISNULL(a.InstallationId,a.PreRunId) left join PreRun_SysDevice as c on c.PreRunId=a.ProcessesId left join PreRun_SysDevice as d on d.PreRunId=a.SystemId left join PreRun_SysDevice as e on e.PreRunId=a.SubsystemId where a.PreRunId='{this.TreePreRunId}'";
							 | 
						|||
| 
								 | 
							
								                var driveDt = SQLHelper.GetDataTableRunText(deviceStr);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                list = DataTableToList<FourDecisionScheduleBridDto>(dt);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                foreach (var item in list)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    if (driveDt.Rows.Count > 0)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        item.InstallationName = driveDt.Rows[0]["InstallationName"].ToString();
							 | 
						|||
| 
								 | 
							
								                        item.ProcessesName = driveDt.Rows[0]["ProcessesName"].ToString();
							 | 
						|||
| 
								 | 
							
								                        item.SystemName = driveDt.Rows[0]["SystemName"].ToString();
							 | 
						|||
| 
								 | 
							
								                        item.SubsystemName = driveDt.Rows[0]["SubsystemName"].ToString();
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return list;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 三查四定统计实体
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        public class FourDecisionScheduleBridDto
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            /// <summary>
							 | 
						|||
| 
								 | 
							
								            /// 级别
							 | 
						|||
| 
								 | 
							
								            /// </summary>
							 | 
						|||
| 
								 | 
							
								            public string Level { get; set; }
							 | 
						|||
| 
								 | 
							
								            /// <summary>
							 | 
						|||
| 
								 | 
							
								            /// 装置名称
							 | 
						|||
| 
								 | 
							
								            /// </summary>
							 | 
						|||
| 
								 | 
							
								            public string InstallationName { get; set; }
							 | 
						|||
| 
								 | 
							
								            /// <summary>
							 | 
						|||
| 
								 | 
							
								            /// 工序名称
							 | 
						|||
| 
								 | 
							
								            /// </summary>
							 | 
						|||
| 
								 | 
							
								            public string ProcessesName { get; set; }
							 | 
						|||
| 
								 | 
							
								            /// <summary>
							 | 
						|||
| 
								 | 
							
								            /// 系统名称
							 | 
						|||
| 
								 | 
							
								            /// </summary>
							 | 
						|||
| 
								 | 
							
								            public string SystemName { get; set; }
							 | 
						|||
| 
								 | 
							
								            /// <summary>
							 | 
						|||
| 
								 | 
							
								            /// 子系统名称
							 | 
						|||
| 
								 | 
							
								            /// </summary>
							 | 
						|||
| 
								 | 
							
								            public string SubsystemName { get; set; }
							 | 
						|||
| 
								 | 
							
								            /// <summary>
							 | 
						|||
| 
								 | 
							
								            /// 尾项数量
							 | 
						|||
| 
								 | 
							
								            /// </summary>
							 | 
						|||
| 
								 | 
							
								            public int AllNum { get; set; }
							 | 
						|||
| 
								 | 
							
								            /// <summary>
							 | 
						|||
| 
								 | 
							
								            /// 未关闭尾项数量
							 | 
						|||
| 
								 | 
							
								            /// </summary>
							 | 
						|||
| 
								 | 
							
								            public int NoCloseNum { get; set; }
							 | 
						|||
| 
								 | 
							
								            /// <summary>
							 | 
						|||
| 
								 | 
							
								            /// 已关闭尾项数量
							 | 
						|||
| 
								 | 
							
								            /// </summary>
							 | 
						|||
| 
								 | 
							
								            public int CloseNum { get; set; }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 转换
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// DataTable转换List
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public List<T> DataTableToList<T>(DataTable table)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            List<T> list = new List<T>();
							 | 
						|||
| 
								 | 
							
								            T t = default(T);
							 | 
						|||
| 
								 | 
							
								            PropertyInfo[] propertypes = null;
							 | 
						|||
| 
								 | 
							
								            string tempName = string.Empty;
							 | 
						|||
| 
								 | 
							
								            foreach (DataRow row in table.Rows)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                t = Activator.CreateInstance<T>();
							 | 
						|||
| 
								 | 
							
								                propertypes = t.GetType().GetProperties();
							 | 
						|||
| 
								 | 
							
								                foreach (PropertyInfo pro in propertypes)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    tempName = pro.Name;
							 | 
						|||
| 
								 | 
							
								                    if (table.Columns.Contains(tempName))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        object value = row[tempName];
							 | 
						|||
| 
								 | 
							
								                        if (!value.ToString().Equals(""))
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            pro.SetValue(t, value, null);
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                list.Add(t);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            return list.Count == 0 ? new List<T>() : list;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |