using BLL;
using Model;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AspNet = System.Web.UI.WebControls;
namespace FineUIPro.Web.CQMS.Solution
{
    public partial class EditConstructSolution : PageBase
    {
        #region 定义变量
        /// 
        /// 方案审查主键
        /// 
        public string ConstructSolutionId
        {
            get
            {
                return (string)ViewState["ConstructSolutionId"];
            }
            set
            {
                ViewState["ConstructSolutionId"] = value;
            }
        }
        public string State
        {
            get
            {
                return (string)ViewState["State"];
            }
            set
            {
                ViewState["State"] = value;
            }
        }
        
        #endregion
        #region 定义集合
        /// 
        /// 定义会签意见集合
        /// 
        public static List approves = new List();
        #endregion
        public int ContactImg
        {
            get
            {
                return Convert.ToInt32(ViewState["ContactImg"]);
            }
            set
            {
                ViewState["ContactImg"] = value;
            }
        }
        public string lastCanRemoveApproveId
        {
            get
            {
                return (string)ViewState["lastCanRemoveApproveId"];
            }
            set
            {
                ViewState["lastCanRemoveApproveId"] = value;
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                var unitWork = UnitWorkService.GetUnitWorkLists(CurrUser.LoginProjectId);
                var unitWorks = from x in unitWork
                                select
                                   new
                                   {
                                       UnitWorkId = x.UnitWorkId,
                                       UnitWorkName = x.UnitWorkCode + "-" + x.UnitWorkName + BLL.UnitWorkService.GetProjectType(x.ProjectType)
                                   };
                gvUnitWork.DataSource = unitWorks;
                gvUnitWork.DataBind();
                var gvCNProfessional = CNProfessionalService.GetList();
                gvCNPro.DataSource = gvCNProfessional;
                gvCNPro.DataBind();
                ListItem[] lis = new ListItem[1];
                lis[0] = new ListItem("0.0", "0");
                drpEdition.DataValueField = "Value";
                drpEdition.DataTextField = "Text";
                drpEdition.DataSource = lis;
                drpEdition.DataBind();
                drpEdition.SelectedValue = "0";
                BLL.SolutionTempleteTypeService.InitSolutionTempleteDropDownList(drpModelType, false);
                BLL.SpecialSchemeTypeService.InitSpecialSchemeTypeDropDownList(drpSpecialType,1, false);
                UnitService.InitUnitByProjectIdUnitTypeDropDownList(drpUnit, CurrUser.LoginProjectId, BLL.Const.ProjectUnitType_2, false);
                if (this.CurrUser.UnitId != null && this.CurrUser.UnitId != Const.UnitId_TCC && this.CurrUser.UnitId != Const.hfnbdId)
                {
                    drpUnit.SelectedValue = this.CurrUser.UnitId;
                    drpUnit.Enabled = false;
                }
                BindZYRole();
                BindZLRole();
                BindAQRole();
                BindKZRole();
                BindSGRole();
                BindXMRole();
                ContactImg = 0;
                //CommonService.GetAllButtonList(CurrUser.LoginProjectId, CurrUser.UserId, Const.CQMSConstructSolutionMenuId);
                txtCompileDate.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now);
                ConstructSolutionId = Request.Params["constructSolutionId"];
                this.State = "1";
                if (!string.IsNullOrWhiteSpace(ConstructSolutionId))
                {
                    HFConstructSolutionId.Text = ConstructSolutionId;
                    Model.Solution_CQMSConstructSolution constructSolution = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
                    txtCode.Text = constructSolution.Code;
                    this.State = constructSolution.State;
                    if (!string.IsNullOrEmpty(constructSolution.UnitId))
                    {
                        drpUnit.SelectedValue = constructSolution.UnitId;
                    }
                    if (!string.IsNullOrEmpty(constructSolution.SolutionType))
                    {
                        drpModelType.SelectedValue = constructSolution.SolutionType;
                    
                        if (this.drpModelType.SelectedItem.Text == "施工组织设计")
                        {
                            this.drpSpecialType.Enabled = false;
                            this.drpSpecialType.SelectedValue = null;
                            this.drpSpecialType.Required = false;
                        }
                        else if (this.drpModelType.SelectedItem.Text == "一般方案")
                        {
                            BLL.SpecialSchemeTypeService.InitSpecialSchemeTypeDropDownList(drpSpecialType, 2, false);
                            this.drpSpecialType.Enabled = true;
                            this.drpSpecialType.Required = true;
                        }
                        else
                        {
                            BLL.SpecialSchemeTypeService.InitSpecialSchemeTypeDropDownList(drpSpecialType, 1, false);
                            this.drpSpecialType.Enabled = true;
                            this.drpSpecialType.Required = true;
                        }
                    }
                    if (!string.IsNullOrEmpty(constructSolution.SpecialSchemeTypeId))
                    { 
                        drpSpecialType.SelectedValue = constructSolution.SpecialSchemeTypeId;
                    }
                    if (constructSolution.CompileDate != null)
                    {
                        txtCompileDate.Text = string.Format("{0:yyyy-MM-dd}", constructSolution.CompileDate);
                    }
                    txtSolutionName.Text = constructSolution.SolutionName;
                    if (!string.IsNullOrEmpty(constructSolution.UnitWorkIds))
                    {
                        if (constructSolution.UnitWorkIds.Length > 0)
                        {
                            txtUnitWork.Values = constructSolution.UnitWorkIds.Split(',');
                        }
                    }
                    if (!string.IsNullOrEmpty(constructSolution.CNProfessionalCodes))
                    {
                        if (constructSolution.CNProfessionalCodes.Length > 0)
                        {
                            txtCNProfessional.Values = constructSolution.CNProfessionalCodes.Split(',');
                        }
                    }
                    if (constructSolution.Edition != null)
                    {
                        drpEdition.Items.Clear();
                        ListItem[] list = new ListItem[constructSolution.Edition.Value+1];
                        for (int i = 0; i <= constructSolution.Edition.Value; i++)
                        {
                            list[i] = new ListItem((i/10.0).ToString("#0.0"), ""+i);
                        }
                        drpEdition.DataValueField = "Value";
                        drpEdition.DataTextField = "Text";
                        drpEdition.DataSource = list;
                        drpEdition.DataBind();
                        drpEdition.SelectedIndex = constructSolution.Edition.Value;
                        if (constructSolution.Edition.Value == 0 && constructSolution.State == Const.CQMSConstructSolution_Compile)
                        {
                            imgBtnFile2.Hidden = true;
                        }
                        else if ( constructSolution.State == Const.CQMSConstructSolution_Audit)
                        {
                            imgBtnFile2.Hidden = true;
                        }
                    }
                    bindApprove();
                    
                        var zyUserIds = CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "ZY");
                        if (zyUserIds.Count > 0&& constructSolution.State != Const.CQMSConstructSolution_ReCompile)
                        {
                            SetCheck(trOne, zyUserIds);
                        }
                        var zlUserIds = CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "ZL");
                        if (zlUserIds.Count > 0&& constructSolution.State != Const.CQMSConstructSolution_ReCompile)
                        {
                            SetCheck(trTwo, zlUserIds);
                        }
                        var aqUserIds = CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "AQ");
                        if (aqUserIds.Count > 0&& constructSolution.State != Const.CQMSConstructSolution_ReCompile)
                        {
                            SetCheck(trThree, aqUserIds);
                        }
                        var kzUserIds = CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "KZ");
                        if (kzUserIds.Count > 0&& constructSolution.State != Const.CQMSConstructSolution_ReCompile)
                        {
                            SetCheck(trFour, kzUserIds);
                        }
                        var sgUserIds = CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "SG");
                        if (sgUserIds.Count > 0&& constructSolution.State != Const.CQMSConstructSolution_ReCompile)
                        {
                            SetCheck(trFive, sgUserIds);
                        }
                        var xmUserIds = CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "XM");
                        if (xmUserIds.Count > 0&& constructSolution.State != Const.CQMSConstructSolution_ReCompile)
                        {
                            SetCheck(trSixe, xmUserIds);
                        }
                    
                    Model.Solution_CQMSConstructSolutionApprove curapprove = CQMSConstructSolutionApproveService.GetConstructSoluAppByApproveMan(ConstructSolutionId, CurrUser.UserId, Convert.ToInt32(constructSolution.Edition));
                    if (curapprove != null)
                    {
                        initDropSameGroup(this.drpSameGroup, curapprove.SignType);
                        switch (curapprove.SignType)
                        {
                            case "ZY":
                                this.drpSameGroup.SelectedValueArray = zyUserIds.ToArray();
                                break;
                            case "ZL":
                                this.drpSameGroup.SelectedValueArray = zlUserIds.ToArray();
                                break;
                            case "AQ":
                                this.drpSameGroup.SelectedValueArray = aqUserIds.ToArray();
                                break;
                            case "KZ":
                                this.drpSameGroup.SelectedValueArray = kzUserIds.ToArray();
                                break;
                            case "SG":
                                this.drpSameGroup.SelectedValueArray = sgUserIds.ToArray();
                                break;
                            case "Xm":
                                this.drpSameGroup.SelectedValueArray = xmUserIds.ToArray();
                                break;
                        }
                    }
                    if (constructSolution.State == Const.CQMSConstructSolution_ReCompile)
                    {
                        agree.Hidden = true;
                        options.Hidden = true;
                        optio.Hidden = true;
                        var disAgreeMans = Funs.DB.Solution_CQMSConstructSolutionApprove.Where(x => x.ConstructSolutionId == constructSolution.ConstructSolutionId && x.Edition + 1 == constructSolution.Edition && x.IsAgree == false).Select(x => x.ApproveMan).ToList();
                        //Panel2.Enabled = false;
                        SetCheck(trOne, disAgreeMans);
                        SetCheck(trTwo, disAgreeMans);
                        SetCheck(trThree, disAgreeMans);
                        SetCheck(trFour, disAgreeMans);
                        SetCheck(trFive, disAgreeMans);
                        SetCheck(trSixe, disAgreeMans);
                    }
                    if (constructSolution.State == Const.CQMSConstructSolution_Audit)
                    {
                        txtProjectName.Enabled = false;
                        txtCode.Enabled = false;
                        drpUnit.Enabled = false;
                        drpModelType.Enabled = false;
                        drpSpecialType.Enabled = false;
                        txtCompileDate.Enabled = false;
                        txtSolutionName.Enabled = false;
                        txtCNProfessional.Enabled = false;
                        txtUnitWork.Enabled = false;
                        ContactImg = -1;
                        Panel2.Enabled = false;
                    }
                    //提交版本人多次修改
                    if (constructSolution.CompileMan.Equals(CurrUser.UserId))
                    {
                        txtProjectName.Enabled = true;
                        txtCode.Enabled = true;
                        //drpUnit.Enabled = true;
                        drpModelType.Enabled = true;
                        drpSpecialType.Enabled = true;
                        txtCompileDate.Enabled = true;
                        txtSolutionName.Enabled = true;
                        txtCNProfessional.Enabled = true;
                        txtUnitWork.Enabled = true;
                        ContactImg = 0; 
                        if (constructSolution.State != Const.CQMSConstructSolution_ReCompile)//重新编辑时不允许修改上次不同意的人
                        {
                            Panel2.Enabled = true;
                        }
                        rblIsAgree.Hidden = true;
                        rblIsAgree.Required = false;
                        options.Hidden = true;
                        txtOptions.Required = false;
                        optio.Hidden = true;
                        if (constructSolution.State != Const.CQMSConstructSolution_ReCompile && constructSolution.State != Const.CQMSConstructSolution_Compile)
                        {
                            this.btnSubmit.Hidden = true;
                            this.btnSave.Hidden = true;
                        }
                    }
                    //if (!string.IsNullOrEmpty(countersign.CVRole))
                    //{
                    //    GetCheck(tvCV.Nodes[0].ChildNodes, countersign.CVRole);
                    //}
                    if (this.drpModelType.SelectedItem.Text == "施工组织设计")
                    {
                        drpSpecialType.Enabled = false;
                    }
                }
                else
                {
                    agree.Hidden = true;
                    options.Hidden = true;
                    optio.Hidden = true;
                    plApprove2.Hidden = true;
                    imgBtnFile2.Hidden = true;
                  //  txtCode.Text = SQLHelper.RunProcNewId2("SpGetNewCode3ByProjectId", "dbo.Solution_CQMSConstructSolution", "Code", CurrUser.LoginProjectId);
                }
                txtProjectName.Text = ProjectService.GetProjectByProjectId(CurrUser.LoginProjectId).ProjectName;
            }
        }
        /// 
        /// 审批列表
        /// 
        private void bindApprove()
        {
            var list = CQMSConstructSolutionApproveService.getListData(ConstructSolutionId);
            if (list.Count() > 0)
            {
                var last = list.LastOrDefault();
                if (last.ApproveMan == CurrUser.UserId)
                {
                    lastCanRemoveApproveId =  last.ConstructSolutionApproveId;
                }
            }
            gvApprove.DataSource = list;
            gvApprove.DataBind();
        }
        /// 
        /// 最后一行
        /// 
        /// 
        /// 
        /// 
        public  bool IsLast(Object approveId)
        {
             if ((string)approveId == lastCanRemoveApproveId)
            {
                return true;
            }
            else
            {
                return false;
            }
           
        }
        protected string man(Object man)
        {
            string appman = string.Empty;
            if (UserService.GetUserByUserId(man.ToString()) != null)
            {
                appman = UserService.GetUserByUserId(man.ToString()).UserName;
            }
            return appman;
        }
        #region 保存/提交
        protected void btnSave_Click(object sender, EventArgs e)
        {
            //validate(Const.BtnSave, "save");
            if (CommonService.GetAllButtonPowerList(CurrUser.LoginProjectId, CurrUser.UserId, Const.CQMSConstructSolutionMenuId, Const.BtnSave))
            {
                SaveCQMSConstructSolution("save");
                PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
                Alert.ShowInTop("保存成功!", MessageBoxIcon.Success);
            }
            else
            {
                Alert.ShowInTop("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
            }
        }
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            validate(Const.BtnSubmit, "submit");
        }
        /// 
        /// 保存验证
        /// 
        /// 
        /// 
        public void validate(string buttonName, string tip)
        {
            if (CommonService.GetAllButtonPowerList(CurrUser.LoginProjectId, CurrUser.UserId, Const.CQMSConstructSolutionMenuId, buttonName))
            {
                string err = string.Empty;
                var edition = this.drpEdition.SelectedValue; 
                if (!AttachFileService.Getfile(HFConstructSolutionId.Text+ edition, Const.CQMSConstructSolutionMenuId))
                {
                    err += "请上传附件,";
                }
                if (this.drpModelType.SelectedItem.Text != "施工组织设计")
                {
                    if (drpSpecialType.SelectedValue == BLL.Const._Null)
                    {
                        err += "请选择在分部分项工程,";
                    }
                }
                //if (string.IsNullOrEmpty(hdFilePath.Value))
                //{
                //    err += "请上传附件,";
                //}
                if (drpEdition.SelectedValue == "0" && buttonName == "提交")
                {
                    if (!nodesCheckd(trOne))
                    {
                        err += "请选择专业工程师,";
                    }
                    if (!nodesCheckd(trTwo))
                    {
                        err += "请选择质量工程师,";
                    }
                    if (!nodesCheckd(trThree))
                    {
                        err += "请选择HSE工程师,";
                    }
                    if (!nodesCheckd(trFive))
                    {
                        err += "请选择施工经理,";
                    }
                }
                else
                {
                    List list = new List();
                    list.Add(trOne);
                    list.Add(trTwo);
                    list.Add(trThree);
                    list.Add(trFour);
                    list.Add(trFive);
                    list.Add(trSixe);
                    var res = false;
                    foreach (var item in list)
                    {
                        if (nodesCheckd(item))
                        {
                            res = true;
                            break;
                        }
                    }
                    if (!res)
                    {
                        err += "请选择总包会签人员,";
                    }
                }
                if (!string.IsNullOrWhiteSpace(err))
                {
                    err = err.Substring(0, err.LastIndexOf(","));
                    err += "!";
                }
                if (!string.IsNullOrWhiteSpace(err))
                {
                    Alert.ShowInTop(err, MessageBoxIcon.Warning);
                    return;
                }
                if (!string.IsNullOrWhiteSpace(ConstructSolutionId))
                {//更新时操作
                    if (tip == "save")
                    {
                        EditConstructSol("save");
                    }
                    else
                    {
                        EditConstructSol("submit");
                    }
                }
                else
                {
                    if (tip == "save")
                    {
                        SaveCQMSConstructSolution("save");
                    }
                    else
                    {
                        SaveCQMSConstructSolution("submit");
                    }
                    //添加时操作           
                }
                PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
                if (tip == "save")
                {
                    tip = "保存成功!";
                }
                else
                {
                    tip = "提交成功!";
                }
                Alert.ShowInTop(tip, MessageBoxIcon.Success);
            }
            else
            {
                Alert.ShowInTop("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
            }
        }
        /// 
        /// 编辑时候保存
        /// 
        private void EditConstructSol(string saveType)
        {
            Model.Solution_CQMSConstructSolution constructSolution = new Model.Solution_CQMSConstructSolution();
            constructSolution.Code = txtCode.Text.Trim();
            constructSolution.ProjectId = CurrUser.LoginProjectId;
            if (drpUnit.SelectedValue != BLL.Const._Null)
            {
                constructSolution.UnitId = drpUnit.SelectedValue;
            }
            if (drpModelType.SelectedValue != BLL.Const._Null)
            {
                constructSolution.SolutionType = drpModelType.SelectedValue;
            }
            if (drpSpecialType.SelectedValue != BLL.Const._Null  )
            {
                constructSolution.SpecialSchemeTypeId = drpSpecialType.SelectedValue;
            }
            constructSolution.SolutionName = txtSolutionName.Text.Trim();
            int edtion = Convert.ToInt32(this.drpEdition.SelectedValue);
            constructSolution.Edition = edtion;
            if (!string.IsNullOrEmpty(txtCompileDate.Text.Trim()))
            {
                constructSolution.CompileDate = Convert.ToDateTime(txtCompileDate.Text.Trim());
            }
            if (txtUnitWork.Values.Length > 0)
            {
                constructSolution.UnitWorkIds = string.Join(",", txtUnitWork.Values);
            }
            if (txtCNProfessional.Values.Length > 0)
            {
                constructSolution.CNProfessionalCodes = string.Join(",", txtCNProfessional.Values);
            }
            if (!string.IsNullOrEmpty(ConstructSolutionId))
            {
                constructSolution.ConstructSolutionId = ConstructSolutionId;
                Model.Solution_CQMSConstructSolution constructSolution1 = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
                if (saveType == "submit")
                {
                    if (CurrUser.UserId != constructSolution1.CompileMan)   //办理人不是编制人,提示查看审批信息
                    {
                        Model.Solution_CQMSConstructSolutionApprove sApprove = new Model.Solution_CQMSConstructSolutionApprove();
                        sApprove.ConstructSolutionId = constructSolution.ConstructSolutionId;
                        sApprove.ApproveMan = constructSolution1.CompileMan;
                        sApprove.ApproveType = "S";
                        CQMSConstructSolutionApproveService.AddConstructSolutionApprove(sApprove);
                        if (constructSolution1.State == Const.CQMSConstructSolution_Audit)
                        {
                            constructSolution.State = constructSolution1.State;
                        }
                        else
                        {
                            constructSolution.State = Const.CQMSConstructSolution_Audit;
                        }
                    }
                    else
                    {
                        countersign(constructSolution.ConstructSolutionId);
                        constructSolution.State = constructSolution1.State;
                    }
                    if (!CurrUser.UserId.Equals(constructSolution1.CompileMan))
                    {
                        Model.Solution_CQMSConstructSolutionApprove approve = CQMSConstructSolutionApproveService.GetConstructSoluAppByApproveMan(ConstructSolutionId, CurrUser.UserId, Convert.ToInt32(constructSolution1.Edition));
                        if (approve == null)
                        {
                            approve = new Model.Solution_CQMSConstructSolutionApprove();
                            approve.ConstructSolutionId = constructSolution.ConstructSolutionId;
                            // approve.ApproveDate = DateTime.Now;
                            approve.ApproveMan = this.CurrUser.UserId;
                            approve.ApproveType = Const.CQMSConstructSolution_Compile;
                            approve.Edition = Convert.ToInt32(this.drpEdition.SelectedValue);
                        }
                        
                        if (saveType == "submit")
                        {
                            approve.ApproveDate = DateTime.Now;
                        }
                        if (rblIsAgree.SelectedIndex == 2)
                        {
                            Model.Solution_CQMSConstructSolutionApprove curapprove = approve;// CQMSConstructSolutionApproveService.GetConstructSoluAppByApproveMan(ConstructSolutionId, CurrUser.UserId, Convert.ToInt32(constructSolution.Edition));
                            foreach (var id in this.drpSameGroup.SelectedValueArray)
                            {
                                Model.Solution_CQMSConstructSolutionApprove hasapprove = CQMSConstructSolutionApproveService.GetConstructSoluAppByApproveMan(ConstructSolutionId, id, Convert.ToInt32(constructSolution.Edition));
                                if (hasapprove == null)
                                {
                                    Model.Solution_CQMSConstructSolutionApprove newapprove = new Model.Solution_CQMSConstructSolutionApprove();
                                    newapprove.ConstructSolutionId = curapprove.ConstructSolutionId;
                                    newapprove.ApproveMan = id;
                                    newapprove.ApproveType = curapprove.ApproveType;
                                    newapprove.SignType = curapprove.SignType;
                                    newapprove.Edition = curapprove.Edition; ;
                                    // delSolutionApprove(curapprove.ConstructSolutionId, id, curapprove.SignType);
                                    CQMSConstructSolutionApproveService.AddConstructSolutionApprove(newapprove);
                                    APICommonService.SendSubscribeMessage(approve.ApproveMan, "施工方案待办理", this.CurrUser.UserName, string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now));
                                }
                            }
                            approve.SignType = "S";
                            approve.IsAgree = true;
                        }
                        else
                        {
                            approve.IsAgree = Convert.ToBoolean(rblIsAgree.SelectedValue);
                        }
                        approve.ApproveIdea = txtOptions.Text.Trim();
                        if (string.IsNullOrEmpty(approve.ConstructSolutionApproveId))
                        {
                            CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve);
                        }
                        else
                        {
                            CQMSConstructSolutionApproveService.UpdateConstructSolutionApprove(approve);
                        }
                    }
                    else
                    {
                        if (saveType == "submit")
                        {
                            if (constructSolution1.State == Const.CQMSConstructSolution_Audit)//==会签状态升级版本
                            {
                                Model.Solution_CQMSConstructSolutionApprove reApprove = new Model.Solution_CQMSConstructSolutionApprove();
                                reApprove.ConstructSolutionId = constructSolution.ConstructSolutionId;
                                reApprove.ApproveDate = DateTime.Now;
                                reApprove.ApproveMan = constructSolution1.CompileMan;
                                reApprove.ApproveType = Const.CQMSConstructSolution_ReCompile;
                                //edtion++;
                                reApprove.Edition = edtion;
                                CQMSConstructSolutionApproveService.AddConstructSolutionApprove(reApprove);
                            }
                            else
                            {
                                Model.Solution_CQMSConstructSolutionApprove approves = CQMSConstructSolutionApproveService.GetConstructSolApproveByApproveMan(ConstructSolutionId, constructSolution1.CompileMan);
                                if (approves == null)
                                {
                                    approves = new Model.Solution_CQMSConstructSolutionApprove();
                                    approves.ConstructSolutionId = constructSolution.ConstructSolutionId;
                                    // approve.ApproveDate = DateTime.Now;
                                    approves.ApproveMan = this.CurrUser.UserId;
                                    approves.ApproveType = Const.CQMSConstructSolution_Compile;
                                    approves.Edition = Convert.ToInt32(this.drpEdition.SelectedValue);
                                    approves.Edition = Convert.ToInt32(edtion);
                                    approves.IsAgree = Convert.ToBoolean(rblIsAgree.SelectedValue);
                                    approves.ApproveIdea = txtOptions.Text.Trim();
                                    approves.ApproveDate = DateTime.Now;
                                    CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approves);
                                }
                                else
                                {
                                    approves.ApproveDate = DateTime.Now;
                                    CQMSConstructSolutionApproveService.UpdateConstructSolutionApprove(approves);
                                }
                            }
                        }
                    }
                }
                else
                {
                    constructSolution.State = constructSolution1.State;
                }
                //提交时候,更新状态,打回的时候升级版本
                if (CurrUser.UserId.Equals(constructSolution1.CompileMan))
                {
                    //if (constructSolution1.State != Const.CQMSConstructSolution_Audit)
                    //{
                    //    edtion++;
                    //}
                    //constructSolution.Edition = Convert.ToInt32(edtion);
                    constructSolution.State = Const.CQMSConstructSolution_Audit;
                }
                CQMSConstructSolutionService.UpdateConstructSolution(constructSolution);
                //判断状态,全部会签同意,则审批完成
                if (saveType == "submit")
                {
                    List allApproves = CQMSConstructSolutionApproveService.GetHandleConstructSolutionApprovesByConstructSolutionId(ConstructSolutionId, constructSolution.Edition == null ? 0 : Convert.ToInt32(constructSolution.Edition));
                    var count = allApproves.Where(p => p.ApproveDate != null && p.IsAgree != null && Convert.ToBoolean(p.IsAgree)).Count();//查询会签同意的
                    var fcount = allApproves.Where(p => p.ApproveDate != null && p.IsAgree != null && !Convert.ToBoolean(p.IsAgree)).Count();//查询会签不同意的
                    if ((count + fcount) == allApproves.Count)
                    {
                        if (count == allApproves.Count)
                        {
                            var cons = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
                            cons.State = Const.CQMSConstructSolution_Complete;
                            cons.CompileDate = DateTime.Now;
                            CQMSConstructSolutionService.UpdateConstructSolution(cons);
                        }
                        //有不同意意见,打回重新编制
                        if (fcount > 0)
                        {
                            var cons = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
                            Model.Solution_CQMSConstructSolutionApprove reApprove = new Model.Solution_CQMSConstructSolutionApprove();
                            reApprove.ConstructSolutionId = constructSolution.ConstructSolutionId;
                            reApprove.ApproveMan = cons.CompileMan;
                            reApprove.ApproveType = Const.CQMSConstructSolution_ReCompile;
                            edtion++;
                            reApprove.Edition = edtion;
                            CQMSConstructSolutionApproveService.AddConstructSolutionApprove(reApprove);
                            cons.State = Const.CQMSConstructSolution_ReCompile;
                            cons.Edition = edtion;
                            cons.CompileDate = DateTime.Now;
                            constructSolution.State = Const.CQMSConstructSolution_ReCompile;
                            CQMSConstructSolutionService.UpdateConstructSolution(cons);
                        }
                    }
                }
                LogService.AddSys_Log(CurrUser, constructSolution.Code, ConstructSolutionId, Const.CQMSConstructSolutionMenuId, "修改施工方案");
            }
        }
        #endregion
        #region 添加时候的保存
        /// 
        /// 保存方案审查
        /// 
        /// 保存类型
        private void SaveCQMSConstructSolution(string saveType)
        {
            //if (tvHSE.CheckedNodes.Count == 0 || (tvHSE.CheckedNodes.Count > 0 && tvHSE.CheckedNodes[0].Value == "0"))
            //{
            //    ScriptManager.RegisterStartupScript(this, typeof(string), "_alert", "alert('请选择HSE会签人员!')", true);
            //    return;
            //}
            Model.Solution_CQMSConstructSolution constructSolution = new Model.Solution_CQMSConstructSolution();
            constructSolution.Code = txtCode.Text.Trim();
            constructSolution.ProjectId = CurrUser.LoginProjectId;
            if (drpUnit.SelectedValue !=  BLL.Const._Null)
            {
                constructSolution.UnitId = drpUnit.SelectedValue;
            }
            if (drpModelType.SelectedValue != BLL.Const._Null)
            {
                constructSolution.SolutionType = drpModelType.SelectedValue;
            }
            if (drpSpecialType.SelectedValue != BLL.Const._Null)
            {
                constructSolution.SpecialSchemeTypeId = drpSpecialType.SelectedValue;
            }
            constructSolution.SolutionName = txtSolutionName.Text.Trim();
            if (!string.IsNullOrEmpty(txtCompileDate.Text.Trim()))
            {
                constructSolution.CompileDate = Convert.ToDateTime(txtCompileDate.Text.Trim());
            }
            if (txtUnitWork.Values.Length > 0)
            {
                constructSolution.UnitWorkIds = string.Join(",", txtUnitWork.Values);
            }
            if (txtCNProfessional.Values.Length > 0)
            {
                constructSolution.CNProfessionalCodes = string.Join(",", txtCNProfessional.Values);
            }
            if (!string.IsNullOrEmpty(HFConstructSolutionId.Text))
            {
                constructSolution.ConstructSolutionId = HFConstructSolutionId.Text;
            }
            else
            {
                constructSolution.ConstructSolutionId = SQLHelper.GetNewID(typeof(Model.Solution_CQMSConstructSolution));
            }
            if (saveType == "submit")
            {
                constructSolution.State = Const.CQMSConstructSolution_Audit;
            }
            else
            {
                Model.Solution_CQMSConstructSolution cs = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
                if (cs != null)
                {
                    constructSolution.State = cs.State;
                }
                else
                {
                    constructSolution.State = Const.CQMSConstructSolution_Compile;
                }
            }
            constructSolution.CompileMan = CurrUser.UserId;
            constructSolution.Edition = Convert.ToInt32(this.drpEdition.SelectedValue);
            if (!string.IsNullOrEmpty(HFConstructSolutionId.Text))
            {
                CQMSConstructSolutionService.UpdateConstructSolution(constructSolution);
            }
            else
            {
                CQMSConstructSolutionService.AddConstructSolution(constructSolution);
            }
            if (saveType == "submit")
            {
                Model.Solution_CQMSConstructSolutionApprove approve1 = new Model.Solution_CQMSConstructSolutionApprove();
                approve1.ConstructSolutionId = constructSolution.ConstructSolutionId;
                approve1.ApproveDate = DateTime.Now;
                approve1.ApproveMan = this.CurrUser.UserId;
                approve1.ApproveType = Const.CQMSConstructSolution_Compile;
                approve1.Edition = Convert.ToInt32(this.drpEdition.SelectedValue);
                CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve1);
            }
            LogService.AddSys_Log(CurrUser, constructSolution.Code, ConstructSolutionId, Const.CQMSConstructSolutionMenuId, "添加施工方案");
            //}
            //提交
            if (saveType == "submit")
            {
                countersign(constructSolution.ConstructSolutionId);
            }
            LogService.AddSys_Log(CurrUser, constructSolution.Code, ConstructSolutionId, Const.CQMSConstructSolutionMenuId, "编制方案审查");
        }
        #endregion
        /// 
        /// 删除未选择的代办记录
        /// 
        /// 
        private void delSolutionApprove(string constructSolutionId, string man, string signType)
        {
            var count = CQMSConstructSolutionApproveService.getListSolutionApproveCount(constructSolutionId, man, signType);
            if (count > 0)
            {
                CQMSConstructSolutionApproveService.delSolutionApprove(constructSolutionId, man);
            }
        }
        /// 
        /// 会签
        /// 
        private void countersign(string constructSolutionId)
        {
            var solution = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(constructSolutionId);
            if (trOne.Nodes[0].Nodes.Count > 0)
            {
                foreach (TreeNode tn in trOne.Nodes[0].Nodes)
                {
                    if (tn.Checked)
                    {
                        Model.Solution_CQMSConstructSolutionApprove approve = new Model.Solution_CQMSConstructSolutionApprove();
                        approve.ConstructSolutionId = constructSolutionId;
                        approve.ApproveMan = tn.NodeID;
                        approve.ApproveType = Const.CQMSConstructSolution_Audit;
                        approve.SignType = "ZY";
                        int edtion = Convert.ToInt32(this.drpEdition.SelectedValue);
                        if (solution != null)
                        {
                        //    edtion++;
                        }
                        approve.Edition = edtion;
                        delSolutionApprove(constructSolutionId, tn.NodeID, "ZY");
                        CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve);
                        APICommonService.SendSubscribeMessage(approve.ApproveMan, "施工方案待办理", this.CurrUser.UserName, string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now));
                    }
                    else
                    {
                        delSolutionApprove(constructSolutionId, tn.NodeID, "ZY");
                    }
                }
            }
            if (trTwo.Nodes[0].Nodes.Count > 0)
            {
                foreach (TreeNode tn in trTwo.Nodes[0].Nodes)
                {
                    if (tn.Checked)
                    {
                        Model.Solution_CQMSConstructSolutionApprove approve = new Model.Solution_CQMSConstructSolutionApprove();
                        approve.ConstructSolutionId = constructSolutionId;
                        approve.ApproveMan = tn.NodeID;
                        approve.ApproveType = Const.CQMSConstructSolution_Audit;
                        approve.SignType = "ZL";
                        int edtion = Convert.ToInt32(this.drpEdition.SelectedValue);
                        if (solution != null)
                        {
                        //    edtion++;
                        }
                        approve.Edition = edtion;
                        delSolutionApprove(constructSolutionId, tn.NodeID, "ZL");
                        CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve);
                        APICommonService.SendSubscribeMessage(approve.ApproveMan, "施工方案待办理", this.CurrUser.UserName, string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now));
                    }
                    else
                    {
                        delSolutionApprove(constructSolutionId, tn.NodeID, "ZL");
                    }
                }
            }
            if (trThree.Nodes[0].Nodes.Count > 0)
            {
                foreach (TreeNode tn in trThree.Nodes[0].Nodes)
                {
                    if (tn.Checked)
                    {
                        Model.Solution_CQMSConstructSolutionApprove approve = new Model.Solution_CQMSConstructSolutionApprove();
                        approve.ConstructSolutionId = constructSolutionId;
                        approve.ApproveMan = tn.NodeID;
                        approve.ApproveType = Const.CQMSConstructSolution_Audit;
                        approve.SignType = "AQ";
                        int edtion = Convert.ToInt32(this.drpEdition.SelectedValue);
                        if (solution != null)
                        {
                        //    edtion++;
                        }
                        approve.Edition = edtion;
                        delSolutionApprove(constructSolutionId, tn.NodeID, "AQ");
                        CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve);
                        APICommonService.SendSubscribeMessage(approve.ApproveMan, "施工方案待办理", this.CurrUser.UserName, string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now));
                    }
                    else
                    {
                        delSolutionApprove(constructSolutionId, tn.NodeID, "AQ");
                    }
                }
            }
            if (trFour.Nodes[0].Nodes.Count > 0)
            {
                foreach (TreeNode tn in trFour.Nodes[0].Nodes)
                {
                    if (tn.Checked)
                    {
                        Model.Solution_CQMSConstructSolutionApprove approve = new Model.Solution_CQMSConstructSolutionApprove();
                        approve.ConstructSolutionId = constructSolutionId;
                        approve.ApproveMan = tn.NodeID;
                        approve.ApproveType = Const.CQMSConstructSolution_Audit;
                        approve.SignType = "KZ";
                        int edtion = Convert.ToInt32(this.drpEdition.SelectedValue);
                        if (solution != null)
                        {
                         //   edtion++;
                        }
                        approve.Edition = edtion;
                        delSolutionApprove(constructSolutionId, tn.NodeID, "KZ");
                        CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve);
                        APICommonService.SendSubscribeMessage(approve.ApproveMan, "施工方案待办理", this.CurrUser.UserName, string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now));
                    }
                    else
                    {
                        delSolutionApprove(constructSolutionId, tn.NodeID, "KZ");
                    }
                }
            }
            if (trFive.Nodes[0].Nodes.Count > 0)
            {
                foreach (TreeNode tn in trFive.Nodes[0].Nodes)
                {
                    if (tn.Checked)
                    {
                        Model.Solution_CQMSConstructSolutionApprove approve = new Model.Solution_CQMSConstructSolutionApprove();
                        approve.ConstructSolutionId = constructSolutionId;
                        approve.ApproveMan = tn.NodeID;
                        approve.ApproveType = Const.CQMSConstructSolution_Audit;
                        approve.SignType = "SG";
                        int edtion = Convert.ToInt32(this.drpEdition.SelectedValue);
                        //if (solution != null)
                        //{
                        //    edtion++;
                        //}
                        approve.Edition = edtion;
                        delSolutionApprove(constructSolutionId, tn.NodeID, "SG");
                        CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve);
                        APICommonService.SendSubscribeMessage(approve.ApproveMan, "施工方案待办理", this.CurrUser.UserName, string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now));
                    }
                    else
                    {
                        delSolutionApprove(constructSolutionId, tn.NodeID, "SG");
                    }
                }
            }
            if (trSixe.Nodes[0].Nodes.Count > 0)
            {
                foreach (TreeNode tn in trSixe.Nodes[0].Nodes)
                {
                    if (tn.Checked)
                    {
                        Model.Solution_CQMSConstructSolutionApprove approve = new Model.Solution_CQMSConstructSolutionApprove();
                        approve.ConstructSolutionId = constructSolutionId;
                        approve.ApproveMan = tn.NodeID;
                        approve.ApproveType = Const.CQMSConstructSolution_Audit;
                        approve.SignType = "XM";
                        int edtion = Convert.ToInt32(this.drpEdition.SelectedValue);
                        //if (solution != null)
                        //{
                        //    edtion++;
                        //}
                        approve.Edition = edtion;
                        delSolutionApprove(constructSolutionId, tn.NodeID, "XM");
                        CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve);
                        APICommonService.SendSubscribeMessage(approve.ApproveMan, "施工方案待办理", this.CurrUser.UserName, string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now));
                    }
                    else
                    {
                        delSolutionApprove(constructSolutionId, tn.NodeID, "XM");
                    }
                }
            }
        }
        #region 动态加载角色树
        /// 
        /// 设置树的节点选择
        /// 
        /// 
        /// 
        private void SetCheck(Tree tree, List userIds)
        {
            foreach (TreeNode tn in tree.Nodes[0].Nodes)
            {
                if (userIds.Contains(tn.NodeID))
                {
                    tn.Checked = true;
                }
            }
        }
       private void initDropSameGroup(DropDownList drop , string type)
        {
            List users = new List();
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                switch (type)
                {
                    case "ZY":
                        var userListzy = from x in db.Sys_User
                                       join y in db.Project_ProjectUnit
                                       on x.UnitId equals y.UnitId
                                       join p in db.Project_ProjectUser
                                       on x.UserId equals p.UserId
                                       where p.RoleId.Contains(Const.ZBCNEngineer)
                                       && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                                       select x;
                        users = userListzy.ToList();
                        break;
                    case "ZL":
                        var userListzl = from x in db.Sys_User
                                       join y in db.Project_ProjectUnit
                                       on x.UnitId equals y.UnitId
                                       join p in db.Project_ProjectUser
                                       on x.UserId equals p.UserId
                                       where (p.RoleId.Contains(Const.QAManager) || p.RoleId.Contains(Const.CQEngineer))
                                       && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                                       orderby x.UserCode
                                       select x;
                        users = userListzl.ToList();
                        break;
                    case "AQ":
                        var userListaq = from x in db.Sys_User
                                       join y in db.Project_ProjectUnit
                                       on x.UnitId equals y.UnitId
                                       join p in db.Project_ProjectUser
                                       on x.UserId equals p.UserId
                                       where (p.RoleId.Contains(Const.HSSEManager) || p.RoleId.Contains(Const.HSSEEngineer))
                                       && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                                       orderby x.UserCode
                                       select x;
                        users = userListaq.ToList();
                        break;
                    case "KZ":
                        var userListkz = from x in db.Sys_User
                                       join y in db.Project_ProjectUnit
                                       on x.UnitId equals y.UnitId
                                       join p in db.Project_ProjectUser
                                       on x.UserId equals p.UserId
                                       where (p.RoleId.Contains(Const.ControlManager) || p.RoleId.Contains(Const.KZEngineer))
                                       && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                                       orderby x.UserCode
                                       select x;
                        users = userListkz.ToList();
                        break;
                    case "SG":
                        var userListsg = from x in db.Sys_User
                                       join y in db.Project_ProjectUnit
                                       on x.UnitId equals y.UnitId
                                       join p in db.Project_ProjectUser
                                      on x.UserId equals p.UserId
                                       where (p.RoleId.Contains(Const.ConstructionManager) || p.RoleId.Contains(Const.ConstructionAssistantManager))
                                       && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                                       orderby x.UserCode
                                       select x;
                        users = userListsg.ToList();
                        break;
                    case "Xm":
                        var userListxm = from x in db.Sys_User
                                       join y in db.Project_ProjectUnit
                                       on x.UnitId equals y.UnitId
                                       join p in db.Project_ProjectUser
                                      on x.UserId equals p.UserId
                                       where p.RoleId.Contains(Const.ProjectManager)
                                       && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                                       orderby x.UserCode
                                       select x;
                        users = userListxm.ToList();
                        break;
                }
            }
            drop.DataTextField = "UserName";
            drop.DataValueField = "UserId";
            drop.DataSource = users;
            drop.DataBind();
        }
        /// 加载角色树:动态加载
        /// 
        private void BindZYRole()
        {
            TreeNode rootNode = new TreeNode();//定义根节点
            rootNode.Text = "专业工程师";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            trOne.Nodes.Add(rootNode);
            trOne.EnableCheckBox = true;
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var userList = from x in db.Sys_User
                               join y in db.Project_ProjectUnit
                               on x.UnitId equals y.UnitId
                               join p in db.Project_ProjectUser
                               on x.UserId equals p.UserId
                               where p.RoleId.Contains(Const.ZBCNEngineer) || p.RoleId.Contains(Const.CVEngineer) || p.RoleId.Contains(Const.FEEngineer) || p.RoleId.Contains(Const.PDEngineer) || p.RoleId.Contains(Const.EHEngineer) || p.RoleId.Contains(Const.EAEngineer)
                               where y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                               select x;
                //var ss = LINQToDataTable(userList);
                foreach (var u in userList)
                {
                    TreeNode Node = new TreeNode();
                    Node.Text = u.UserName;
                    Node.NodeID = u.UserId;
                    Node.EnableCheckEvent = true;
                    rootNode.Nodes.Add(Node);
                }
            }
        }
        private void BindZLRole()
        {
            TreeNode rootNode = new TreeNode();//定义根节点
            rootNode.Text = "质量组";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            trTwo.Nodes.Add(rootNode);
            trTwo.EnableCheckBox = true;
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var userList = from x in db.Sys_User
                               join y in db.Project_ProjectUnit
                               on x.UnitId equals y.UnitId
                               join p in db.Project_ProjectUser
                               on x.UserId equals p.UserId
                               where (p.RoleId.Contains(Const.QAManager) || p.RoleId.Contains(Const.CQEngineer))
                               && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                               orderby x.UserCode
                               select x;
                foreach (var u in userList)
                {
                    TreeNode roleNode = new TreeNode();
                    roleNode.Text = u.UserName;
                    roleNode.NodeID = u.UserId;
                    rootNode.Nodes.Add(roleNode);
                }
            }
        }
        /// 
        /// 判断是否有选择
        /// 
        /// 
        /// 
        public Boolean nodesCheckd(Tree node)
        {
            bool res = false;
            if (node.Nodes[0].Nodes.Count > 0)
            {
                foreach (var item in node.Nodes[0].Nodes)
                {
                    if (item.Checked)
                    {
                        res = true;
                        break;
                    }
                }
            }
            return res;
        }
        private void BindAQRole()
        {
            TreeNode rootNode = new TreeNode();//定义根节点
            rootNode.Text = "HSE组";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            trThree.Nodes.Add(rootNode);
            trThree.EnableCheckBox = true;
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var userList = from x in db.Sys_User
                               join y in db.Project_ProjectUnit
                               on x.UnitId equals y.UnitId
                               join p in db.Project_ProjectUser
                               on x.UserId equals p.UserId
                               where (p.RoleId.Contains(Const.HSSEManager) || p.RoleId.Contains(Const.HSSEEngineer))
                               && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                               orderby x.UserCode
                               select x;
                foreach (var u in userList)
                {
                    TreeNode roleNode = new TreeNode();
                    roleNode.Text = u.UserName;
                    roleNode.NodeID = u.UserId;
                    rootNode.Nodes.Add(roleNode);
                }
            }
        }
        private void BindKZRole()
        {
            TreeNode rootNode = new TreeNode();//定义根节点
            rootNode.Text = "控制组";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            trFour.Nodes.Add(rootNode);
            trFour.EnableCheckBox = true;
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var userList = from x in db.Sys_User
                               join y in db.Project_ProjectUnit
                               on x.UnitId equals y.UnitId
                               join p in db.Project_ProjectUser
                               on x.UserId equals p.UserId
                               where (p.RoleId.Contains(Const.ControlManager) || p.RoleId.Contains(Const.KZEngineer))
                               && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                               orderby x.UserCode
                               select x;
                foreach (var u in userList)
                {
                    TreeNode roleNode = new TreeNode();
                    roleNode.Text = u.UserName;
                    roleNode.NodeID = u.UserId;
                    rootNode.Nodes.Add(roleNode);
                }
            }
        }
        private void BindSGRole()
        {
            TreeNode rootNode = new TreeNode();//定义根节点
            rootNode.Text = "施工经理";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            trFive.Nodes.Add(rootNode);
            trFive.EnableCheckBox = true;
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var userList = from x in db.Sys_User
                               join y in db.Project_ProjectUnit
                               on x.UnitId equals y.UnitId
                               join p in db.Project_ProjectUser
                              on x.UserId equals p.UserId
                               where (p.RoleId.Contains(Const.ConstructionManager) || p.RoleId.Contains(Const.ConstructionAssistantManager))
                               && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                               orderby x.UserCode
                               select x;
                foreach (var u in userList)
                {
                    TreeNode roleNode = new TreeNode();
                    roleNode.Text = u.UserName;
                    roleNode.NodeID = u.UserId;
                    rootNode.Nodes.Add(roleNode);
                }
            }
        }
        private void BindXMRole()
        {
            TreeNode rootNode = new TreeNode();//定义根节点
            rootNode.Text = "项目经理";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            trSixe.Nodes.Add(rootNode);
            trSixe.EnableCheckBox = true;
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var userList = from x in db.Sys_User
                               join y in db.Project_ProjectUnit
                               on x.UnitId equals y.UnitId
                               join p in db.Project_ProjectUser
                              on x.UserId equals p.UserId
                               where p.RoleId.Contains(Const.ProjectManager)
                               && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId && y.ProjectId == CurrUser.LoginProjectId
                               orderby x.UserCode
                               select x;
                foreach (var u in userList)
                {
                    TreeNode roleNode = new TreeNode();
                    roleNode.Text = u.UserName;
                    roleNode.NodeID = u.UserId;
                    rootNode.Nodes.Add(roleNode);
                }
            }
        }
        #endregion
        #region 树结构的全选
        protected void trOne_NodeCheck(object sender, TreeCheckEventArgs e)
        {
            if (e.Checked)
            {
                trOne.CheckAllNodes(e.Node.Nodes);
            }
            else
            {
                trOne.UncheckAllNodes(e.Node.Nodes);
            }
        }
        protected void trTwo_NodeCheck(object sender, TreeCheckEventArgs e)
        {
            if (e.Checked)
            {
                trTwo.CheckAllNodes(e.Node.Nodes);
            }
            else
            {
                trTwo.UncheckAllNodes(e.Node.Nodes);
            }
        }
        protected void trThree_NodeCheck(object sender, TreeCheckEventArgs e)
        {
            if (e.Checked)
            {
                trThree.CheckAllNodes(e.Node.Nodes);
            }
            else
            {
                trThree.UncheckAllNodes(e.Node.Nodes);
            }
        }
        protected void trFour_NodeCheck(object sender, TreeCheckEventArgs e)
        {
            if (e.Checked)
            {
                trFour.CheckAllNodes(e.Node.Nodes);
            }
            else
            {
                trFour.UncheckAllNodes(e.Node.Nodes);
            }
        }
        protected void trFive_NodeCheck(object sender, TreeCheckEventArgs e)
        {
            if (e.Checked)
            {
                trFive.CheckAllNodes(e.Node.Nodes);
            }
            else
            {
                trFive.UncheckAllNodes(e.Node.Nodes);
            }
        }
        protected void trSixe_NodeCheck(object sender, TreeCheckEventArgs e)
        {
            if (e.Checked)
            {
                trSixe.CheckAllNodes(e.Node.Nodes);
            }
            else
            {
                trSixe.UncheckAllNodes(e.Node.Nodes);
            }
        }
        #endregion
        protected void imgBtnFile_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(HFConstructSolutionId.Text))   //新增记录
            {
                HFConstructSolutionId.Text = SQLHelper.GetNewID(typeof(Model.Solution_CQMSConstructSolution));
            }
            if (this.drpEdition.SelectedValue == "0" && this.imgBtnFile2.Hidden && this.State==Const.CQMSConstructSolution_Compile)//编辑的时候,查看当前版本
            {
                var edition = this.drpEdition.SelectedValue;
                PageContext.RegisterStartupScript(WindowAtt.GetShowReference(
                            String.Format("../../AttachFile/webuploader.aspx?type={0}&toKeyId={1}&path=FileUpload/Solution&menuId={2}",
                            0, HFConstructSolutionId.Text + edition, Const.CQMSConstructSolutionMenuId)));
            }
            else if( this.State == Const.CQMSConstructSolution_ReCompile &&( this.drpEdition.SelectedIndex+1) == this.drpEdition.Items.Count)//编辑的时候,查看当前版本
            {
                var edition = this.drpEdition.SelectedValue;
                PageContext.RegisterStartupScript(WindowAtt.GetShowReference(
                            String.Format("../../AttachFile/webuploader.aspx?type={0}&toKeyId={1}&path=FileUpload/Solution&menuId={2}",
                            0, HFConstructSolutionId.Text + edition, Const.CQMSConstructSolutionMenuId)));
            }else
            {
                PageContext.RegisterStartupScript(WindowAtt.GetShowReference(
            String.Format("../../AttachFile/webuploader.aspx?type={0}&toKeyId={1}&path=FileUpload/Solution&menuId={2}",
            -1, HFConstructSolutionId.Text + this.drpEdition.SelectedValue, Const.CQMSConstructSolutionMenuId)));
            }
        }
        protected void imgBtnFile_Click2(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(HFConstructSolutionId.Text))   //新增记录
            {
                HFConstructSolutionId.Text = SQLHelper.GetNewID(typeof(Model.Solution_CQMSConstructSolution));
            }
            var edition = this.drpEdition.SelectedValue;
            if (this.imgBtnFile2.Hidden == false)
            {
                edition = "" + (Convert.ToInt32(this.drpEdition.SelectedValue) - 1);
            }
            PageContext.RegisterStartupScript(WindowAtt.GetShowReference(
        String.Format("../../AttachFile/webuploader.aspx?type={0}&toKeyId={1}&path=FileUpload/Solution&menuId={2}",
        -1, HFConstructSolutionId.Text + edition, Const.CQMSConstructSolutionMenuId)));
        }
        protected void btnapprove_Click(object sender, EventArgs e)
        {
            //HFConstructSolutionId.Text
            var approve = CQMSConstructSolutionApproveService.GetConstructSolutionApproveByApproveMan(HFConstructSolutionId.Text, CurrUser.UserId);
            if (approve != null)
            {
                var approveId = approve.ConstructSolutionApproveId;
                PageContext.RegisterStartupScript(WindowAtt.GetShowReference(
                String.Format("../../AttachFile/webuploader.aspx?type={0}&toKeyId={1}&path=FileUpload/Solution&menuId={2}",
                0, approveId, Const.CQMSConstructSolutionMenuId)));
            }
        }
        protected void rblIsAgree_CheckedChanged(object sender, EventArgs e)
        {
            if (this.rblIsAgree.SelectedIndex == 2)
            {
                sameGroup.Hidden = false;
                optio.Hidden =true ;
                options.Hidden = true;
            }
            else
            {
                sameGroup.Hidden = true;
                optio.Hidden = false;
                options.Hidden = false;
            }
        }
        protected void gvApprove_RowCommand(object sender, GridCommandEventArgs e)
        {
            object[] keys = gvApprove.DataKeys[e.RowIndex];
            string fileId = string.Empty;
            if (keys == null)
            {
                return;
            }
            else
            {
                fileId = keys[0].ToString();
                var appr = Funs.DB.Solution_CQMSConstructSolutionApprove.Where(u => u.ConstructSolutionApproveId == fileId).FirstOrDefault();
                if (appr.ApproveType == Const.CQMSConstructSolution_Compile || appr.ApproveType == Const.CQMSConstructSolution_ReCompile)
                {
                    fileId = appr.ConstructSolutionId + appr.Edition;
                }
            }
            PageContext.RegisterStartupScript(WindowAtt.GetShowReference(
                 String.Format("../../AttachFile/webuploader.aspx?type={0}&toKeyId={1}&path=FileUpload/Solution&menuId={2}",
                 -1, fileId, Const.CQMSConstructSolutionMenuId)));
        }
        /// 
        /// 根据施工方案加载专项施工方案
        /// 
        /// 
        /// 
        protected void drpModelType_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (drpModelType.SelectedValue != BLL.Const._Null)
            {
                if (this.drpModelType.SelectedItem.Text == "施工组织设计")
                {
                    this.drpSpecialType.Enabled = false;
                    this.drpSpecialType.SelectedValue = null;
                    this.drpSpecialType.Required = false;
                }
                else if (this.drpModelType.SelectedItem.Text == "一般方案")
                {
                    BLL.SpecialSchemeTypeService.InitSpecialSchemeTypeDropDownList(drpSpecialType, 2, false);
                    this.drpSpecialType.Enabled = true;
                    this.drpSpecialType.Required = true;
                }
                else
                {
                    BLL.SpecialSchemeTypeService.InitSpecialSchemeTypeDropDownList(drpSpecialType, 1, false);
                    this.drpSpecialType.Enabled = true;
                    this.drpSpecialType.Required = true;
                }
            }
        }
        
        /// 
        /// 审批列表删除记录
        /// 
        /// 
        /// 
        protected void btnRevoke_Click(object sender, EventArgs e)
        {
            System.Web.UI.WebControls.Button btn = (System.Web.UI.WebControls.Button)sender;
            // 获取点击按钮所在的行索引
            int rowIndex = (btn.NamingContainer as IDataItemContainer).DisplayIndex;
            var ID = gvApprove.DataKeys[rowIndex][0];
            var approve = Funs.DB.Solution_CQMSConstructSolutionApprove.Where(x => x.ConstructSolutionApproveId == ID).FirstOrDefault();
            if (approve != null)
            {
                approve.ApproveDate = null;
                approve.ApproveIdea = null;
                approve.IsAgree = null;
                Funs.DB.SubmitChanges();
            }
            //更新方案状态
            Model.Solution_CQMSConstructSolution constructSolution = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId); 
            var ApproveModel = CQMSConstructSolutionApproveService.getListData(ConstructSolutionId).LastOrDefault() ;
            if (constructSolution != null)
            {
                if (ApproveModel != null)
                {
                    constructSolution.State = ApproveModel.ApproveType;
                }
                else
                {
                    constructSolution.State = Const.CQMSConstructSolution_Compile;
                }
            } 
            CQMSConstructSolutionService.UpdateConstructSolution(constructSolution);
            bindApprove();
        }
    }
}