using BLL;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using Model;
using System.Collections;
using Apache.NMS.ActiveMQ.Threads;
using FineUIPro.Web.DataShow;
using Newtonsoft.Json.Linq;
using Aspose.Words.Lists;
using System.Web.UI.DataVisualization.Charting;
using static FineUIPro.Web.TestRun.Report.PreRunSchedule;
using System.Reflection;
using static FineUIPro.Web.TestRun.Report.TestRunSchedule;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using System.IO;
using NPOI.SS.Formula.Functions;
using FineUIPro.Web.ProjectData;
using System.Web.Services.Description;
namespace FineUIPro.Web.TestRun.Report
{
    public partial class ScheduleSetUp : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                TabStrip1.ActiveTabIndex = 0;
                DataBridYsc();
            }
        }
        #region 预试车
        /// 
        /// 预试车绑定
        /// 
        public void DataBridYsc()
        {
            var result = YscData();
            GridYsc.DataSource = result;
            TabStrip1.ActiveTabIndex = 0;
            GridYsc.DataBind();
            JObject summary = new JObject();
            summary.Add("AllNum", result.Sum(x => x.AllNum));
            summary.Add("NotStartedNum", result.Sum(x => x.NotStartedNum));
            summary.Add("ProgressNum", result.Sum(x => x.ProgressNum));
            summary.Add("CompleteNum", result.Sum(x => x.CompleteNum));
            GridYsc.SummaryData = summary;
        }
        /// 
        /// 预试车数据
        /// 
        /// 
        public List YscData()
        {
            var result = new List();
            if (Funs.DB.Run_ScheduleSetUp.Count(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 1) > 0)
            {
                var query = from a in Funs.DB.Run_ScheduleSetUp
                            join b in Funs.DB.PreRun_WorkPackage on a.WorkPackId equals b.WorkPackId
                            where a.States == 1 && a.ProjectId == this.CurrUser.LoginProjectId
                            orderby b.Sort ascending
                            select new Run_ScheduleSetUpDto
                            {
                                ScheduleId = a.ScheduleId,
                                WorkPackId = a.WorkPackId,
                                WorkPackName = b.WorkPackName,
                                ProjectId = a.ProjectId,
                                States = a.States,
                                AllNum = a.AllNum,
                                NotStartedNum = a.NotStartedNum,
                                ProgressNum = a.ProgressNum,
                                CompleteNum = a.CompleteNum,
                                CompleteRate = a.CompleteRate,
                                AddUser = a.AddUser,
                                AddTime = a.AddTime,
                                Sort = a.Sort
                            };
                result = query.ToList();
            }
            else
            {
                List SubSystemIds = new List();
                var devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4).ToList();
                if (devices.Count > 0)
                {
                    SubSystemIds = devices.ConvertAll(x => x.PreRunId);
                }
                string allStr = $"select a.SubSystemId,a.SystemId,b.WorkPackId,b.WorkPackName,b.WorkPackType,(select count(1) from PreRun_SubPropertySelect as gd where gd.SubSystemId = a.SubSystemId) as GdallNum,(select count(1) from PreRun_SubTechnologySelect as sb where sb.SubSystemId = a.SubSystemId) as SballNum,(select count(1) from PreRun_SubInstrumentSelect as sy where sy.SubSystemId = a.SubSystemId) as SyallNum from PreRun_SubSysWorkPackage as a inner join PreRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where a.SubSystemId in ('{string.Join("','", SubSystemIds)}') order by a.WorkPackCode asc";
                var dt = SQLHelper.GetDataTableRunText(allStr);
                string inspectStr = $"select a.WorkPackId,b.WorkPackName,b.Sort,SUM(case ISNULL(a.InspectIsClose, 0) when 1 then 1 else 0 end) as CloseNum,SUM(case ISNULL(a.InspectIsClose, 0) when 0 then 1 else 0 end) as NoCloseNum,COUNT(1) as AllNum from PreRun_SubInspectTerm as a inner join PreRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where 1=1 and a.ProjectId = '{this.CurrUser.LoginProjectId}' and a.SubSystemId in ('{string.Join("','", SubSystemIds)}') group by a.WorkPackId,b.WorkPackName,b.Sort order by b.Sort asc";
                var inspectDt = SQLHelper.GetDataTableRunText(inspectStr);
                var inspectlist = DataTableToList(inspectDt);
                if (dt.Rows.Count > 0)
                {
                    //获取所有子系统数量
                    var inspects = Funs.DB.PreRun_SubInspectTerm.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && SubSystemIds.Contains(x.SubSystemId));
                    var querylist = DataTableToList(dt);
                    var queryGroup = querylist.GroupBy(x => new { x.WorkPackId, x.WorkPackName, x.WorkPackType }).Select(p => new
                    {
                        p.Key.WorkPackId,
                        p.Key.WorkPackName,
                        p.Key.WorkPackType
                    });
                    int i = 1;
                    foreach (var itemPack in queryGroup)
                    {
                        var itemQueryList = querylist.Where(x => x.WorkPackId == itemPack.WorkPackId).ToList();
                        var model = new Run_ScheduleSetUpDto();
                        model.ScheduleId = Guid.NewGuid().ToString();
                        model.WorkPackId = itemPack.WorkPackId;
                        model.WorkPackName = itemPack.WorkPackName;
                        model.ProjectId = this.CurrUser.LoginProjectId;
                        model.States = 1;
                        model.AllNum = itemQueryList.Count(x => x.WorkPackId == itemPack.WorkPackId);
                        model.ProgressNum = 0;
                        model.CompleteNum = 0;
                        model.NotStartedNum = 0;
                        var subsystemids = itemQueryList.ConvertAll(a => a.SubSystemId).Distinct();
                        foreach (var itemsubid in subsystemids)
                        {
                            if (inspects.Count(x => x.SubSystemId == itemsubid) > 0)
                            {
                                var itemQuerylist = itemQueryList.FirstOrDefault(x => x.SubSystemId == itemsubid && x.WorkPackId == itemPack.WorkPackId);
                                var allNum = itemQuerylist.GdallNum + itemQuerylist.SballNum + itemQuerylist.SyallNum;
                                if (inspects.Count(x => x.SubInspectId == itemsubid && x.InspectIsClose != 1) > 0)
                                {
                                    model.ProgressNum += 1;
                                }
                                else
                                {
                                    var closeInspect = inspects.Where(x => x.SubInspectId == itemsubid && x.InspectIsClose == 1);
                                    var closeNums = closeInspect.Count() > 0 ? closeInspect.Select(x => x.PropertyTechnologyId.Split(',').Count()).Sum(x => x) : 0;
                                    if (allNum > closeNums)
                                    {
                                        model.ProgressNum += 1;
                                    }
                                    else
                                    {
                                        model.CompleteNum += 1;
                                    }
                                }
                            }
                            else
                            {
                                model.NotStartedNum += 1;
                            }
                        }
                        var rate = model.CompleteNum > 0 ? (decimal)Math.Round((float)model.CompleteNum / (float)model.AllNum * 100, 2, MidpointRounding.AwayFromZero) : 0;
                        if (rate > 100) rate = 100;
                        model.CompleteRate = rate;
                        model.AddUser = this.CurrUser.UserId;
                        model.AddTime = DateTime.Now;
                        model.Sort = i;
                        result.Add(model);
                        i++;
                    }
                }
            }
            return result;
        }
        /// 
        /// 预试车重置
        /// 
        protected void btnYscReset_Click(object sender, EventArgs e)
        {
            var list = Funs.DB.Run_ScheduleSetUp.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 1);
            if (list.Count() > 0)
            {
                Funs.DB.Run_ScheduleSetUp.DeleteAllOnSubmit(list);
                Funs.DB.SubmitChanges();
            }
            DataBridYsc();
            ShowNotify("重置成功!", MessageBoxIcon.Success);
        }
        /// 
        /// 预试车保存
        /// 
        protected void btnYscSave_Click(object sender, EventArgs e)
        {
            try
            {
                var deletelist = Funs.DB.Run_ScheduleSetUp.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 1);
                Funs.DB.Run_ScheduleSetUp.DeleteAllOnSubmit(deletelist);
                Funs.DB.SubmitChanges();
                var addList = new List();
                JArray mergedData = GridYsc.GetMergedData();
                foreach (JObject mergedRow in mergedData)
                {
                    string status = mergedRow.Value("status");
                    JObject values = mergedRow.Value("values");
                    int i = mergedRow.Value("index");
                    var model = new Run_ScheduleSetUp();
                    model.ScheduleId = this.GridYsc.Rows[i].DataKeys[0].ToString();
                    model.WorkPackId = this.GridYsc.Rows[i].DataKeys[1].ToString();
                    model.ProjectId = this.CurrUser.LoginProjectId;
                    model.States = 1;
                    model.AllNum = !string.IsNullOrWhiteSpace(values.Value("AllNum")) ? int.Parse(values.Value("AllNum")) : 0;
                    model.NotStartedNum = !string.IsNullOrWhiteSpace(values.Value("NotStartedNum")) ? int.Parse(values.Value("NotStartedNum")) : 0;
                    model.ProgressNum = !string.IsNullOrWhiteSpace(values.Value("ProgressNum")) ? int.Parse(values.Value("ProgressNum")) : 0;
                    model.CompleteNum = !string.IsNullOrWhiteSpace(values.Value("CompleteNum")) ? int.Parse(values.Value("CompleteNum")) : 0;
                    var rate = model.CompleteNum > 0 ? (decimal)Math.Round((float)model.CompleteNum / (float)model.AllNum * 100, 2, MidpointRounding.AwayFromZero) : 0;
                    if (rate > 100) rate = 100;
                    model.CompleteRate = rate;
                    model.AddUser = this.CurrUser.UserId;
                    model.AddTime = DateTime.Now;
                    model.Sort = i;
                    addList.Add(model);
                }
                Funs.DB.Run_ScheduleSetUp.InsertAllOnSubmit(addList);
                Funs.DB.SubmitChanges();
                DataBridYsc();
                ShowNotify("保存成功!");
            }
            catch (Exception ex)
            {
                ShowNotify(ex.Message, MessageBoxIcon.Error);
            }
        }
        /// 
        /// 预试车导出
        /// 
        /// 
        /// 
        protected void btnYscExport_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 = YscData();
            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));
                #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, 4);
                //行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("已完成数量");
                #endregion
                #region 表格
                var start = 1;
                var end = result.Count;
                ws = ExcelCreateRowTitle(ws, hssfworkbook, style, start, end, 0, 4);
                //数据
                var dataIndex = 1;
                foreach (var item in result)
                {
                    ws.GetRow(dataIndex).GetCell(0).SetCellValue(item.WorkPackName);
                    ws.GetRow(dataIndex).GetCell(1).SetCellValue(item.AllNum.ToString());
                    ws.GetRow(dataIndex).GetCell(2).SetCellValue(item.NotStartedNum.ToString());
                    ws.GetRow(dataIndex).GetCell(3).SetCellValue(item.ProgressNum.ToString());
                    ws.GetRow(dataIndex).GetCell(4).SetCellValue(item.CompleteNum.ToString());
                    dataIndex++;
                }
                #endregion
                #region 尾部
                ws = ExcelCreateRowTitle(ws, hssfworkbook, style, end + 1, end + 1, 0, 4);
                ws.GetRow(end + 1).GetCell(0).SetCellValue("合计");
                ws.GetRow(end + 1).GetCell(1).SetCellValue(result.Count > 0 ? result.Sum(x => x.AllNum).ToString() : "0");
                ws.GetRow(end + 1).GetCell(2).SetCellValue(result.Count > 0 ? result.Sum(x => x.NotStartedNum).ToString() : "0");
                ws.GetRow(end + 1).GetCell(3).SetCellValue(result.Count > 0 ? result.Sum(x => x.ProgressNum).ToString() : "0");
                ws.GetRow(end + 1).GetCell(4).SetCellValue(result.Count > 0 ? result.Sum(x => x.CompleteNum).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 试车
        /// 
        /// 试车绑定
        /// 
        public void DataBridSc()
        {
            var result = ScData();
            GridSc.DataSource = result;
            TabStrip1.ActiveTabIndex = 1;
            GridSc.DataBind();
            JObject summary = new JObject();
            summary.Add("AllNum", result.Sum(x => x.AllNum));
            summary.Add("NotStartedNum", result.Sum(x => x.NotStartedNum));
            summary.Add("ProgressNum", result.Sum(x => x.ProgressNum));
            summary.Add("CompleteNum", result.Sum(x => x.CompleteNum));
            GridSc.SummaryData = summary;
        }
        /// 
        /// 试车数据
        /// 
        /// 
        public List ScData()
        {
            var result = new List();
            if (Funs.DB.Run_ScheduleSetUp.Count(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 2) > 0)
            {
                var query = from a in Funs.DB.Run_ScheduleSetUp
                            join b in Funs.DB.TestRun_WorkPackage on a.WorkPackId equals b.WorkPackId
                            where a.States == 2 && a.ProjectId == this.CurrUser.LoginProjectId
                            orderby b.Sort ascending
                            select new Run_ScheduleSetUpDto
                            {
                                ScheduleId = a.ScheduleId,
                                WorkPackId = a.WorkPackId,
                                WorkPackName = b.WorkPackName,
                                ProjectId = a.ProjectId,
                                States = a.States,
                                AllNum = a.AllNum,
                                NotStartedNum = a.NotStartedNum,
                                ProgressNum = a.ProgressNum,
                                CompleteNum = a.CompleteNum,
                                CompleteRate = a.CompleteRate,
                                AddUser = a.AddUser,
                                AddTime = a.AddTime,
                                Sort = a.Sort
                            };
                result = query.ToList();
            }
            else
            {
                List SystemIds = new List();
                var devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 3).ToList();
                if (devices.Count > 0)
                {
                    SystemIds = devices.ConvertAll(x => x.PreRunId);
                }
                string allStr = $"select b.WorkPackId,b.WorkPackName,COUNT(a.SystemId) as WorkPackNum from TestRun_SubSysWorkPackage as a inner join TestRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where a.SystemId in ('{string.Join("','", SystemIds)}') group by b.WorkPackId,b.WorkPackName";
                var dt = SQLHelper.GetDataTableRunText(allStr);
                if (dt.Rows.Count > 0)
                {
                    string inspectStr = $"select a.WorkPackId,b.WorkPackName,b.Sort,SUM(case ISNULL(a.InspectIsClose, 0) when 1 then 1 else 0 end) as CloseNum,SUM(case ISNULL(a.InspectIsClose, 0) when 0 then 1 else 0 end) as NoCloseNum,COUNT(1) as AllNum from TestRun_SubInspectTerm as a inner join TestRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where 1=1 and a.ProjectId = '{this.CurrUser.LoginProjectId}' group by a.WorkPackId,b.WorkPackName,b.Sort order by b.Sort asc";
                    var inspectDt = SQLHelper.GetDataTableRunText(inspectStr);
                    var inspectlist = DataTableToList(inspectDt);
                    int i = 1;
                    var list = DataTableToList(dt);
                    foreach (var item in list)
                    {
                        var model = new Run_ScheduleSetUpDto();
                        model.ScheduleId = Guid.NewGuid().ToString();
                        model.WorkPackId = item.WorkPackId;
                        model.WorkPackName = item.WorkPackName;
                        model.ProjectId = this.CurrUser.LoginProjectId;
                        model.States = 2;
                        if (inspectlist.Count(x => x.WorkPackId == item.WorkPackId) > 0)
                        {
                            var itemInspect = inspectlist.FirstOrDefault(x => x.WorkPackId == item.WorkPackId);
                            model.AllNum = itemInspect.AllNum;
                            model.ProgressNum = itemInspect.NoCloseNum;
                            model.NotStartedNum = 0;
                            model.CompleteNum = itemInspect.CloseNum;
                        }
                        else
                        {
                            model.AllNum = 1;
                            model.ProgressNum = 0;
                            model.CompleteNum = 0;
                            model.NotStartedNum = 1;
                        }
                        model.CompleteRate = model.CompleteNum > 0 ? (decimal)Math.Round((float)model.CompleteNum / (float)model.AllNum, 2, MidpointRounding.AwayFromZero) : 0;
                        model.AddUser = this.CurrUser.UserId;
                        model.AddTime = DateTime.Now;
                        model.Sort = i;
                        result.Add(model);
                        i++;
                    }
                }
            }
            return result;
        }
        /// 
        /// 试车重置
        /// 
        protected void btnScReset_Click(object sender, EventArgs e)
        {
            var list = Funs.DB.Run_ScheduleSetUp.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 2);
            if (list.Count() > 0)
            {
                Funs.DB.Run_ScheduleSetUp.DeleteAllOnSubmit(list);
                Funs.DB.SubmitChanges();
            }
            DataBridSc();
            ShowNotify("重置成功!", MessageBoxIcon.Success);
        }
        /// 
        /// 试车保存
        /// 
        protected void btnScSave_Click(object sender, EventArgs e)
        {
            try
            {
                var deletelist = Funs.DB.Run_ScheduleSetUp.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 2);
                Funs.DB.Run_ScheduleSetUp.DeleteAllOnSubmit(deletelist);
                Funs.DB.SubmitChanges();
                var addList = new List();
                JArray mergedData = GridSc.GetMergedData();
                foreach (JObject mergedRow in mergedData)
                {
                    string status = mergedRow.Value("status");
                    JObject values = mergedRow.Value("values");
                    int i = mergedRow.Value("index");
                    var model = new Run_ScheduleSetUp();
                    model.ScheduleId = this.GridSc.Rows[i].DataKeys[0].ToString();
                    model.WorkPackId = this.GridSc.Rows[i].DataKeys[1].ToString();
                    model.ProjectId = this.CurrUser.LoginProjectId;
                    model.States = 2;
                    model.AllNum = !string.IsNullOrWhiteSpace(values.Value("AllNum")) ? int.Parse(values.Value("AllNum")) : 0;
                    model.NotStartedNum = !string.IsNullOrWhiteSpace(values.Value("NotStartedNum")) ? int.Parse(values.Value("NotStartedNum")) : 0;
                    model.ProgressNum = !string.IsNullOrWhiteSpace(values.Value("ProgressNum")) ? int.Parse(values.Value("ProgressNum")) : 0;
                    model.CompleteNum = !string.IsNullOrWhiteSpace(values.Value("CompleteNum")) ? int.Parse(values.Value("CompleteNum")) : 0;
                    model.CompleteRate = model.CompleteNum > 0 ? (decimal)Math.Round((float)model.CompleteNum / (float)model.AllNum, 2, MidpointRounding.AwayFromZero) : 0;
                    model.AddUser = this.CurrUser.UserId;
                    model.AddTime = DateTime.Now;
                    model.Sort = i;
                    addList.Add(model);
                }
                Funs.DB.Run_ScheduleSetUp.InsertAllOnSubmit(addList);
                Funs.DB.SubmitChanges();
                DataBridSc();
                ShowNotify("保存成功!");
            }
            catch (Exception ex)
            {
                ShowNotify(ex.Message, MessageBoxIcon.Error);
            }
        }
        /// 
        /// 试车导出
        /// 
        protected void btnScExport_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 = ScData();
            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));
                #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, 4);
                //行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("已完成数量");
                #endregion
                #region 表格
                var start = 1;
                var end = result.Count;
                ws = ExcelCreateRowTitle(ws, hssfworkbook, style, start, end, 0, 4);
                //数据
                var dataIndex = 1;
                foreach (var item in result)
                {
                    ws.GetRow(dataIndex).GetCell(0).SetCellValue(item.WorkPackName);
                    ws.GetRow(dataIndex).GetCell(1).SetCellValue(item.AllNum.ToString());
                    ws.GetRow(dataIndex).GetCell(2).SetCellValue(item.NotStartedNum.ToString());
                    ws.GetRow(dataIndex).GetCell(3).SetCellValue(item.ProgressNum.ToString());
                    ws.GetRow(dataIndex).GetCell(4).SetCellValue(item.CompleteNum.ToString());
                    dataIndex++;
                }
                #endregion
                #region 尾部
                ws = ExcelCreateRowTitle(ws, hssfworkbook, style, end + 1, end + 1, 0, 4);
                ws.GetRow(end + 1).GetCell(0).SetCellValue("合计");
                ws.GetRow(end + 1).GetCell(1).SetCellValue(result.Count > 0 ? result.Sum(x => x.AllNum).ToString() : "0");
                ws.GetRow(end + 1).GetCell(2).SetCellValue(result.Count > 0 ? result.Sum(x => x.NotStartedNum).ToString() : "0");
                ws.GetRow(end + 1).GetCell(3).SetCellValue(result.Count > 0 ? result.Sum(x => x.ProgressNum).ToString() : "0");
                ws.GetRow(end + 1).GetCell(4).SetCellValue(result.Count > 0 ? result.Sum(x => x.CompleteNum).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 三查四定
        /// 
        /// 三查四定绑定
        /// 
        public void DataBridScsd()
        {
            var result = ScsdData();
            GridScsd.DataSource = result;
            TabStrip1.ActiveTabIndex = 2;
            GridScsd.DataBind();
            JObject summary = new JObject();
            summary.Add("AllNum", result.Sum(x => x.AllNum));
            summary.Add("ProgressNum", result.Sum(x => x.ProgressNum));
            summary.Add("CompleteNum", result.Sum(x => x.CompleteNum));
            GridScsd.SummaryData = summary;
        }
        /// 
        /// 三查四定数据
        /// 
        /// 
        public List ScsdData()
        {
            var result = new List();
            if (Funs.DB.Run_ScheduleSetUp.Count(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 3) > 0)
            {
                result = Funs.DB.Run_ScheduleSetUp.Where(a => a.States == 3 && a.ProjectId == this.CurrUser.LoginProjectId).OrderBy(o => o.LevelName).ToList();
            }
            else
            {
                var list = new List();
                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.ProjectId='{this.CurrUser.LoginProjectId}' group by a.Level  order by a.Level asc";
                var dt = SQLHelper.GetDataTableRunText(allStr);
                if (dt.Rows.Count > 0)
                {
                    int i = 1;
                    list = DataTableToList(dt);
                    foreach (var item in list)
                    {
                        var model = new Run_ScheduleSetUp();
                        model.ScheduleId = Guid.NewGuid().ToString();
                        model.ProjectId = this.CurrUser.LoginProjectId;
                        model.LevelName = item.Level;
                        model.States = 3;
                        model.AllNum = item.AllNum;
                        model.ProgressNum = item.NoCloseNum;
                        model.CompleteNum = item.CloseNum;
                        model.CompleteRate = model.CompleteNum > 0 ? (decimal)Math.Round((float)model.CompleteNum / (float)model.AllNum, 2, MidpointRounding.AwayFromZero) : 0;
                        model.AddUser = this.CurrUser.UserId;
                        model.AddTime = DateTime.Now;
                        model.Sort = i;
                        result.Add(model);
                        i++;
                    }
                }
            }
            return result;
        }
        /// 
        /// 三查四定重置
        /// 
        protected void btnScsdReset_Click(object sender, EventArgs e)
        {
            var list = Funs.DB.Run_ScheduleSetUp.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 3);
            if (list.Count() > 0)
            {
                Funs.DB.Run_ScheduleSetUp.DeleteAllOnSubmit(list);
                Funs.DB.SubmitChanges();
            }
            DataBridScsd();
            ShowNotify("重置成功!", MessageBoxIcon.Success);
        }
        /// 
        /// 三查四定保存
        /// 
        protected void btnScsdSave_Click(object sender, EventArgs e)
        {
            try
            {
                var deletelist = Funs.DB.Run_ScheduleSetUp.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 3);
                Funs.DB.Run_ScheduleSetUp.DeleteAllOnSubmit(deletelist);
                Funs.DB.SubmitChanges();
                var addList = new List();
                JArray mergedData = GridScsd.GetMergedData();
                foreach (JObject mergedRow in mergedData)
                {
                    string status = mergedRow.Value("status");
                    JObject values = mergedRow.Value("values");
                    int i = mergedRow.Value("index");
                    var model = new Run_ScheduleSetUp();
                    model.ScheduleId = this.GridScsd.Rows[i].DataKeys[0].ToString();
                    model.LevelName = this.GridScsd.Rows[i].DataKeys[1].ToString();
                    model.ProjectId = this.CurrUser.LoginProjectId;
                    model.States = 3;
                    model.AllNum = !string.IsNullOrWhiteSpace(values.Value("AllNum")) ? int.Parse(values.Value("AllNum")) : 0;
                    model.ProgressNum = !string.IsNullOrWhiteSpace(values.Value("ProgressNum")) ? int.Parse(values.Value("ProgressNum")) : 0;
                    model.CompleteNum = !string.IsNullOrWhiteSpace(values.Value("CompleteNum")) ? int.Parse(values.Value("CompleteNum")) : 0;
                    model.CompleteRate = model.CompleteNum > 0 ? (decimal)Math.Round((float)model.CompleteNum / (float)model.AllNum, 2, MidpointRounding.AwayFromZero) : 0;
                    model.AddUser = this.CurrUser.UserId;
                    model.AddTime = DateTime.Now;
                    model.Sort = i;
                    addList.Add(model);
                }
                Funs.DB.Run_ScheduleSetUp.InsertAllOnSubmit(addList);
                Funs.DB.SubmitChanges();
                DataBridScsd();
                ShowNotify("保存成功!");
            }
            catch (Exception ex)
            {
                ShowNotify(ex.Message, MessageBoxIcon.Error);
            }
        }
        /// 
        /// 三查四定导出
        /// 
        /// 
        /// 
        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 = ScsdData();
            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));
                #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, 3);
                //行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("已完成数量");
                #endregion
                #region 表格
                var start = 1;
                var end = result.Count;
                ws = ExcelCreateRowTitle(ws, hssfworkbook, style, start, end, 0, 3);
                //数据
                var dataIndex = 1;
                foreach (var item in result)
                {
                    ws.GetRow(dataIndex).GetCell(0).SetCellValue(item.LevelName);
                    ws.GetRow(dataIndex).GetCell(1).SetCellValue(item.AllNum.ToString());
                    ws.GetRow(dataIndex).GetCell(2).SetCellValue(item.ProgressNum.ToString());
                    ws.GetRow(dataIndex).GetCell(3).SetCellValue(item.CompleteNum.ToString());
                    dataIndex++;
                }
                #endregion
                #region 尾部
                ws = ExcelCreateRowTitle(ws, hssfworkbook, style, end + 1, end + 1, 0, 3);
                ws.GetRow(end + 1).GetCell(0).SetCellValue("合计");
                ws.GetRow(end + 1).GetCell(1).SetCellValue(result.Count > 0 ? result.Sum(x => x.AllNum).ToString() : "0");
                ws.GetRow(end + 1).GetCell(2).SetCellValue(result.Count > 0 ? result.Sum(x => x.ProgressNum).ToString() : "0");
                ws.GetRow(end + 1).GetCell(3).SetCellValue(result.Count > 0 ? result.Sum(x => x.CompleteNum).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 投料试车
        /// 
        /// 投料试车绑定
        /// 
        public void gvFeedingBrid()
        {
            var result = new List();
            if (Funs.DB.Run_ParameterSettings.Count(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 1) == 0)
            {
                var query = from runsys in Funs.DB.PreRun_SysDevice
                            join install in Funs.DB.PreRun_SysDevice on runsys.InstallationId equals install.PreRunId
                            join proce in Funs.DB.PreRun_SysDevice on runsys.ProcessesId equals proce.PreRunId
                            join project in Funs.DB.Base_Project on runsys.ProjectId equals project.ProjectId
                            where runsys.PreRunLevel == 3 && runsys.ProjectId == this.CurrUser.LoginProjectId
                            orderby runsys.Sort ascending
                            select new ParameterSettingsDto()
                            {
                                ProjectId = this.CurrUser.LoginProjectId,
                                ProjectName = project.ProjectName,
                                InstallationId = runsys.InstallationId,
                                InstallationName = install.PreRunName,
                                ProcessesId = runsys.ProcessesId,
                                ProcessesName = proce.PreRunName,
                                SystemId = runsys.PreRunId,
                                SystemName = runsys.PreRunName,
                                States = 1,
                                RunType = 1
                            };
                if (query.Count() > 0)
                {
                    result = query.ToList();
                    result.ForEach(x => { x.SettingsId = Guid.NewGuid().ToString(); });
                }
            }
            else
            {
                var query = from setting in Funs.DB.Run_ParameterSettings
                            join install in Funs.DB.PreRun_SysDevice on setting.InstallationId equals install.PreRunId
                            join proce in Funs.DB.PreRun_SysDevice on setting.ProcessesId equals proce.PreRunId
                            join sys in Funs.DB.PreRun_SysDevice on setting.SystemId equals sys.PreRunId
                            join project in Funs.DB.Base_Project on setting.ProjectId equals project.ProjectId
                            where setting.ProjectId == this.CurrUser.LoginProjectId && setting.States == 1
                            orderby setting.Sort ascending
                            select new ParameterSettingsDto()
                            {
                                SettingsId = setting.SettingsId,
                                ProjectId = setting.ProjectId,
                                ProjectName = project.ProjectName,
                                InstallationId = setting.InstallationId,
                                InstallationName = install.PreRunName,
                                ProcessesId = setting.ProcessesId,
                                ProcessesName = proce.PreRunName,
                                SystemId = setting.SystemId,
                                SystemName = sys.PreRunName,
                                States = setting.States,
                                RunType = setting.RunType,
                                AddUser = setting.AddUser,
                                AddTime = setting.AddTime,
                                Sort = setting.Sort,
                            };
                if (query.Count() > 0)
                {
                    result = query.ToList();
                }
            }
            gvFeeding.DataSource = result;
            TabStrip1.ActiveTabIndex = 3;
            gvFeeding.DataBind();
        }
        /// 
        /// 投料试车保存
        /// 
        protected void btnFeedingSave_Click(object sender, EventArgs e)
        {
            try
            {
                var deletelist = Funs.DB.Run_ParameterSettings.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 1);
                Funs.DB.Run_ParameterSettings.DeleteAllOnSubmit(deletelist);
                Funs.DB.SubmitChanges();
                var addList = new List();
                JArray mergedData = gvFeeding.GetMergedData();
                foreach (JObject mergedRow in mergedData)
                {
                    string status = mergedRow.Value("status");
                    JObject values = mergedRow.Value("values");
                    int i = mergedRow.Value("index");
                    var model = new Run_ParameterSettings();
                    model.SettingsId = this.gvFeeding.Rows[i].DataKeys[0].ToString();
                    model.ProjectId = this.CurrUser.LoginProjectId;
                    model.InstallationId = this.gvFeeding.Rows[i].DataKeys[1].ToString();
                    model.ProcessesId = this.gvFeeding.Rows[i].DataKeys[2].ToString();
                    model.SystemId = this.gvFeeding.Rows[i].DataKeys[3].ToString();
                    model.States = 1;
                    var runtype = !string.IsNullOrWhiteSpace(values.Value("RunType")) ? values.Value("RunType") : string.Empty;
                    if (!string.IsNullOrWhiteSpace(runtype))
                    {
                        model.RunType = int.Parse(runtype);
                    }
                    model.AddUser = this.CurrUser.UserId;
                    model.AddTime = DateTime.Now;
                    model.Sort = i;
                    addList.Add(model);
                }
                Funs.DB.Run_ParameterSettings.InsertAllOnSubmit(addList);
                Funs.DB.SubmitChanges();
                gvFeedingBrid();
                ShowNotify("保存成功!");
            }
            catch (Exception ex)
            {
                ShowNotify(ex.Message, MessageBoxIcon.Error);
            }
        }
        #endregion
        #region 生产性能考核
        /// 
        /// 生产性能考核绑定
        /// 
        public void PerformPageInit()
        {
            var model = Funs.DB.Run_ProductionSettings.FirstOrDefault(x => x.ProjectId == this.CurrUser.LoginProjectId);
            if (model != null)
            {
                if (model.States == 1)
                {
                    txtStartData.Hidden = true;
                    txtEndData.Hidden = true;
                    rbtNotStarted.Checked = true;
                }
                else if (model.States == 2)
                {
                    txtStartData.Hidden = false;
                    txtEndData.Hidden = false;
                    rbtInProgress.Checked = true;
                    txtStartData.Text = model.StartTime.Value.ToString("yyyy-MM-dd");
                    txtEndData.Text = model.EndTime.Value.ToString("yyyy-MM-dd");
                }
                else if (model.States == 2)
                {
                    txtStartData.Hidden = true;
                    txtEndData.Hidden = true;
                    rbtComplete.Checked = true;
                }
            }
        }
        /// 
        /// 保存
        /// 
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            bool add = false;
            if (rbtInProgress.Checked && string.IsNullOrWhiteSpace(txtStartData.Text))
            {
                ShowNotify("开始时间不能为空!", MessageBoxIcon.Warning);
                return;
            }
            if (rbtInProgress.Checked && string.IsNullOrWhiteSpace(txtEndData.Text))
            {
                ShowNotify("结束时间不能为空!", MessageBoxIcon.Warning);
                return;
            }
            var state = 0;
            if (rbtNotStarted.Checked)
            {
                state = 1;
            }
            if (rbtInProgress.Checked)
            {
                state = 2;
            }
            if (rbtComplete.Checked)
            {
                state = 3;
            }
            var model = Funs.DB.Run_ProductionSettings.FirstOrDefault(x => x.ProjectId == this.CurrUser.LoginProjectId);
            if (model == null)
            {
                add = true;
                model = new Run_ProductionSettings();
                model.ProductionId = Guid.NewGuid().ToString();
                model.ProjectId = this.CurrUser.LoginProjectId;
                model.AddUser = this.CurrUser.UserId;
                model.AddTime = DateTime.Now;
            }
            model.States = state;
            if (state == 2)
            {
                model.StartTime = DateTime.Parse(txtStartData.Text.ToString());
                model.EndTime = DateTime.Parse(txtEndData.Text.ToString());
            }
            else
            {
                model.StartTime = null;
                model.EndTime = null;
            }
            if (add) Funs.DB.Run_ProductionSettings.InsertOnSubmit(model);
            Funs.DB.SubmitChanges();
            PerformPageInit();
            ShowNotify("保存成功!");
        }
        /// 
        /// 考核选择
        /// 
        protected void rbtCheck_CheckedChanged(object sender, CheckedEventArgs e)
        {
            if (rbtInProgress.Checked)
            {
                txtStartData.Hidden = false;
                txtEndData.Hidden = false;
            }
            else
            {
                txtStartData.Hidden = true;
                txtEndData.Hidden = true;
            }
        }
        #endregion
        #region 生产试运行
        /// 
        ///生产试运行绑定
        /// 
        public void gvProducBrid()
        {
            var result = new List();
            if (Funs.DB.Run_ParameterSettings.Count(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 2) == 0)
            {
                var query = from runsys in Funs.DB.PreRun_SysDevice
                            join install in Funs.DB.PreRun_SysDevice on runsys.InstallationId equals install.PreRunId
                            join proce in Funs.DB.PreRun_SysDevice on runsys.ProcessesId equals proce.PreRunId
                            join project in Funs.DB.Base_Project on runsys.ProjectId equals project.ProjectId
                            where runsys.PreRunLevel == 3 && runsys.ProjectId == this.CurrUser.LoginProjectId
                            orderby runsys.Sort ascending
                            select new ParameterSettingsDto()
                            {
                                ProjectId = this.CurrUser.LoginProjectId,
                                ProjectName = project.ProjectName,
                                InstallationId = runsys.InstallationId,
                                InstallationName = install.PreRunName,
                                ProcessesId = runsys.ProcessesId,
                                ProcessesName = proce.PreRunName,
                                SystemId = runsys.PreRunId,
                                SystemName = runsys.PreRunName,
                                States = 2,
                                RunType = 1
                            };
                if (query.Count() > 0)
                {
                    result = query.ToList();
                    result.ForEach(x => { x.SettingsId = Guid.NewGuid().ToString(); });
                }
            }
            else
            {
                var query = from setting in Funs.DB.Run_ParameterSettings
                            join install in Funs.DB.PreRun_SysDevice on setting.InstallationId equals install.PreRunId
                            join proce in Funs.DB.PreRun_SysDevice on setting.ProcessesId equals proce.PreRunId
                            join sys in Funs.DB.PreRun_SysDevice on setting.SystemId equals sys.PreRunId
                            join project in Funs.DB.Base_Project on setting.ProjectId equals project.ProjectId
                            where setting.ProjectId == this.CurrUser.LoginProjectId && setting.States == 2
                            orderby setting.Sort ascending
                            select new ParameterSettingsDto()
                            {
                                SettingsId = setting.SettingsId,
                                ProjectId = setting.ProjectId,
                                ProjectName = project.ProjectName,
                                InstallationId = setting.InstallationId,
                                InstallationName = install.PreRunName,
                                ProcessesId = setting.ProcessesId,
                                ProcessesName = proce.PreRunName,
                                SystemId = setting.SystemId,
                                SystemName = sys.PreRunName,
                                States = setting.States,
                                RunType = setting.RunType,
                                AddUser = setting.AddUser,
                                AddTime = setting.AddTime,
                                Sort = setting.Sort,
                            };
                if (query.Count() > 0)
                {
                    result = query.ToList();
                }
            }
            gvProduc.DataSource = result;
            TabStrip1.ActiveTabIndex = 5;
            gvProduc.DataBind();
        }
        /// 
        /// 生产试运行保存
        /// 
        protected void btnProducSave_Click(object sender, EventArgs e)
        {
            try
            {
                var deletelist = Funs.DB.Run_ParameterSettings.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 2);
                Funs.DB.Run_ParameterSettings.DeleteAllOnSubmit(deletelist);
                Funs.DB.SubmitChanges();
                var addList = new List();
                JArray mergedData = gvProduc.GetMergedData();
                foreach (JObject mergedRow in mergedData)
                {
                    string status = mergedRow.Value("status");
                    JObject values = mergedRow.Value("values");
                    int i = mergedRow.Value("index");
                    var model = new Run_ParameterSettings();
                    model.SettingsId = this.gvProduc.Rows[i].DataKeys[0].ToString();
                    model.ProjectId = this.CurrUser.LoginProjectId;
                    model.InstallationId = this.gvProduc.Rows[i].DataKeys[1].ToString();
                    model.ProcessesId = this.gvProduc.Rows[i].DataKeys[2].ToString();
                    model.SystemId = this.gvProduc.Rows[i].DataKeys[3].ToString();
                    model.States = 2;
                    var runtype = !string.IsNullOrWhiteSpace(values.Value("RunType")) ? values.Value("RunType") : string.Empty;
                    if (!string.IsNullOrWhiteSpace(runtype))
                    {
                        model.RunType = int.Parse(runtype);
                    }
                    model.AddUser = this.CurrUser.UserId;
                    model.AddTime = DateTime.Now;
                    model.Sort = i;
                    addList.Add(model);
                }
                Funs.DB.Run_ParameterSettings.InsertAllOnSubmit(addList);
                Funs.DB.SubmitChanges();
                gvProducBrid();
                ShowNotify("保存成功!");
            }
            catch (Exception ex)
            {
                ShowNotify(ex.Message, MessageBoxIcon.Error);
            }
        }
        #endregion
        #region 私有方法
        /// 
        /// 创建头部
        /// 
        /// 
        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;
        }
        /// 
        /// 创建样式
        /// 
        /// 
        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;
        }
        /// 
        /// 私有方法
        /// 
        protected void TabStrip1_TabIndexChanged(object sender, EventArgs e)
        {
            if (TabStrip1.ActiveTabIndex == 0)
            {
                //预试车
                DataBridYsc();
            }
            else if (TabStrip1.ActiveTabIndex == 1)
            {
                //试车
                DataBridSc();
            }
            else if (TabStrip1.ActiveTabIndex == 2)
            {
                //三查四定
                DataBridScsd();
            }
            else if (TabStrip1.ActiveTabIndex == 3)
            {
                //投料试车
                gvFeedingBrid();
            }
            else if (TabStrip1.ActiveTabIndex == 4)
            {
                //生产性能考核
                PerformPageInit();
            }
            else if (TabStrip1.ActiveTabIndex == 5)
            {
                //生产试运行
                gvProducBrid();
            }
        }
        public class Run_ScheduleSetUpDto : Run_ScheduleSetUp
        {
            /// 
            /// 工作包名称
            /// 
            public string WorkPackName { get; set; }
        }
        /// 
        /// 试车检查表实体
        /// 
        public class WorkPackageInspectDto
        {
            /// 
            /// 工作包主键
            /// 
            public string WorkPackId { get; set; }
            /// 
            /// 工作包名称
            /// 
            public string WorkPackName { get; set; }
            /// 
            /// 检查表数量
            /// 
            public int AllNum { get; set; }
            /// 
            /// 未关闭任务单数量
            /// 
            public int NoCloseNum { get; set; }
            /// 
            /// 已关闭任务单数量
            /// 
            public int CloseNum { get; set; }
        }
        /// 
        /// 三查四定统计实体
        /// 
        public class FourDecisionScheduleBridDto
        {
            /// 
            /// 级别
            /// 
            public string Level { get; set; }
            /// 
            /// 尾项数量
            /// 
            public int AllNum { get; set; }
            /// 
            /// 未关闭尾项数量
            /// 
            public int NoCloseNum { get; set; }
            /// 
            /// 已关闭尾项数量
            /// 
            public int CloseNum { get; set; }
        }
        /// 
        /// 投料试车实体
        /// 
        public class ParameterSettingsDto : Run_ParameterSettings
        {
            /// 
            /// 项目名称
            /// 
            public string ProjectName { get; set; }
            /// 
            /// 装置名称
            /// 
            public string InstallationName { get; set; }
            /// 
            /// 工序名称
            /// 
            public string ProcessesName { get; set; }
            /// 
            /// 系统名称
            /// 
            public string SystemName { get; set; }
        }
        #endregion
        #region 转换
        /// 
        /// DataTable转换List
        /// 
        /// 
        public List DataTableToList(DataTable table)
        {
            List list = new List();
            T t = default(T);
            PropertyInfo[] propertypes = null;
            string tempName = string.Empty;
            foreach (DataRow row in table.Rows)
            {
                t = Activator.CreateInstance();
                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() : list;
        }
        #endregion
    }
}