using BLL;
using Model;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FineUIPro.Web.TestRun.BeforeTestRun
{
    public partial class SubInspectTerm : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Toolbar3.Hidden = true;
                this.InitTreeMenu();//加载树
                PageInit();
            }
        }
        #region 树绑定
        /// 
        /// 加载树
        /// 
        private void InitTreeMenu()
        {
            this.tvControlItem.Nodes.Clear();
            TreeNode rootNode = new TreeNode();
            rootNode.Text = "检查表";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.ToolTip = "";
            rootNode.EnableClickEvent = true;
            this.tvControlItem.Nodes.Add(rootNode);
            var list = from a in Funs.DB.PreRun_SysDevice
                       join b in Funs.DB.PreRun_SubSysWorkPackage on a.PreRunId equals b.SubSystemId
                       join c in Funs.DB.PreRun_WorkPackage on b.WorkPackId equals c.WorkPackId
                       where a.ProjectId == this.CurrUser.LoginProjectId
                       orderby a.Sort, a.PreRunLevel
                       select new { a.PreRunId, a.SystemId, a.PreRunCode, a.PreRunName, a.ProjectId, c.WorkPackId, c.WorkPackName, b.WorkPackCode, a.Sort };
            if (list.Count() > 0)
            {
                var subSystemIds = list.Select(x => x.PreRunId).ToList();
                var workPackIds = list.Select(x => x.WorkPackId).ToList();
                var selectlist = YscInspectItems(workPackIds, subSystemIds);
                var systemIds = list.Select(x => x.SystemId).ToList();
                var syslist = Funs.DB.PreRun_SysDevice.Where(x => systemIds.Contains(x.PreRunId)).OrderBy(o => o.Sort).ThenBy(t => t.PreRunLevel);
                foreach (var itemSys in syslist)
                {
                    TreeNode rootFirstNode = new TreeNode();//定义根节点
                    rootFirstNode.NodeID = itemSys.PreRunId;
                    rootFirstNode.Text = itemSys.PreRunName;
                    rootFirstNode.ToolTip = itemSys.PreRunName;
                    rootFirstNode.CommandName = "";
                    rootFirstNode.EnableClickEvent = false;
                    rootFirstNode.EnableExpandEvent = false;
                    rootNode.Nodes.Add(rootFirstNode);
                    rootFirstNode.Expanded = true;
                    var subList = list.Where(g => g.SystemId == itemSys.PreRunId).GroupBy(x => new { x.PreRunId, x.SystemId, x.PreRunCode, x.PreRunName, x.Sort });
                    foreach (var item in subList.OrderBy(o => o.Key.Sort))
                    {
                        TreeNode rootUnitNode = new TreeNode();//定义根节点
                        rootUnitNode.NodeID = item.Key.PreRunId;
                        rootUnitNode.Text = item.Key.PreRunName;
                        rootUnitNode.ToolTip = item.Key.PreRunName;
                        rootUnitNode.CommandName = "";
                        rootUnitNode.EnableClickEvent = false;
                        rootUnitNode.EnableExpandEvent = false;
                        rootFirstNode.Nodes.Add(rootUnitNode);
                        rootUnitNode.Expanded = true;
                        var worklist = list.Where(a => a.PreRunId == item.Key.PreRunId).GroupBy(x => new { x.WorkPackId, x.WorkPackName, x.WorkPackCode }).ToList();
                        if (worklist.Count > 0)
                        {
                            foreach (var itemWork in worklist.OrderBy(o => o.Key.WorkPackCode))
                            {
                                TreeNode newNode = new TreeNode();
                                newNode.Text = itemWork.Key.WorkPackName;
                                newNode.NodeID = itemWork.Key.WorkPackId + "|" + item.Key.PreRunId;
                                newNode.ToolTip = itemWork.Key.WorkPackName;
                                newNode.CommandName = "";
                                newNode.Expanded = true;
                                newNode.EnableClickEvent = true;
                                var workselects = selectlist.Where(x => x.SubSystemId == item.Key.PreRunId && x.WorkPackId == itemWork.Key.WorkPackId);
                                if (workselects.Count() > 0)
                                {
                                    newNode.EnableExpandEvent = false;
                                    rootUnitNode.Nodes.Add(newNode);
                                    foreach (var itemSelect in workselects)
                                    {
                                        TreeNode newNodeSelect = new TreeNode();
                                        newNodeSelect.Text = itemSelect.Code.Length > 10 ? $"{itemSelect.Code.Substring(0, 10)}......" : itemSelect.Code;
                                        newNodeSelect.NodeID = itemWork.Key.WorkPackId + "|" + item.Key.PreRunId + "|" + itemSelect.Id;
                                        newNodeSelect.ToolTip = itemSelect.Code;
                                        newNodeSelect.CommandName = "";
                                        newNodeSelect.EnableClickEvent = true;
                                        newNodeSelect.EnableExpandEvent = true;
                                        newNode.Nodes.Add(newNodeSelect);
                                        newNodeSelect.Expanded = true;
                                    }
                                }
                                else
                                {
                                    newNode.EnableClickEvent = true;
                                    newNode.EnableExpandEvent = true;
                                    rootUnitNode.Nodes.Add(newNode);
                                }
                            }
                        }
                    }
                }
            }
        }
        /// 
        /// 绑定下拉框
        /// 
        public void PageInit()
        {
            //检查人绑定
            var userList = from user in Funs.DB.Sys_User
                           join projectrole in Funs.DB.Project_ProjectUser on user.UserId equals projectrole.UserId
                           where projectrole.ProjectId == this.CurrUser.LoginProjectId
                           select user;
            var userids = new List() { Const.sysglyId, Const.hfnbdId, Const.sedinId };
            var addUserList = Funs.DB.Sys_User.Where(x => userids.Contains(x.UserId));
            var users = userList.ToList();
            if (addUserList.Count() > 0)
            {
                users.AddRange(addUserList);
            }
            if (users.Count() > 0)
            {
                ddlfbs.DataTextField = "UserName";
                ddlfbs.DataValueField = "UserId";
                ddlfbs.DataSource = users;
                ddlfbs.DataBind();
                ddlcbs.DataTextField = "UserName";
                ddlcbs.DataValueField = "UserId";
                ddlcbs.DataSource = users;
                ddlcbs.DataBind();
                ddljl.DataTextField = "UserName";
                ddljl.DataValueField = "UserId";
                ddljl.DataSource = users;
                ddljl.DataBind();
                ddlyz.DataTextField = "UserName";
                ddlyz.DataValueField = "UserId";
                ddlyz.DataSource = users;
                ddlyz.DataBind();
            }
        }
        /// 
        /// 点击TreeView
        /// 
        protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e)
        {
            this.BindGrid();
        }
        #endregion
        #region 数据绑定
        /// 
        /// 绑定数据
        /// 
        public void BindGrid(bool typechange = true)
        {
            var result = new List();
            var workPackId = this.tvControlItem.SelectedNodeID.Split('|')[0];
            var subSystemId = this.tvControlItem.SelectedNodeID.Split('|')[1];
            var subInspectId = string.Empty;
            if (this.tvControlItem.SelectedNodeID.Split('|').Length > 2)
            {
                subInspectId = this.tvControlItem.SelectedNodeID.Split('|').Last();
            }
            var workPage = Funs.DB.PreRun_WorkPackage.FirstOrDefault(x => x.WorkPackId == workPackId);
            if (workPage.SpecialWorkPack == 0)
            {
                Toolbar3.Hidden = true;
            }
            else
            {
                Toolbar3.Hidden = false;
            }
            if (typechange)
            {
                var propertyTechnologyIds = string.Empty;
                var selectStr = string.Empty;
                var inspectItems = Funs.DB.PreRun_SubInspectTerm.Where(x => x.WorkPackId == workPackId && x.SubSystemId == subSystemId).ToList();
                if (!string.IsNullOrWhiteSpace(subInspectId))
                {
                    var selectItem = inspectItems.FirstOrDefault(x => x.SubInspectId == subInspectId);
                    if (selectItem != null)
                    {
                        selectStr = selectItem.PropertyTechnologyId;
                    }
                    inspectItems.RemoveAll(x => x.SubInspectId == subInspectId);
                }
                if (inspectItems.Count > 0) propertyTechnologyIds = string.Join(",", inspectItems.ConvertAll(x => x.PropertyTechnologyId));
                if (workPage != null)
                {
                    //加载类型
                    if (workPage.WorkPackType == 0)
                    {
                        ddlWorkPackType.Items.Clear();
                        ddlWorkPackType.Items.Insert(0, new ListItem("管道", "1"));
                        ddlWorkPackType.Items.Insert(1, new ListItem("设备", "2"));
                        ddlWorkPackType.SelectedValue = "1";
                    }
                    if (workPage.WorkPackType == 1)
                    {
                        ddlWorkPackType.Items.Clear();
                        ddlWorkPackType.Items.Insert(0, new ListItem("管道", "1"));
                        ddlWorkPackType.SelectedValue = "1";
                    }
                    if (workPage.WorkPackType == 2)
                    {
                        ddlWorkPackType.Items.Clear();
                        ddlWorkPackType.Items.Insert(0, new ListItem("设备", "2"));
                        ddlWorkPackType.SelectedValue = "2";
                    }
                    if (workPage.WorkPackType == 3)
                    {
                        ddlWorkPackType.Items.Clear();
                        ddlWorkPackType.Items.Insert(0, new ListItem("仪表索引", "3"));
                        ddlWorkPackType.SelectedValue = "3";
                    }
                    //加载数据
                    PipingBrid(ddlWorkPackType.SelectedValue, subSystemId, propertyTechnologyIds, selectStr);
                }
            }
            //获取子系统
            var subSysModel = Funs.DB.PreRun_SysDevice.FirstOrDefault(x => x.PreRunId == subSystemId);
            //获取主表数据
            var workPackType = int.Parse(ddlWorkPackType.SelectedValue);
            var subModel = Funs.DB.PreRun_SubInspectTerm.FirstOrDefault(x => x.SubInspectId == subInspectId);
            if (subModel != null)
            {
                if (subModel.WorkPackType != null)
                {
                    ddlWorkPackType.SelectedValue = subModel.WorkPackType.ToString();
                    ddlWorkPackType.Enabled = false;
                }
                ddlfbs.SelectedValue = subModel.Subcontractor;
                ddlcbs.SelectedValue = subModel.Contractor;
                ddljl.SelectedValue = subModel.Supervision;
                ddlyz.SelectedValue = subModel.Owner;
                labSubcontractor.Hidden = false;
                labSubcontractor.Text = subModel.SubcontractorIsAllPass == null ? "(待确认)" : subModel.SubcontractorIsAllPass == 0 ? "(不通过)" : subModel.SubcontractorIsAllPass == 1 ? "(通过)" : "(待确认)";
                labSubcontractor.CssClass = subModel.SubcontractorIsAllPass == null ? "unconfirm" : subModel.SubcontractorIsAllPass == 0 ? "notpass" : subModel.SubcontractorIsAllPass == 1 ? "pass" : "unconfirm";
                labContractor.Hidden = false;
                labContractor.Text = subModel.ContractorIsAllPass == null ? "(待确认)" : subModel.ContractorIsAllPass == 0 ? "(不通过)" : subModel.ContractorIsAllPass == 1 ? "(通过)" : "(待确认)";
                labContractor.CssClass = subModel.ContractorIsAllPass == null ? "unconfirm" : subModel.ContractorIsAllPass == 0 ? "notpass" : subModel.ContractorIsAllPass == 1 ? "pass" : "unconfirm";
                labSupervision.Hidden = false;
                labSupervision.Text = subModel.SupervisionIsAllPass == null ? "(待确认)" : subModel.SupervisionIsAllPass == 0 ? "(不通过)" : subModel.SupervisionIsAllPass == 1 ? "(通过)" : "(待确认)";
                labSupervision.CssClass = subModel.SupervisionIsAllPass == null ? "unconfirm" : subModel.SupervisionIsAllPass == 0 ? "notpass" : subModel.SupervisionIsAllPass == 1 ? "pass" : "unconfirm";
                labOwner.Hidden = false;
                labOwner.Text = subModel.OwnerIsAllPass == null ? "(待确认)" : subModel.OwnerIsAllPass == 0 ? "(不通过)" : subModel.OwnerIsAllPass == 1 ? "(通过)" : "(待确认)";
                labOwner.CssClass = subModel.OwnerIsAllPass == null ? "unconfirm" : subModel.OwnerIsAllPass == 0 ? "notpass" : subModel.OwnerIsAllPass == 1 ? "pass" : "unconfirm";
                //if (subModel.SubcontractorIsAllPass == null)
                //{
                //    labSupervision.Text = "(待确认)";
                //    labSupervision.CssClass = "unconfirm";
                //}
                //else if (subModel.SubcontractorIsAllPass == 0)
                //{
                //    labSupervision.Text = "(通过)";
                //    labSupervision.CssClass = "notpass";
                //}
                //else if (subModel.SubcontractorIsAllPass == 1)
                //{
                //    labSupervision.Text = "(不通过)";
                //    labSupervision.CssClass = "pass";
                //}
            }
            else
            {
                ddlfbs.SelectedValue = string.Empty;
                ddlcbs.SelectedValue = string.Empty;
                ddljl.SelectedValue = string.Empty;
                ddlyz.SelectedValue = string.Empty;
            }
            var list = Funs.DB.PreRun_SubInspectTermItem.Where(x => x.SubInspectId == subInspectId).OrderBy(x => x.Sort).ToList();
            if (list.Count > 0)
            {
                foreach (var item in list)
                {
                    var model = new PreRun_SubInspectTermItem();
                    model.TermItemId = item.TermItemId;
                    model.SubItemId = item.SubItemId;
                    model.ProjectId = item.ProjectId;
                    model.WorkPackId = item.WorkPackId;
                    model.WorkInspectId = item.WorkInspectId;
                    model.WorkInspectName = item.WorkInspectName;
                    model.InstallationId = subSysModel.InstallationId;
                    model.ProcessesId = subSysModel.ProcessesId;
                    model.SystemId = subSysModel.SystemId;
                    model.SubSystemId = subSysModel.PreRunId;
                    model.InspectedUser = item.InspectedUser;
                    model.InspectionResults = item.InspectionResults;
                    model.InspectionIllustrate = item.InspectionIllustrate;
                    model.Sort = item.Sort;
                    result.Add(model);
                }
            }
            else
            {
                //获取预加载的数据
                var defaultDatas = Funs.DB.PreRun_WorkInspectTemplate.Where(s => s.WorkPackId == workPackId).OrderBy(x => x.Sort).ToList();
                if (defaultDatas.Count > 0)
                {
                    int index = list.Count + 1;
                    foreach (var item in defaultDatas)
                    {
                        var model = new PreRun_SubInspectTermItem();
                        model.TermItemId = Guid.NewGuid().ToString();
                        model.SubItemId = Guid.NewGuid().ToString();
                        model.ProjectId = this.CurrUser.LoginProjectId;
                        model.WorkPackId = item.WorkPackId;
                        model.WorkInspectId = item.WorkInspectId;
                        model.WorkInspectName = item.WorkInspectName;
                        model.InstallationId = subSysModel.InstallationId;
                        model.ProcessesId = subSysModel.ProcessesId;
                        model.SystemId = subSysModel.SystemId;
                        model.SubSystemId = subSysModel.PreRunId;
                        model.Sort = index + 1;
                        result.Add(model);
                        index++;
                    }
                }
            }
            Grid1.DataSource = result;
            Grid1.DataBind();
            //检查人绑定
            var userList = from user in Funs.DB.Sys_User join projectrole in Funs.DB.Project_ProjectUser on user.UserId equals projectrole.UserId where projectrole.ProjectId == this.CurrUser.LoginProjectId select user;
            var userids = new List() { Const.sysglyId, Const.hfnbdId, Const.sedinId };
            var addUserList = Funs.DB.Sys_User.Where(x => userids.Contains(x.UserId));
            var data = userList.ToList();
            if (addUserList.Count() > 0)
            {
                data.AddRange(addUserList);
            }
            DropDownList ddlInspectedUser = Grid1.FindColumn("InspectedUser").FindControl("ddlInspectedUser") as DropDownList;
            ddlInspectedUser.DataTextField = "UserName";
            ddlInspectedUser.DataValueField = "UserId";
            ddlInspectedUser.DataSource = data;
            ddlInspectedUser.DataBind();
        }
        /// 
        /// 排序
        /// 
        protected void Grid1_Sort(object sender, GridSortEventArgs e)
        {
            Grid1.SortDirection = e.SortDirection;
            Grid1.SortField = e.SortField;
            BindGrid();
        }
        /// 
        /// 行按钮事件
        /// 
        protected void Grid1_RowCommand(object sender, GridCommandEventArgs e)
        {
            if (e.CommandName == "Delete")
            {
                string rowID = e.RowID;
                var model = Funs.DB.PreRun_SubInspectTermItem.FirstOrDefault(p => p.TermItemId == rowID);
                if (model != null)
                {
                    if (model.InspectionResults != null)
                    {
                        ShowNotify("已存在检查结果,无法删除!", MessageBoxIcon.Warning);
                        return;
                    }
                    Funs.DB.PreRun_SubInspectTermItem.DeleteOnSubmit(model);
                    Funs.DB.SubmitChanges();
                    BindGrid();
                    ShowNotify("删除成功!");
                }
                else
                {
                    var list = gvList();
                    list.RemoveAll(x => x.TermItemId == rowID);
                    Grid1.DataSource = list;
                    Grid1.DataBind();
                    ShowNotify("删除成功!");
                }
            }
        }
        #endregion
        /// 
        /// 保存
        /// 
        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (ddbSysPiping.Values.Length == 0)
                {
                    ShowNotify("请选择设备!", MessageBoxIcon.Warning);
                    return;
                }
                var workPackId = this.tvControlItem.SelectedNodeID.Split('|')[0];
                var subSystemId = this.tvControlItem.SelectedNodeID.Split('|')[1];
                var subInspectId = string.Empty;
                if (this.tvControlItem.SelectedNodeID.Split('|').Length > 2)
                {
                    subInspectId = this.tvControlItem.SelectedNodeID.Split('|').Last();
                }
                var workPackType = int.Parse(ddlWorkPackType.SelectedValue);
                var subSysModel = Funs.DB.PreRun_SysDevice.FirstOrDefault(x => x.PreRunId == subSystemId);
                var workPackModel = Funs.DB.PreRun_WorkPackage.FirstOrDefault(x => x.WorkPackId == workPackId);
                if (workPackModel.SpecialWorkPack == 0)
                {
                    if (string.IsNullOrWhiteSpace(ddlfbs.SelectedValue))
                    {
                        ShowNotify("请选择分包商!", MessageBoxIcon.Warning);
                        return;
                    }
                    if (string.IsNullOrWhiteSpace(ddlcbs.SelectedValue))
                    {
                        ShowNotify("请选择承包商!", MessageBoxIcon.Warning);
                        return;
                    }
                    if (string.IsNullOrWhiteSpace(ddljl.SelectedValue))
                    {
                        ShowNotify("请选择监理!", MessageBoxIcon.Warning);
                        return;
                    }
                    if (string.IsNullOrWhiteSpace(ddlyz.SelectedValue))
                    {
                        ShowNotify("请选择业主!", MessageBoxIcon.Warning);
                        return;
                    }
                    List subTrems = new List();
                    List subTremItems = new List();
                    var subTrem = Funs.DB.PreRun_SubInspectTerm.FirstOrDefault(x => x.SubInspectId == subInspectId);
                    var termItems = Funs.DB.PreRun_SubInspectTermItem.Where(x => x.SubInspectId == subInspectId).ToList();
                    if (termItems.Count > 0 && termItems.Count(x => x.InspectionResults == null) == 0)
                    {
                        ShowNotify("所有检查项已存在检查结果,无法保存!", MessageBoxIcon.Warning);
                        return;
                    }
                    JArray mergedData = Grid1.GetMergedData();
                    foreach (JObject mergedRow in mergedData)
                    {
                        string status = mergedRow.Value("status");
                        JObject values = mergedRow.Value("values");
                        int i = mergedRow.Value("index");
                        var termItemId = this.Grid1.Rows[i].DataKeys[0].ToString();
                        var subItemId = this.Grid1.Rows[i].DataKeys[1].ToString();
                        var workInspectId = this.Grid1.Rows[i].DataKeys[2].ToString();
                        //获取子系统信息
                        var list = new List();
                        if (subSysModel != null)
                        {
                            //获取子系统工作包检查表,如果不存在则添加
                            if (subTrem == null)
                            {
                                subTrem = new PreRun_SubInspectTerm();
                                subTrem.SubInspectId = Guid.NewGuid().ToString();
                                subTrem.WorkPackId = workPackId;
                                subTrem.ProjectId = this.CurrUser.LoginProjectId;
                                subTrem.InstallationId = subSysModel.InstallationId;
                                subTrem.ProcessesId = subSysModel.ProcessesId;
                                subTrem.SystemId = subSysModel.SystemId;
                                subTrem.SubSystemId = subSysModel.PreRunId;
                                subTrem.Subcontractor = ddlfbs.SelectedValue;
                                subTrem.Contractor = ddlcbs.SelectedValue;
                                subTrem.Supervision = ddljl.SelectedValue;
                                subTrem.Owner = ddlyz.SelectedValue;
                                subTrem.PropertyTechnologyId = string.Join(",", ddbSysPiping.Values);
                                subTrem.WorkPackType = int.Parse(ddlWorkPackType.SelectedValue);
                                subTrem.AddUser = this.CurrUser.UserId;
                                subTrem.AddTime = DateTime.Now;
                                subTrems.Add(subTrem);
                            }
                            else
                            {
                                subTrem.Subcontractor = ddlfbs.SelectedValue;
                                subTrem.Contractor = ddlcbs.SelectedValue;
                                subTrem.Supervision = ddljl.SelectedValue;
                                subTrem.Owner = ddlyz.SelectedValue;
                                Funs.DB.SubmitChanges();
                            }
                            var model = Funs.DB.PreRun_SubInspectTermItem.FirstOrDefault(x => x.TermItemId == termItemId);
                            if (model == null)
                            {
                                model = new PreRun_SubInspectTermItem();
                                model.TermItemId = termItemId;
                                model.SubItemId = subItemId;
                                model.SubInspectId = subTrem.SubInspectId;
                                model.WorkPackId = workPackId;
                                model.ProjectId = this.CurrUser.LoginProjectId;
                                model.WorkInspectId = workInspectId;
                                model.WorkInspectName = values.Value("WorkInspectName");
                                model.InstallationId = subSysModel.InstallationId;
                                model.ProcessesId = subSysModel.ProcessesId;
                                model.SystemId = subSysModel.SystemId;
                                model.SubSystemId = subSysModel.PreRunId;
                                model.InspectedUser = !string.IsNullOrWhiteSpace(values.Value("InspectedUser")) ? values.Value("InspectedUser") : string.Empty;
                                model.Subcontractor = ddlfbs.SelectedValue;
                                model.Contractor = ddlcbs.SelectedValue;
                                model.Supervision = ddljl.SelectedValue;
                                model.Owner = ddlyz.SelectedValue;
                                model.PropertyTechnologyId = string.Join(",", ddbSysPiping.Values);
                                model.WorkPackType = int.Parse(ddlWorkPackType.SelectedValue);
                                model.AddUser = this.CurrUser.UserId;
                                model.AddTime = DateTime.Now;
                                model.Sort = i + 1;
                                subTremItems.Add(model);
                            }
                            else
                            {
                                model.InspectedUser = !string.IsNullOrWhiteSpace(values.Value("InspectedUser")) ? values.Value("InspectedUser") : string.Empty;
                                model.WorkInspectName = values.Value("WorkInspectName");
                                Funs.DB.SubmitChanges();
                            }
                        }
                    }
                    if (subTrems != null) Funs.DB.PreRun_SubInspectTerm.InsertAllOnSubmit(subTrems);
                    if (subTremItems.Count > 0) Funs.DB.PreRun_SubInspectTermItem.InsertAllOnSubmit(subTremItems);
                    Funs.DB.SubmitChanges();
                    if (Funs.DB.PreRun_SubInspectTermItem.Count(x => x.SubInspectId == subTrem.SubInspectId && x.InspectionResults.GetValueOrDefault() != 1) == 0)
                    {
                        subTrem.InspectionIsAllPass = 1;
                    }
                    else
                    {
                        subTrem.InspectionIsAllPass = 0;
                    }
                    Funs.DB.SubmitChanges();
                    this.InitTreeMenu();
                    BindGrid();
                }
                else
                {
                    var subTrem = Funs.DB.PreRun_SubInspectTerm.FirstOrDefault(x => x.SubInspectId == subInspectId);
                    if (subTrem == null)
                    {
                        subTrem = new PreRun_SubInspectTerm();
                        subTrem.SubInspectId = Guid.NewGuid().ToString();
                        subTrem.WorkPackId = workPackId;
                        subTrem.ProjectId = this.CurrUser.LoginProjectId;
                        subTrem.InstallationId = subSysModel.InstallationId;
                        subTrem.ProcessesId = subSysModel.ProcessesId;
                        subTrem.SystemId = subSysModel.SystemId;
                        subTrem.SubSystemId = subSysModel.PreRunId;
                        subTrem.PropertyTechnologyId = string.Join(",", ddbSysPiping.Values);
                        subTrem.WorkPackType = int.Parse(ddlWorkPackType.SelectedValue);
                        subTrem.InspectionIsAllPass = 1;
                        subTrem.IsSiteImplement = 1;
                        subTrem.AddUser = this.CurrUser.UserId;
                        subTrem.AddTime = DateTime.Now;
                        Funs.DB.PreRun_SubInspectTerm.InsertOnSubmit(subTrem);
                    }
                    else
                    {
                        subTrem.PropertyTechnologyId = string.Join(",", ddbSysPiping.Values);
                    }
                    Funs.DB.SubmitChanges();
                    this.InitTreeMenu();
                    BindGrid();
                }
                ShowNotify("保存成功!");
            }
            catch (Exception ex)
            {
                ShowNotify(ex.Message, MessageBoxIcon.Error);
            }
        }
        /// 
        /// 新增
        /// 
        protected void btnAdd_Click(object sender, EventArgs e)
        {
            var list = gvList();
            var workPackId = this.tvControlItem.SelectedNodeID.Split('|')[0];
            var subSystemId = this.tvControlItem.SelectedNodeID.Split('|')[1];
            var subInspectId = string.Empty;
            if (this.tvControlItem.SelectedNodeID.Split('|').Length > 2)
            {
                subInspectId = this.tvControlItem.SelectedNodeID.Split('|').Last();
                var termItems = Funs.DB.PreRun_SubInspectTermItem.Where(x => x.SubInspectId == subInspectId).ToList();
                if (termItems.Count(x => x.InspectionResults == null) == 0)
                {
                    ShowNotify("所有检查项已存在检查结果,无法新增!", MessageBoxIcon.Warning);
                    return;
                }
            }
            //获取子系统
            var subSysModel = Funs.DB.PreRun_SysDevice.FirstOrDefault(x => x.PreRunId == subSystemId);
            if (subSysModel != null)
            {
                var model = new PreRun_SubInspectTermItem();
                model.TermItemId = Guid.NewGuid().ToString();
                model.SubItemId = Guid.NewGuid().ToString();
                model.ProjectId = this.CurrUser.LoginProjectId;
                model.WorkPackId = workPackId;
                model.WorkInspectId = string.Empty;
                model.WorkInspectName = string.Empty;
                model.InstallationId = subSysModel.InstallationId;
                model.ProcessesId = subSysModel.ProcessesId;
                model.SystemId = subSysModel.SystemId;
                model.SubSystemId = subSysModel.PreRunId;
                model.Sort = list.Count + 1;
                list.Add(model);
            }
            Grid1.DataSource = list;
            Grid1.DataBind();
        }
        /// 
        /// 入场人员培训及特种作业报验人数集合
        /// 
        private List gvList()
        {
            List list = new List();
            JArray mergedData = Grid1.GetMergedData();
            foreach (JObject mergedRow in mergedData)
            {
                string status = mergedRow.Value("status");
                JObject values = mergedRow.Value("values");
                int i = mergedRow.Value("index");
                var termItemId = this.Grid1.Rows[i].DataKeys[0].ToString();
                var subItemId = this.Grid1.Rows[i].DataKeys[1].ToString();
                var workInspectId = this.Grid1.Rows[i].DataKeys[2] != null ? this.Grid1.Rows[i].DataKeys[2].ToString() : string.Empty; ;
                var subInspectId = this.Grid1.Rows[i].DataKeys[3] != null ? this.Grid1.Rows[i].DataKeys[3].ToString() : string.Empty;
                var workPackId = this.Grid1.Rows[i].DataKeys[4].ToString();
                var installationId = this.Grid1.Rows[i].DataKeys[5].ToString();
                var processesId = this.Grid1.Rows[i].DataKeys[6].ToString();
                var systemId = this.Grid1.Rows[i].DataKeys[7].ToString();
                var subSystemId = this.Grid1.Rows[i].DataKeys[8].ToString();
                var model = new PreRun_SubInspectTermItem();
                model.TermItemId = termItemId;
                model.SubItemId = subItemId;
                model.SubInspectId = subInspectId;
                model.WorkPackId = workPackId;
                model.ProjectId = this.CurrUser.LoginProjectId;
                model.WorkInspectId = workInspectId;
                model.WorkInspectName = values.Value("WorkInspectName");
                model.InstallationId = installationId;
                model.ProcessesId = processesId;
                model.SystemId = systemId;
                model.SubSystemId = subSystemId;
                model.InspectedUser = !string.IsNullOrWhiteSpace(values.Value("InspectedUser")) ? values.Value("InspectedUser") : string.Empty;
                model.AddUser = this.CurrUser.UserId;
                model.AddTime = DateTime.Now;
                model.Sort = i + 1;
                list.Add(model);
            }
            return list;
        }
        /// 
        /// 检测结果
        /// 
        /// 
        public string Results(object value)
        {
            var result = string.Empty;
            if (value != null)
            {
                var intVal = int.Parse(value.ToString());
                if (intVal == 1)
                {
                    result = "通过";
                }
                else if (intVal == 0)
                {
                    result = "未通过";
                }
            }
            return result;
        }
        /// 
        /// 类型
        /// 
        protected void ddlWorkPackType_SelectedIndexChanged(object sender, EventArgs e)
        {
            var selectStr = string.Empty;
            var propertyTechnologyIds = string.Empty;
            var workPackId = this.tvControlItem.SelectedNodeID.Split('|')[0];
            var subSystemId = this.tvControlItem.SelectedNodeID.Split('|')[1];
            var subInspectId = string.Empty;
            if (this.tvControlItem.SelectedNodeID.Split('|').Length > 2)
            {
                subInspectId = this.tvControlItem.SelectedNodeID.Split('|').Last();
            }
            var inspectItems = Funs.DB.PreRun_SubInspectTerm.Where(x => x.WorkPackId == workPackId && x.SubSystemId == subSystemId).ToList();
            if (!string.IsNullOrWhiteSpace(subInspectId))
            {
                var selectItem = inspectItems.FirstOrDefault(x => x.SubInspectId == subInspectId);
                if (selectItem != null)
                {
                    selectStr = selectItem.PropertyTechnologyId;
                }
                inspectItems.RemoveAll(x => x.SubInspectId == subInspectId);
            }
            if (inspectItems.Count > 0) propertyTechnologyIds = string.Join(",", inspectItems.ConvertAll(x => x.PropertyTechnologyId));
            PipingBrid(ddlWorkPackType.SelectedValue, subSystemId, propertyTechnologyIds, selectStr);
        }
        /// 
        /// 设备选择
        /// 
        protected void ddlSysPiping_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindGrid(false);
        }
        /// 
        /// 已生成检查表的管道/设备
        /// 
        private List YscInspectItems(List workPackIds, List subSystemIds)
        {
            List yczData = new List();
            var yscInspectItems = Funs.DB.PreRun_SubInspectTerm.Where(x => workPackIds.Contains(x.WorkPackId) && subSystemIds.Contains(x.SubSystemId)).ToList();
            if (yscInspectItems.Count > 0)
            {
                var selectPtids = string.Join(",", yscInspectItems.ConvertAll(x => x.PropertyTechnologyId)).Split(',').ToList();
                var listPros = Funs.DB.PreRun_PropertySysPiping.Where(x => selectPtids.Contains(x.PropertyId)).ToList();
                var listTechno = Funs.DB.PreRun_TechnologySysPiping.Where(x => selectPtids.Contains(x.TechnologyId)).ToList();
                var listInstrument = Funs.DB.PreRun_InstrumentSysPiping.Where(x => selectPtids.Contains(x.InstrumentId)).ToList();
                foreach (var itemYsc in yscInspectItems)
                {
                    var codeStr = string.Empty;
                    var ids = itemYsc.PropertyTechnologyId.Split(',');
                    var itemPros = listPros.Where(x => ids.Contains(x.PropertyId)).ToList();
                    if (itemPros.Count > 0)
                    {
                        codeStr = $"管道:{string.Join(",", itemPros.ConvertAll(x => x.PipingCode))}";
                        yczData.Add(new SelectPropertyTechnology()
                        {
                            Id = itemYsc.SubInspectId,
                            Code = codeStr,
                            WorkPackId = itemYsc.WorkPackId,
                            SubSystemId = itemYsc.SubSystemId
                        });
                    }
                    var itemTechno = listTechno.Where(x => ids.Contains(x.TechnologyId)).ToList();
                    if (itemTechno.Count > 0)
                    {
                        codeStr = $"设备:{string.Join(",", itemTechno.ConvertAll(x => x.TagNumber))}";
                        yczData.Add(new SelectPropertyTechnology()
                        {
                            Id = itemYsc.SubInspectId,
                            Code = codeStr,
                            WorkPackId = itemYsc.WorkPackId,
                            SubSystemId = itemYsc.SubSystemId
                        });
                    }
                    var itemInstrument = listInstrument.Where(x => ids.Contains(x.InstrumentId)).ToList();
                    if (itemInstrument.Count > 0)
                    {
                        codeStr = $"仪表:{string.Join(",", itemInstrument.ConvertAll(x => x.InstrumentTag))}";
                        yczData.Add(new SelectPropertyTechnology()
                        {
                            Id = itemYsc.SubInspectId,
                            Code = codeStr,
                            WorkPackId = itemYsc.WorkPackId,
                            SubSystemId = itemYsc.SubSystemId
                        });
                    }
                }
            }
            return yczData;
        }
        /// 
        /// 管道,设备,仪表索引绑定
        /// 
        public void PipingBrid(string WorkPackType, string subSystemId, string propertyTechnologyIds, string selectStr)
        {
            var sysPipingData = new List();
            if (WorkPackType == "1")
            {
                if (string.IsNullOrWhiteSpace(propertyTechnologyIds))
                {
                    var sysData = from proper in Funs.DB.PreRun_PropertySysPiping
                                  join selectproper in Funs.DB.PreRun_SubPropertySelect on proper.PropertyId equals selectproper.PropertyId
                                  where selectproper.SubSystemId == subSystemId
                                  select new SelectPropertyTechnology()
                                  {
                                      Id = proper.PropertyId,
                                      Code = $"管道:({proper.PipingCode})"
                                  };
                    sysPipingData = sysData.ToList();
                }
                else
                {
                    var ids = propertyTechnologyIds.Split(',');
                    var sysData = from proper in Funs.DB.PreRun_PropertySysPiping
                                  join selectproper in Funs.DB.PreRun_SubPropertySelect on proper.PropertyId equals selectproper.PropertyId
                                  where selectproper.SubSystemId == subSystemId && !ids.Contains(proper.PropertyId)
                                  select new SelectPropertyTechnology()
                                  {
                                      Id = proper.PropertyId,
                                      Code = $"管道:({proper.PipingCode})"
                                  };
                    sysPipingData = sysData.ToList();
                }
                if (sysPipingData.Count > 0)
                {
                    cbSysPiping.DataTextField = "Code";
                    cbSysPiping.DataValueField = "Id";
                    cbSysPiping.DataSource = sysPipingData;
                    cbSysPiping.DataBind();
                    List values = new List();
                    List texts = new List();
                    if (!string.IsNullOrWhiteSpace(selectStr))
                    {
                        var selectIds = selectStr.Split(',').ToList();
                        var selectData = sysPipingData.Where(x => selectIds.Contains(x.Id)).ToList();
                        if (selectData.Count() > 0)
                        {
                            values = selectData.ConvertAll(x => x.Id);
                            texts = selectData.ConvertAll(x => x.Code);
                        }
                    }
                    ddbSysPiping.Values = values.ToArray();
                    ddbSysPiping.Texts = texts.ToArray();
                }
                else
                {
                    ddbSysPiping.Values = null;
                    ddbSysPiping.Texts = null;
                    cbSysPiping.Items.Clear();
                    cbSysPiping.Items.Insert(0, new CheckItem("==无数据==", ""));
                }
            }
            if (WorkPackType == "2")
            {
                if (string.IsNullOrWhiteSpace(propertyTechnologyIds))
                {
                    var sysData = from technology in Funs.DB.PreRun_TechnologySysPiping
                                  join selecttechnology in Funs.DB.PreRun_SubTechnologySelect on technology.TechnologyId equals selecttechnology.TechnologyId
                                  where selecttechnology.SubSystemId == subSystemId
                                  select new SelectPropertyTechnology()
                                  {
                                      Id = technology.TechnologyId,
                                      Code = $"设备:({technology.TagNumber})"
                                  };
                    sysPipingData = sysData.ToList();
                }
                else
                {
                    var ids = propertyTechnologyIds.Split(',');
                    var sysData = from technology in Funs.DB.PreRun_TechnologySysPiping
                                  join selecttechnology in Funs.DB.PreRun_SubTechnologySelect on technology.TechnologyId equals selecttechnology.TechnologyId
                                  where selecttechnology.SubSystemId == subSystemId && !ids.Contains(technology.TechnologyId)
                                  select new SelectPropertyTechnology()
                                  {
                                      Id = technology.TechnologyId,
                                      Code = $"设备:({technology.TagNumber})"
                                  };
                    sysPipingData = sysData.ToList();
                }
                if (sysPipingData.Count() > 0)
                {
                    cbSysPiping.DataTextField = "Code";
                    cbSysPiping.DataValueField = "Id";
                    cbSysPiping.DataSource = sysPipingData;
                    cbSysPiping.DataBind();
                    List values = new List();
                    List texts = new List();
                    if (!string.IsNullOrWhiteSpace(selectStr))
                    {
                        var selectIds = selectStr.Split(',').ToList();
                        var selectData = sysPipingData.Where(x => selectIds.Contains(x.Id)).ToList();
                        if (selectData.Count() > 0)
                        {
                            values = selectData.ConvertAll(x => x.Id);
                            texts = selectData.ConvertAll(x => x.Code);
                        }
                    }
                    ddbSysPiping.Values = values.ToArray();
                    ddbSysPiping.Texts = texts.ToArray();
                }
                else
                {
                    ddbSysPiping.Values = null;
                    ddbSysPiping.Texts = null;
                    cbSysPiping.Items.Clear();
                    cbSysPiping.Items.Insert(0, new CheckItem("==无数据==", ""));
                }
            }
            if (WorkPackType == "3")
            {
                if (string.IsNullOrWhiteSpace(propertyTechnologyIds))
                {
                    var sysData = from instrument in Funs.DB.PreRun_InstrumentSysPiping
                                  join selectinstrument in Funs.DB.PreRun_SubInstrumentSelect on instrument.InstrumentId equals selectinstrument.InstrumentId
                                  where selectinstrument.SubSystemId == subSystemId
                                  select new SelectPropertyTechnology()
                                  {
                                      Id = instrument.InstrumentId,
                                      Code = $"仪表:({instrument.InstrumentTag})"
                                  };
                    sysPipingData = sysData.ToList();
                }
                else
                {
                    var ids = propertyTechnologyIds.Split(',');
                    var sysData = from instrument in Funs.DB.PreRun_InstrumentSysPiping
                                  join selectinstrument in Funs.DB.PreRun_SubInstrumentSelect on instrument.InstrumentId equals selectinstrument.InstrumentId
                                  where selectinstrument.SubSystemId == subSystemId && !ids.Contains(instrument.InstrumentId)
                                  select new SelectPropertyTechnology()
                                  {
                                      Id = instrument.InstrumentId,
                                      Code = $"仪表:({instrument.InstrumentTag})"
                                  };
                    sysPipingData = sysData.ToList();
                }
                if (sysPipingData.Count() > 0)
                {
                    cbSysPiping.DataTextField = "Code";
                    cbSysPiping.DataValueField = "Id";
                    cbSysPiping.DataSource = sysPipingData;
                    cbSysPiping.DataBind();
                    List values = new List();
                    List texts = new List();
                    if (!string.IsNullOrWhiteSpace(selectStr))
                    {
                        var selectIds = selectStr.Split(',').ToList();
                        var selectData = sysPipingData.Where(x => selectIds.Contains(x.Id)).ToList();
                        if (selectData.Count() > 0)
                        {
                            values = selectData.ConvertAll(x => x.Id);
                            texts = selectData.ConvertAll(x => x.Code);
                        }
                    }
                    ddbSysPiping.Values = values.ToArray();
                    ddbSysPiping.Texts = texts.ToArray();
                }
                else
                {
                    ddbSysPiping.Values = null;
                    ddbSysPiping.Texts = null;
                    cbSysPiping.Items.Clear();
                    cbSysPiping.Items.Insert(0, new CheckItem("==无数据==", ""));
                }
            }
        }
        /// 
        /// 子系统选择的管道/设备
        /// 
        public class SelectPropertyTechnology
        {
            /// 
            /// 主键
            /// 
            public string Id { get; set; }
            /// 
            /// 编码
            /// 
            public string Code { get; set; }
            /// 
            /// 工作包主键
            /// 
            public string WorkPackId { get; set; }
            /// 
            /// 子系统主键
            /// 
            public string SubSystemId { get; set; }
        }
    }
}