using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Web;
using BLL;
using FineUIPro.Web.HSSE.Solution;
using Model;
using Newtonsoft.Json.Linq;
using AspNet = System.Web.UI.WebControls;
namespace FineUIPro.Web.CQMS.Solution
{
    public partial class EditConstructSolution : PageBase
    {
        
        #region 定义变量
        /// 
        ///     方案审查主键
        /// 
        public string ConstructSolutionId
        {
            get => (string)ViewState["ConstructSolutionId"];
            set => ViewState["ConstructSolutionId"] = value;
        }
        /// 
        /// 是否第二次并且不同意的时候
        /// 
        public bool isSendTrue
        {
            get => (bool)ViewState["isSendTrue"];
            set => ViewState["isSendTrue"] = value;
        }
        #endregion
        private static List complianceObligationsCs = new List();
        public int ContactImg
        {
            get => Convert.ToInt32(ViewState["ContactImg"]);
            set => ViewState["ContactImg"] = value;
        }
        private string[] GetUserNames(string Ids)
        {
            string[] arr = Ids.Split(',');
            var data = Funs.DB.Sys_User.Where(t => arr.Contains(t.UserId)).Select(t => t.UserName).ToList();
            if (data.Count > 0)
                return data.ToArray();
            return null;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                isSendTrue = false;
                complianceObligationsCs.Clear();
                InitDropDownList(); //加载下拉框
                //加载一级审核人员
                GetCheckManBindGrid1();
                //加载二级审批人员
                GetCheckManBindGrid2();
                //GetCheckManBindGrid3();
                GetCheckManBindGrid4();
                //BindZYRole();
                //BindAQRole();
                //BindSGRole();
                ContactImg = 0;
                txtCompileDate.Text = string.Format("{0:yyyy-MM-dd}", DateTime.Now);
                ConstructSolutionId = Request.Params["constructSolutionId"];
                txtProjectName.Text = ProjectService.GetProjectByProjectId(CurrUser.LoginProjectId).ProjectName;
                if (!string.IsNullOrWhiteSpace(ConstructSolutionId))
                {
                    bindApprove();
                    #region 初始化表单
                    HFConstructSolutionId.Text = ConstructSolutionId;
                    var constructSolution =
                        CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
                    txtCode.Text = constructSolution.Code;
                    if (!string.IsNullOrEmpty(constructSolution.UnitId))
                    {
                        drpUnit.SelectedValue = constructSolution.UnitId;
                    }
                    if (!string.IsNullOrEmpty(constructSolution.SolutionType))
                    {
                        drpModelType.SelectedValue = constructSolution.SolutionType;
                    }
                    if (!string.IsNullOrEmpty(constructSolution.SpecialSchemeTypeId) &&
                        !string.IsNullOrEmpty(constructSolution.SolutionType))
                    {
                        drpSpecialType.SelectedValue = constructSolution.SpecialSchemeTypeId;
                    }
                    if (constructSolution.CompileDate != null)
                    {
                        txtCompileDate.Text = string.Format("{0:yyyy-MM-dd}", constructSolution.CompileDate);
                    }
                    if (!string.IsNullOrEmpty(constructSolution.UnitWorkIds) &&
                        constructSolution.UnitWorkIds.Length > 0)
                    {
                        txtUnitWork.Values = constructSolution.UnitWorkIds.Split(',');
                    }
                    if (!string.IsNullOrEmpty(constructSolution.CNProfessionalCodes) &&
                        constructSolution.CNProfessionalCodes.Length > 0)
                    {
                        txtCNProfessional.Values = constructSolution.CNProfessionalCodes.Split(',');
                    }
                    if (constructSolution.Edition != null)
                    {
                        txtEdition.Text = constructSolution.Edition.ToString();
                    }
                    txtSolutionName.Text = constructSolution.SolutionName;
                    txtDocContent.Text = HttpUtility.HtmlDecode(constructSolution.Content);
                    #endregion
                    #region 检查树节点
                    var zyUserIds =
                        CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "Yi");
                    if (zyUserIds.Count > 0)
                    {
                        var zyUserIdsStr = string.Join(",", zyUserIds);
                        drpzyUserIds.Values = zyUserIdsStr.Split(',');
                        drpzyUserIds.Texts = GetUserNames(zyUserIdsStr);
                        //SetCheck(trOne, zyUserIds);
                    }
                    var aqUserIds =
                        CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "Er");
                    if (aqUserIds.Count > 0)
                    {
                        var aqUserIdsStr = string.Join(",", aqUserIds);
                        drpaqUserIds.Values = aqUserIdsStr.Split(',');
                        drpaqUserIds.Texts = GetUserNames(aqUserIdsStr);
                        //SetCheck(trThree, aqUserIds);
                    }
                    var sgUserIds =
                        CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignType(ConstructSolutionId, "SG");
                    if (sgUserIds.Count > 0)
                    {
                        var sgUserIdsStr = string.Join(",", sgUserIds);
                        //drpsgUserIds.Values = sgUserIdsStr.Split(',');
                        //drpsgUserIds.Texts = GetUserNames(sgUserIdsStr);
                        //SetCheck(trFive, sgUserIds);
                    }
                    if (!string.IsNullOrEmpty(constructSolution.CsUsers))
                    {
                        drpCsUsers.Values = constructSolution.CsUsers.Split(',');
                        drpCsUsers.Texts = GetUserNames(constructSolution.CsUsers);
                    }
                    #endregion
                    
                    if (constructSolution.State == Const.CQMSConstructSolution_ReCompile)
                    {
                        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 = -2;
                        //Panel2.Enabled = false;
                        //Panel2.Hidden = true;
                        btnSave.Hidden = true;
                        //txtDocContent.Readonly = true;
                        drpzyUserIds.Enabled = false;
                        drpaqUserIds.Enabled = false;
                        //drpsgUserIds.Enabled = false;
                        drpCsUsers.Enabled = false;
                        txtEdition.Enabled = false;
                        agree.Hidden = true;
                       
                        optio.Hidden = true;
                        #region 重报
                        zyUserIds =
                        CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignTypeNew(ConstructSolutionId, "Yi");
                        if (zyUserIds.Count > 0)
                        {
                            var zyUserIdsStr = string.Join(",", zyUserIds);
                            drpzyUserIds.Values = zyUserIdsStr.Split(',');
                            drpzyUserIds.Texts = GetUserNames(zyUserIdsStr);
                            //SetCheck(trOne, zyUserIds);
                        }
                         aqUserIds =
                            CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignTypeNew(ConstructSolutionId, "Er");
                        if (aqUserIds.Count > 0)
                        {
                            var aqUserIdsStr = string.Join(",", aqUserIds);
                            drpaqUserIds.Values = aqUserIdsStr.Split(',');
                            drpaqUserIds.Texts = GetUserNames(aqUserIdsStr);
                            //SetCheck(trThree, aqUserIds);
                        }
                         sgUserIds =
                            CQMSConstructSolutionApproveService.GetUserIdsApprovesBySignTypeNew(ConstructSolutionId, "SG");
                        if (sgUserIds.Count > 0)
                        {
                            var sgUserIdsStr = string.Join(",", sgUserIds);
                            //drpsgUserIds.Values = sgUserIdsStr.Split(',');
                            //drpsgUserIds.Texts = GetUserNames(sgUserIdsStr);
                            //SetCheck(trFive, sgUserIds);
                        }
                        #endregion
                        //重报的情况下
                        //加载
                        complianceObligationsCs = Funs.DB.Solution_CQMSConstructSolutionApprove_Item.Where(x => x.ConstructSolutionId == ConstructSolutionId)
                           .OrderBy(x => x.SortId).OrderBy(x => x.Proposer).ToList();
                        if (complianceObligationsCs.Count > 0)
                        {
                            gvOperateComplianceObligations.DataSource = complianceObligationsCs;
                            gvOperateComplianceObligations.DataBind();
                        }
                        options.Hidden = false;
                        options1.Hidden = false;
                        btnNew.Hidden = true;
                        gvOperateComplianceObligations.AllColumns[0].Hidden = true;
                        gvOperateComplianceObligations.AllColumns[6].Hidden = true;
                        gvOperateComplianceObligations.AllColumns[7].Hidden = true;
                    }
                    if (constructSolution.State == Const.CQMSConstructSolution_Audit ||
                        constructSolution.State == Const.CQMSConstructSolution_Audit1)
                    {
                        plApprove2.Hidden = true;
                        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 = -2;
                        //Panel2.Enabled = false;
                        //Panel2.Hidden = true;
                        btnSave.Hidden=true;
                        txtDocContent.Readonly=true;
                        drpzyUserIds.Enabled = false;
                        drpaqUserIds.Enabled = false;
                        //drpsgUserIds.Enabled = false;
                        drpCsUsers.Enabled = false;
                        txtEdition.Enabled = false;
                        //1级审批 二级审批,如果填写过Solution_CQMSConstructSolutionApprove_Item的情况 则显示
                        complianceObligationsCs = Funs.DB.Solution_CQMSConstructSolutionApprove_Item.Where(x => x.ConstructSolutionId == ConstructSolutionId
                        && x.Proposer == CurrUser.UserId).OrderBy(x => x.SortId).ToList();
                        if (complianceObligationsCs.Count > 0)
                        {
                            isSendTrue = true;
                            options.Hidden = false;
                            options1.Hidden = false;
                            gvOperateComplianceObligations.DataSource = complianceObligationsCs;
                            gvOperateComplianceObligations.DataBind();
                            gvOperateComplianceObligations.AllColumns[4].Hidden = true;
                        }
                        
                    }
                   
                    ////提交版本人多次修改
                    //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;
                    //    Panel2.Enabled = true;
                    //    rblIsAgree.Hidden = true;
                    //    rblIsAgree.Required = false;
                    //    options.Hidden = true;
                    //    txtOptions.Required = false;
                    //    optio.Hidden = true;
                    //}
                    //    if (drpModelType.SelectedItem.Text == "施工组织设计") drpSpecialType.Enabled = false;
                }
                else
                {
                    agree.Hidden = true;
                    txtEdition.Text = "0";
                    options.Hidden = true;
                    options1.Hidden = true;
                    optio.Hidden = true;
                    plApprove2.Hidden = true;
                    txtCode.Text = SQLHelper.RunProcNewId2("SpGetNewCode3ByProjectId",
                        "dbo.Solution_CQMSConstructSolution", "Code", CurrUser.LoginProjectId);
                }
                AddAttachTab();
            }
        }
        /// 
        ///     向tab增加
        /// 
        private void AddAttachTab()
        {
            if (string.IsNullOrEmpty(HFConstructSolutionId.Text)) //新增记录
                HFConstructSolutionId.Text = SQLHelper.GetNewID(typeof(Solution_CQMSConstructSolution));
            PageContext.RegisterStartupScript(TabStrip1.GetAddTabReference("dynamic_tab2",
                string.Format(
                    "../../AttachFile/webuploader.aspx?type={0}&toKeyId={1}&path=FileUpload/Solution&menuId={2}",
                    ContactImg, HFConstructSolutionId.Text, Const.CQMSConstructSolutionMenuId), "附件",
                IconHelper.GetIconUrl(Icon.Attach), false));
            // PageContext.RegisterStartupScript(WindowAtt.GetShowReference(String.Format("../AttachFile/webuploader.aspx?toKeyId={0}&path=FileUpload/DocManage&menuId={1}", hdDocId.Text, Const.DocManageMenuId)));
        }
        private void InitDropDownList()
        {
            var unitWork = UnitWorkService.GetUnitWorkLists(CurrUser.LoginProjectId);
            var unitWorks = from x in unitWork
                select
                    new
                    {
                        x.UnitWorkId,
                        UnitWorkName = x.UnitWorkCode + "-" + x.UnitWorkName +
                                       UnitWorkService.GetProjectType(x.ProjectType)
                    };
            gvUnitWork.DataSource = unitWorks;
            gvUnitWork.DataBind();
            var gvCNProfessional = CNProfessionalService.GetList();
            gvCNPro.DataSource = gvCNProfessional;
            gvCNPro.DataBind();
            SolutionTempleteTypeService.InitSolutionTempleteDropDownList(drpModelType, false);
            SpecialSchemeTypeService.InitSpecialSchemeTypeDropDownList(drpSpecialType, false);
            UnitService.InitUnitByProjectIdUnitTypeDropDownList(drpUnit, CurrUser.LoginProjectId,
                Const.ProjectUnitType_2, false);
        }
        /// 
        ///     审批列表
        /// 
        private void bindApprove()
        {
            var list = CQMSConstructSolutionApproveService.getListData(ConstructSolutionId);
            gvApprove.DataSource = list;
            gvApprove.DataBind();
        }
        public string man(object man)
        {
            var appman = string.Empty;
            if (UserService.GetUserByUserId(man.ToString()) != null)
                appman = UserService.GetUserByUserId(man.ToString()).UserName;
            return appman;
        }
        private void Save(string saveType)
        {
             var constructSolution = new Solution_CQMSConstructSolution();
             if (!string.IsNullOrEmpty(ConstructSolutionId))
             {
                 constructSolution =
                     CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
             } 
            constructSolution.Code = txtCode.Text.Trim();
            constructSolution.ProjectId = CurrUser.LoginProjectId;
            if (drpUnit.SelectedValue != "0")
            {
                constructSolution.UnitId = drpUnit.SelectedValue;
            }
            if (drpModelType.SelectedValue != "0")
            {
                constructSolution.SolutionType = drpModelType.SelectedValue;
            }
            if (drpSpecialType.SelectedValue != "0")
            {
                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);
            }
            //抄送人
            string sendUserIds = string.Empty;
            if (!string.IsNullOrEmpty(drpCsUsers.Value))
            {
                sendUserIds = string.Join(",", drpCsUsers.Values);
            }
            constructSolution.CsUsers = sendUserIds;
            constructSolution.Edition = Convert.ToInt32(txtEdition.Text);
            constructSolution.ConstructSolutionId = HFConstructSolutionId.Text;
            constructSolution.Content = txtDocContent.Text.Trim();
            
            if (!string.IsNullOrEmpty(ConstructSolutionId))
            {
                CQMSConstructSolutionService.UpdateConstructSolution(constructSolution);
                if(string.IsNullOrEmpty(constructSolution.State))
                {
                    constructSolution.State = Const.CQMSConstructSolution_Compile;
                }
                LogService.AddSys_Log(CurrUser, constructSolution.Code, ConstructSolutionId,
                    Const.CQMSConstructSolutionMenuId, "修改施工方案");
            }
            else
            {
                constructSolution.CompileMan = CurrUser.UserId;
                constructSolution.State = Const.CQMSConstructSolution_Compile;
                CQMSConstructSolutionService.AddConstructSolution(constructSolution);
                LogService.AddSys_Log(CurrUser, constructSolution.Code, ConstructSolutionId,
                    Const.CQMSConstructSolutionMenuId, "添加施工方案");
            }
            if (constructSolution.State== Const. CQMSConstructSolution_Compile  && saveType == "submit") 
            {
                countersign(constructSolution.ConstructSolutionId);
                constructSolution.State = Const.CQMSConstructSolution_Audit;
                CQMSConstructSolutionService.UpdateConstructSolution(constructSolution);
                var approve = new Solution_CQMSConstructSolutionApprove();
                approve.ConstructSolutionId = constructSolution.ConstructSolutionId;
                approve.ApproveDate = DateTime.Now;
                approve.ApproveMan = CurrUser.UserId;
                approve.ApproveType = Const.CQMSConstructSolution_Compile;
                approve.Edition = Convert.ToInt32(txtEdition.Text);
                CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve);
            }
            else if (constructSolution.State == Const.CQMSConstructSolution_ReCompile && saveType == "submit")
            {
                countersign(constructSolution.ConstructSolutionId);
                constructSolution.State = Const.CQMSConstructSolution_Audit;
                CQMSConstructSolutionService.UpdateConstructSolution(constructSolution);
                var approve = Funs.DB.Solution_CQMSConstructSolutionApprove.Where(x => x.ApproveDate == null &&
                x.ConstructSolutionId == ConstructSolutionId && x.ApproveMan == CurrUser.UserId && x.ApproveType=="0").First();
                if (approve!=null)
                {
                    approve.ApproveDate = DateTime.Now;
                    CQMSConstructSolutionApproveService.UpdateConstructSolutionApprove(approve);
                    TbrOperateComplianceObligationsCSort();
                }
            }
            //一级审核
            else if (constructSolution.State == Const.CQMSConstructSolution_Audit && saveType == "submit")
            {
                UpdateApprove("Yi");
            }
            //二级审批
            else if (constructSolution.State == Const.CQMSConstructSolution_Audit1 && saveType == "submit")
            {
                UpdateApprove("Er");
            }
        }
        /// 
        /// 修改审批意见
        /// 
        private void UpdateApprove(string signType)
        {
            var state = "";
            if (signType == "Yi")
            {
                state = "2";
            }
            else {
                state = "3";
            }
            var approveList = CQMSConstructSolutionApproveService.GetThisApproveByConstructSolutionId(ConstructSolutionId, state);
            if (approveList.Any(x => x.ApproveMan.IndexOf(CurrUser.UserId) > -1))
            {
                var approve = approveList.FirstOrDefault(x => x.ApproveMan == CurrUser.UserId);
                if (approve.ApproveMan == this.CurrUser.UserId)
                {
                    approve.ApproveDate = DateTime.Now;
                    approve.IsAgree = Convert.ToBoolean(rblIsAgree.SelectedValue);
                    //approve.ApproveIdea = txtOptions.Text.Trim();
                    approve.Edition = Convert.ToInt32(txtEdition.Text);
                    CQMSConstructSolutionApproveService.UpdateConstructSolutionApprove(approve);
                    //如果第二次审批,并且有不同意的情况下,进行修改
                    if (isSendTrue)
                    {
                        SprOperateComplianceObligationsCSort();
                    }
                    //不同意的情况下 审批人增加列表
                    if (Convert.ToBoolean(rblIsAgree.SelectedValue) == false)
                    {
                        if (isSendTrue)
                        {
                            SprOperateComplianceObligationsCSort();
                        }
                        else {
                            OperateComplianceObligationsCSort();
                        }
                        
                    }
                    CheckIsAllAgree(signType);
                }
            }
        }
        /// 
        /// 判断是否全部同意
        /// 
        private void CheckIsAllAgree(string signType)
        {
            var edtion = Convert.ToInt32(txtEdition.Text);
            var constructSolution =
                CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
         
            //var needApporveCount = allApproves.Where(x => x.ApproveDate == null).Count();
            //if (needApporveCount>0) return; //判断是否最后一个审批
             
           
            //一级审核
            if (signType=="Yi")
            {
                var allApproves = CQMSConstructSolutionApproveService.GetHandleConstructSolutionApprovesByConstructSolutionId(ConstructSolutionId,
                 constructSolution.Edition == null ? 0 : Convert.ToInt32(constructSolution.Edition));
                var count = allApproves.Where(p => p.SignType == "Yi").Count(); //查询一级所有数量
                var ycount = allApproves.Where(p =>p.ApproveDate != null && p.IsAgree != null 
                && Convert.ToBoolean(p.IsAgree) && p.SignType=="Yi").Count(); //查询一级审核同意的
                var fcount = allApproves.Where(p =>p.ApproveDate != null && p.IsAgree != null 
                && !Convert.ToBoolean(p.IsAgree) && p.SignType == "Yi").Count(); //查询一级审核不同意的
                //如果当前已经审核完
                if (count == (ycount + fcount))
                {
                    //全部同意
                    if (ycount == count)
                    {
                        //走到下一步,修改施工方案状态为二级审批
                        var cons = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
                        cons.State = Const.CQMSConstructSolution_Audit1;
                        CQMSConstructSolutionService.UpdateConstructSolution(cons);
                    }
                    else {
                        //有不同意的直接打回
                        var cons = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(
                        ConstructSolutionId);
                        var reApprove = new 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.CompileDate = DateTime.Now;
                        cons.Edition = edtion;
                        constructSolution.State = Const.CQMSConstructSolution_ReCompile;
                        CQMSConstructSolutionService.UpdateConstructSolution(cons);
                        LogService.AddSys_Log(CurrUser, constructSolution.Code, ConstructSolutionId,
                            Const.CQMSConstructSolutionMenuId, "修改施工方案");
                    }
                }
                else {
                    //没有审核完就跳出
                    return;
                }
            }
            else if (signType=="Er")
            {
                var allApproves = CQMSConstructSolutionApproveService.GetHandleConstructSolutionApprovesByConstructSolutionId2(ConstructSolutionId,
                 constructSolution.Edition == null ? 0 : Convert.ToInt32(constructSolution.Edition));
                var count = allApproves.Where(p => p.SignType == "Er").Count(); //查询二级所有数量
                var ycount = allApproves.Where(p => p.ApproveDate != null && p.IsAgree != null
                && Convert.ToBoolean(p.IsAgree) && p.SignType == "Er").Count(); //查询二级审核同意的
                var fcount = allApproves.Where(p => p.ApproveDate != null && p.IsAgree != null
                && !Convert.ToBoolean(p.IsAgree) && p.SignType == "Er").Count(); //查询二级审核不同意的
                // 如果当前已经审核完
                if (count == (ycount + fcount))
                {
                    //全部同意
                    if (ycount == count)
                    {
                        //完成
                        var cons = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
                        cons.State = Const.CQMSConstructSolution_Complete;
                        cons.CompileDate = DateTime.Now;
                        CQMSConstructSolutionService.UpdateConstructSolution(cons);
                    }
                    else
                    {
                        //有不同意的直接打回
                        var cons = CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(
                        ConstructSolutionId);
                        var reApprove = new 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.CompileDate = DateTime.Now;
                        cons.Edition = edtion;
                        constructSolution.State = Const.CQMSConstructSolution_ReCompile;
                        CQMSConstructSolutionService.UpdateConstructSolution(cons);
                        LogService.AddSys_Log(CurrUser, constructSolution.Code, ConstructSolutionId,
                            Const.CQMSConstructSolutionMenuId, "修改施工方案");
                    }
                }
                else
                {
                    //没有审核完就跳出
                    return;
                }
            }
            //if (count == allApproves.Count)//全部同意
            //{
                
            //}
            ////有不同意意见,打回重新编制
            //if (fcount > 0)
            //{
                
            //}
        }
        /// 
        ///     保存验证
        /// 
        /// 
        /// 
        public void validate(string buttonName, string tip)
        {
            if (CommonService.GetAllButtonPowerList(CurrUser.LoginProjectId, CurrUser.UserId,
                    Const.CQMSConstructSolutionMenuId, buttonName))
            {
                var err = string.Empty;
                if (!AttachFileService.Getfile(HFConstructSolutionId.Text, Const.CQMSConstructSolutionMenuId))
                    err += "请上传附件,";
                var list = new List();
                //list.Add(trOne);
                //list.Add(trThree);
                //list.Add(trFive);
                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 = "提交成功!";
                    CQMSConstructSolutionApproveService.PushMessageToNextMan(ConstructSolutionId);
                }
                Alert.ShowInTop(tip, MessageBoxIcon.Success);
            }
            else
            {
                Alert.ShowInTop("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
            }
        }
        #region 添加时候的保存
        /// 
        ///     保存方案审查
        /// 
        /// 保存类型
        private void SaveCQMSConstructSolution(string saveType)
        {
            var constructSolution = new Solution_CQMSConstructSolution();
            constructSolution.Code = txtCode.Text.Trim();
            constructSolution.ProjectId = CurrUser.LoginProjectId;
            if (drpUnit.SelectedValue != "0")
            {
                constructSolution.UnitId = drpUnit.SelectedValue;
            }
            if (drpModelType.SelectedValue != "0")
            {
                constructSolution.SolutionType = drpModelType.SelectedValue;
            }
            if (drpSpecialType.SelectedValue != "0")
            {
                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 (saveType == "submit")
            {
                constructSolution.State = Const.CQMSConstructSolution_Audit;
            }
            else
            {
                constructSolution.State = Const.CQMSConstructSolution_Compile;
            }
            constructSolution.CompileMan = CurrUser.UserId;
            constructSolution.Edition = Convert.ToInt32(txtEdition.Text);
            constructSolution.ConstructSolutionId = HFConstructSolutionId.Text;
            constructSolution.Content = txtDocContent.Text.Trim();
            if (!string.IsNullOrEmpty(ConstructSolutionId))
            {
                CQMSConstructSolutionService.UpdateConstructSolution(constructSolution);
            }
            else
            {
                CQMSConstructSolutionService.AddConstructSolution(constructSolution);
            }
            if (saveType == "submit")
            {
                var approve1 = new Solution_CQMSConstructSolutionApprove();
                approve1.ConstructSolutionId = constructSolution.ConstructSolutionId;
                approve1.ApproveDate = DateTime.Now;
                approve1.ApproveMan = CurrUser.UserId;
                approve1.ApproveType = Const.CQMSConstructSolution_Compile;
                approve1.Edition = Convert.ToInt32(txtEdition.Text);
                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);
            //一级审核人员
            foreach (var item in drpzyUserIds.Values)
            {
                var approve = new Solution_CQMSConstructSolutionApprove();
                approve.ConstructSolutionId = constructSolutionId;
                approve.ApproveMan = item;
                approve.ApproveType = Const.CQMSConstructSolution_Audit;
                approve.SignType = "Yi";
                var edtion = Convert.ToInt32(txtEdition.Text);
                //if (solution != null) edtion++;
                approve.Edition = edtion;
                approve.Order = 2;
                //delSolutionApprove(constructSolutionId, item, "Yi");
                CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve);
            }
            //二级审批人员
            foreach (var item in drpaqUserIds.Values)
            {
                var approve = new Solution_CQMSConstructSolutionApprove();
                approve.ConstructSolutionId = constructSolutionId;
                approve.ApproveMan = item;
                approve.ApproveType = Const.CQMSConstructSolution_Audit1;
                approve.SignType = "Er";
                var edtion = Convert.ToInt32(txtEdition.Text);
                //  if (solution != null) edtion++;
                approve.Edition = edtion;
                approve.Order = 3;
                //delSolutionApprove(constructSolutionId, item, "Er");
                CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve);
            }
            //foreach (var item in drpsgUserIds.Values)
            //{
            //    var approve = new Solution_CQMSConstructSolutionApprove();
            //    approve.ConstructSolutionId = constructSolutionId;
            //    approve.ApproveMan = item;
            //    approve.ApproveType = Const.CQMSConstructSolution_Audit;
            //    approve.SignType = "SG";
            //    var edtion = Convert.ToInt32(txtEdition.Text);
            //    //if (solution != null) edtion++;
            //    approve.Edition = edtion;
            //    approve.Order = 3;
            //    delSolutionApprove(constructSolutionId, item, "SG");
            //    CQMSConstructSolutionApproveService.AddConstructSolutionApprove(approve);
            //}
            //if (trOne.Nodes[0].Nodes.Count > 0)
            //    foreach (var tn in trOne.Nodes[0].Nodes)
            //        if (tn.Checked)
            //        {
            //            var approve = new Solution_CQMSConstructSolutionApprove();
            //            approve.ConstructSolutionId = constructSolutionId;
            //            approve.ApproveMan = tn.NodeID;
            //            approve.ApproveType = Const.CQMSConstructSolution_Audit;
            //            approve.SignType = "ZY";
            //            var edtion = Convert.ToInt32(txtEdition.Text);
            //            //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 (trThree.Nodes[0].Nodes.Count > 0)
            //    foreach (var tn in trThree.Nodes[0].Nodes)
            //        if (tn.Checked)
            //        {
            //            var approve = new Solution_CQMSConstructSolutionApprove();
            //            approve.ConstructSolutionId = constructSolutionId;
            //            approve.ApproveMan = tn.NodeID;
            //            approve.ApproveType = Const.CQMSConstructSolution_Audit;
            //            approve.SignType = "AQ";
            //            var edtion = Convert.ToInt32(txtEdition.Text);
            //            //  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 (trFive.Nodes[0].Nodes.Count > 0)
            //    foreach (var tn in trFive.Nodes[0].Nodes)
            //        if (tn.Checked)
            //        {
            //            var approve = new Solution_CQMSConstructSolutionApprove();
            //            approve.ConstructSolutionId = constructSolutionId;
            //            approve.ApproveMan = tn.NodeID;
            //            approve.ApproveType = Const.CQMSConstructSolution_Audit;
            //            approve.SignType = "SG";
            //            var edtion = Convert.ToInt32(txtEdition.Text);
            //          //  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");
            //        }
        }
        //protected void imgBtnFile_Click(object sender, EventArgs e)
        //{
        //    if (string.IsNullOrEmpty(HFConstructSolutionId.Text)) //新增记录
        //        HFConstructSolutionId.Text = SQLHelper.GetNewID(typeof(Solution_CQMSConstructSolution));
        //    PageContext.RegisterStartupScript(WindowAtt.GetShowReference(
        //        string.Format(
        //            "../../AttachFile/webuploader.aspx?type={0}&toKeyId={1}&path=FileUpload/Solution&menuId={2}",
        //            ContactImg, HFConstructSolutionId.Text, 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 gvApprove_RowCommand(object sender, GridCommandEventArgs e)
        {
            var keys = gvApprove.DataKeys[e.RowIndex];
            var fileId = string.Empty;
            if (keys == null)
                return;
            fileId = keys[0].ToString();
            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 != Const._Null)
            {
                if (drpModelType.SelectedItem.Text == "施工组织设计")
                {
                    drpSpecialType.Enabled = false;
                    drpSpecialType.SelectedValue = null;
                    drpSpecialType.Required = false;
                }
                else
                {
                    drpSpecialType.Enabled = true;
                    drpSpecialType.Required = true;
                }
            }
        }
        #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");
                Save("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, "submmit");
            if (!CommonService.GetAllButtonPowerList(CurrUser.LoginProjectId, CurrUser.UserId,
                    Const.CQMSConstructSolutionMenuId, Const.BtnSubmit))
            {
                Alert.ShowInTop("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
                return;
            }
            var err = string.Empty;
            //if (!AttachFileService.Getfile(HFConstructSolutionId.Text, Const.CQMSConstructSolutionMenuId))
            //    err += "请上传附件,";
            //var list = new List();
            //list.Add(trOne);
            //list.Add(trThree);
            //list.Add(trFive);
            //var res = false;
            //foreach (var item in list)
            //    if (nodesCheckd(item))
            //    {
            //        res = true;
            //        break;
            //    }
            //if (!res) err += "请选择总包会签人员,";
            if (drpzyUserIds.Values.Length<2)
            {
                err += "一级审核人员必须选择施工工程师和HSE工程师,当前小于2人,";
            }
            if (drpaqUserIds.Values.Length < 3)
            {
                err += "一二级审批人员必须选择施工经理、HSE经理、质量经理,当前小于3人,";
            }
            //if (string.IsNullOrEmpty(drpzyUserIds.Value))
            //{
            //    err += "请选择总包会签专业工程师,";
            //}
            //if (string.IsNullOrEmpty(drpaqUserIds.Value))
            //{
            //    err += "请选择总包会签HSE组,";
            //}
            //if (string.IsNullOrEmpty(drpsgUserIds.Value))
            //{
            //    err += "请选择总包会签施工经理,";
            //}
            if (!string.IsNullOrWhiteSpace(err))
            {
                err = err.Substring(0, err.LastIndexOf(","));
                err += "!";
            }
            if (!string.IsNullOrEmpty(ConstructSolutionId))
            {
                var constructSolution =
                    CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
                if (constructSolution.State == Const.CQMSConstructSolution_Audit && Convert.ToBoolean(rblIsAgree.SelectedValue)==false)
                {
                    if (complianceObligationsCs.Count==0)
                    {
                        err += "不同意的情况下请添加修改意见,";
                    }
                }
            }
            if (!string.IsNullOrWhiteSpace(err))
            {
                Alert.ShowInTop(err, MessageBoxIcon.Warning);
                return;
            }
            
                Save("submit");
            CQMSConstructSolutionApproveService.PushMessageToNextMan(ConstructSolutionId);
            PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
            Alert.ShowInTop("提交成功!", MessageBoxIcon.Success);
        }
        /// 
        ///     编辑时候保存
        /// 
        private void EditConstructSol(string saveType)
        {
            var constructSolution = new Solution_CQMSConstructSolution();
            constructSolution.Code = txtCode.Text.Trim();
            constructSolution.ProjectId = CurrUser.LoginProjectId;
            if (drpUnit.SelectedValue != "0")
            {
                constructSolution.UnitId = drpUnit.SelectedValue;
            }
            if (drpModelType.SelectedValue != "0")
            {
                constructSolution.SolutionType = drpModelType.SelectedValue;
            }
            if (drpSpecialType.SelectedValue != "0")
            {
                constructSolution.SpecialSchemeTypeId = drpSpecialType.SelectedValue;
            }
            constructSolution.SolutionName = txtSolutionName.Text.Trim();
            var edtion = Convert.ToInt32(txtEdition.Text);
            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;
                var constructSolution1 =
                    CQMSConstructSolutionService.GetConstructSolutionByConstructSolutionId(ConstructSolutionId);
                if (saveType == "submit")
                {
                    if (CurrUser.UserId != constructSolution1.CompileMan) //办理人不是编制人,提示查看审批信息
                    {
                        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))
                    {
                        var approve = CQMSConstructSolutionApproveService.GetConstructSoluAppByApproveMan(
                            ConstructSolutionId, CurrUser.UserId, Convert.ToInt32(constructSolution1.Edition));
                        if (saveType == "submit")
                        {
                            approve.ApproveDate = DateTime.Now;
                        }
                        approve.Edition = Convert.ToInt32(edtion);
                        approve.IsAgree = Convert.ToBoolean(rblIsAgree.SelectedValue);
                        //approve.ApproveIdea = txtOptions.Text.Trim();
                        CQMSConstructSolutionApproveService.UpdateConstructSolutionApprove(approve);
                    }
                    else
                    {
                        if (saveType == "submit")
                        {
                            if (constructSolution1.State == Const.CQMSConstructSolution_Audit) //==会签状态升级版本
                            {
                                var reApprove = new 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
                            {
                                var approves =
                                    CQMSConstructSolutionApproveService.GetConstructSolApproveByApproveMan(
                                        ConstructSolutionId, constructSolution1.CompileMan);
                                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")
                {
                    var 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);
                            var reApprove = new 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.CompileDate = DateTime.Now;
                            constructSolution.State = Const.CQMSConstructSolution_ReCompile;
                            CQMSConstructSolutionService.UpdateConstructSolution(cons);
                        }
                    }
                }
                LogService.AddSys_Log(CurrUser, constructSolution.Code, ConstructSolutionId,
                    Const.CQMSConstructSolutionMenuId, "修改施工方案");
            }
        }
        #endregion
        #region 动态加载角色树
        /// 
        ///     设置树的节点选择
        /// 
        /// 
        /// 
        private void SetCheck(Tree tree, List userIds)
        {
            foreach (var tn in tree.Nodes[0].Nodes)
            {
                if (userIds.Contains(tn.NodeID))
                {
                    tn.Checked = true;
                    //txtCopyMan.Text += tn.Text;
                }
            }
        }
        /// 加载角色树:动态加载
        /// 
        private void BindZYRole()
        {
            var rootNode = new TreeNode(); //定义根节点
            rootNode.Text = "专业工程师";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            //trOne.Nodes.Add(rootNode);
            //trOne.EnableCheckBox = true;
            using (var db = new 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)
                          && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId &&
                          y.ProjectId == CurrUser.LoginProjectId
                    select x;
                //var ss = LINQToDataTable(userList);
                foreach (var u in userList)
                {
                    var Node = new TreeNode();
                    Node.Text = u.UserName;
                    Node.NodeID = u.UserId;
                    Node.EnableCheckEvent = true;
                    rootNode.Nodes.Add(Node);
                }
            }
        }
        /// 
        ///     判断是否有选择
        /// 
        /// 
        /// 
        public bool nodesCheckd(Tree node)
        {
            var 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()
        {
            var rootNode = new TreeNode(); //定义根节点
            rootNode.Text = "HSE组";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            //trThree.Nodes.Add(rootNode);
            //trThree.EnableCheckBox = true;
            using (var db = new 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)
                {
                    var roleNode = new TreeNode();
                    roleNode.Text = u.UserName;
                    roleNode.NodeID = u.UserId;
                    rootNode.Nodes.Add(roleNode);
                }
            }
        }
        private void BindSGRole()
        {
            var rootNode = new TreeNode(); //定义根节点
            rootNode.Text = "施工经理";
            rootNode.NodeID = "0";
            rootNode.Expanded = true;
            rootNode.EnableCheckEvent = true;
            //trFive.Nodes.Add(rootNode);
            //trFive.EnableCheckBox = true;
            using (var db = new 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)
                {
                    var 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
        #region 加载一级审核人员
        private void GetCheckManBindGrid1()
        {
            var tb = GetCheckManSource1();
            // 1.设置总项数(特别注意:数据库分页一定要设置总记录数RecordCount)
            Grid1.RecordCount = tb.Rows.Count;
            // 2.获取当前分页数据
            var table = this.GetPagedDataTable(Grid1, tb);
            // 3.绑定到Grid
            Grid1.DataSource = table;
            Grid1.DataBind();
        }
        /// 
        /// 一级审核人员, 施工工程师和HSE工程师
        /// 
        /// 
        private DataTable GetCheckManSource1()
        {
            string sortField = Grid1.SortField;
            string sortDirection = Grid1.SortDirection;
            var userList = (from x in Funs.DB.Sys_User
                            join y in Funs.DB.Project_ProjectUnit
                                on x.UnitId equals y.UnitId
                            join p in Funs.DB.Project_ProjectUser
                                on x.UserId equals p.UserId
                            where (p.RoleId.Contains(Const.ZBCNEngineer)|| p.RoleId.Contains(Const.HSSEEngineer)
                                   || p.RoleId.Contains(Const.SGEngineer))
                                  && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId &&
                                  y.ProjectId == CurrUser.LoginProjectId
                            select x);
            DataTable table2 = LINQToDataTable(userList);
            DataView view2 = table2.DefaultView;
            view2.Sort = String.Format("{0} {1}", sortField, sortDirection);
            string searchKeyword = ttbSearch1.Text.Trim();
            if (!String.IsNullOrEmpty(searchKeyword) && ttbSearch1.ShowTrigger1)
            {
                view2.RowFilter = String.Format(" UserName LIKE '%{0}%'", searchKeyword);
            }
            return view2.ToTable();
        }
        protected void ttbSearch_Trigger1Click1(object sender, EventArgs e)
        {
            ttbSearch1.ShowTrigger1 = true;
            GetCheckManBindGrid1();
        }
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid1.PageIndex = e.NewPageIndex;
            GetCheckManBindGrid1();
        }
        protected void Grid1_Sort(object sender, GridSortEventArgs e)
        {
            Grid1.SortDirection = e.SortDirection;
            Grid1.SortField = e.SortField;
            GetCheckManBindGrid1();
        }
        protected void ttbSearch_Trigger2Click1(object sender, EventArgs e)
        {
            ttbSearch1.ShowTrigger1 = true;
            GetCheckManBindGrid1();
        }
        #endregion
        #region 加载二级审批人员
        private void GetCheckManBindGrid2()
        {
            var tb = GetCheckManSource2();
            // 1.设置总项数(特别注意:数据库分页一定要设置总记录数RecordCount)
            Grid2.RecordCount = tb.Rows.Count;
            // 2.获取当前分页数据
            var table = this.GetPagedDataTable(Grid2, tb);
            // 3.绑定到Grid
            Grid2.DataSource = table;
            Grid2.DataBind();
        }
        /// 
        /// 二级审批人员显示施工经理、HSE经理、质量经理
        /// 
        /// 
        private DataTable GetCheckManSource2()
        {
            string sortField = Grid2.SortField;
            string sortDirection = Grid2.SortDirection;
            var userList = (from x in Funs.DB.Sys_User
                            join y in Funs.DB.Project_ProjectUnit
                                on x.UnitId equals y.UnitId
                            join p in Funs.DB.Project_ProjectUser
                                on x.UserId equals p.UserId
                            where (p.RoleId.Contains(Const.HSSEManager) || p.RoleId.Contains(Const.ConstructionManager)
                            || p.RoleId.Contains(Const.QAManager))
                                  && y.UnitType == Const.ProjectUnitType_1 && p.ProjectId == CurrUser.LoginProjectId &&
                                  y.ProjectId == CurrUser.LoginProjectId
                            orderby x.UserCode
                            select x);
            DataTable table2 = LINQToDataTable(userList);
            DataView view2 = table2.DefaultView;
            view2.Sort = String.Format("{0} {1}", sortField, sortDirection);
            string searchKeyword = ttbSearch1.Text.Trim();
            if (!String.IsNullOrEmpty(searchKeyword) && ttbSearch1.ShowTrigger1)
            {
                view2.RowFilter = String.Format(" UserName LIKE '%{0}%'", searchKeyword);
            }
            return view2.ToTable();
        }
        protected void ttbSearch_Trigger1Click2(object sender, EventArgs e)
        {
            ttbSearch2.ShowTrigger1 = true;
            GetCheckManBindGrid2();
        }
        protected void Grid2_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid2.PageIndex = e.NewPageIndex;
            GetCheckManBindGrid2();
        }
        protected void Grid2_Sort(object sender, GridSortEventArgs e)
        {
            Grid2.SortDirection = e.SortDirection;
            Grid2.SortField = e.SortField;
            GetCheckManBindGrid2();
        }
        protected void ttbSearch_Trigger2Click2(object sender, EventArgs e)
        {
            ttbSearch2.ShowTrigger1 = true;
            GetCheckManBindGrid2();
        }
        #endregion
        #region 加载施工经理  不用
        //private void GetCheckManBindGrid3()
        //{
        //    var tb = GetCheckManSource3();
        //    // 1.设置总项数(特别注意:数据库分页一定要设置总记录数RecordCount)
        //    Grid3.RecordCount = tb.Rows.Count;
        //    // 2.获取当前分页数据
        //    var table = this.GetPagedDataTable(Grid3, tb);
        //    // 3.绑定到Grid
        //    Grid3.DataSource = table;
        //    Grid3.DataBind();
        //}
        //private DataTable GetCheckManSource3()
        //{
        //    string sortField = Grid3.SortField;
        //    string sortDirection = Grid3.SortDirection;
        //    var userList = (from x in Funs.DB.Sys_User
        //                    join y in Funs.DB.Project_ProjectUnit
        //                        on x.UnitId equals y.UnitId
        //                    join p in Funs.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);
        //    DataTable table2 = LINQToDataTable(userList);
        //    DataView view2 = table2.DefaultView;
        //    view2.Sort = String.Format("{0} {1}", sortField, sortDirection);
        //    string searchKeyword = ttbSearch1.Text.Trim();
        //    if (!String.IsNullOrEmpty(searchKeyword) && ttbSearch1.ShowTrigger1)
        //    {
        //        view2.RowFilter = String.Format(" UserName LIKE '%{0}%'", searchKeyword);
        //    }
        //    return view2.ToTable();
        //}
        //protected void ttbSearch_Trigger1Click3(object sender, EventArgs e)
        //{
        //    ttbSearch3.ShowTrigger1 = true;
        //    GetCheckManBindGrid3();
        //}
        //protected void Grid3_PageIndexChange(object sender, GridPageEventArgs e)
        //{
        //    Grid3.PageIndex = e.NewPageIndex;
        //    GetCheckManBindGrid3();
        //}
        //protected void Grid3_Sort(object sender, GridSortEventArgs e)
        //{
        //    Grid3.SortDirection = e.SortDirection;
        //    Grid3.SortField = e.SortField;
        //    GetCheckManBindGrid3();
        //}
        //protected void ttbSearch_Trigger2Click3(object sender, EventArgs e)
        //{
        //    ttbSearch3.ShowTrigger1 = true;
        //    GetCheckManBindGrid3();
        //}
        #endregion
        #region 加载抄送人员
        private void GetCheckManBindGrid4()
        {
            var tb = GetCheckManSource4();
            // 1.设置总项数(特别注意:数据库分页一定要设置总记录数RecordCount)
            Grid4.RecordCount = tb.Rows.Count;
            // 2.获取当前分页数据
            var table = this.GetPagedDataTable(Grid4, tb);
            // 3.绑定到Grid
            Grid4.DataSource = table;
            Grid4.DataBind();
        }
        private DataTable GetCheckManSource4()
        {
            string sortField = Grid4.SortField;
            string sortDirection = Grid4.SortDirection;
            var userList = (from x in Funs.DB.Sys_User
                            join y in Funs.DB.Project_ProjectUnit
                                on x.UnitId equals y.UnitId
                            join p in Funs.DB.Project_ProjectUser
                                on x.UserId equals p.UserId
                            where p.ProjectId == CurrUser.LoginProjectId &&
                                  y.ProjectId == CurrUser.LoginProjectId
                            orderby x.UserCode
                            select x);
            DataTable table2 = LINQToDataTable(userList);
            DataView view2 = table2.DefaultView;
            view2.Sort = String.Format("{0} {1}", sortField, sortDirection);
            string searchKeyword = ttbSearch4.Text.Trim();
            if (!String.IsNullOrEmpty(searchKeyword) && ttbSearch4.ShowTrigger1)
            {
                view2.RowFilter = String.Format(" UserName LIKE '%{0}%'", searchKeyword);
            }
            return view2.ToTable();
        }
        protected void ttbSearch_Trigger1Click4(object sender, EventArgs e)
        {
            ttbSearch4.ShowTrigger1 = true;
            GetCheckManBindGrid4();
        }
        protected void Grid4_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid4.PageIndex = e.NewPageIndex;
            GetCheckManBindGrid4();
        }
        protected void Grid4_Sort(object sender, GridSortEventArgs e)
        {
            Grid4.SortDirection = e.SortDirection;
            Grid4.SortField = e.SortField;
            GetCheckManBindGrid4();
        }
        protected void ttbSearch_Trigger2Click4(object sender, EventArgs e)
        {
            ttbSearch4.ShowTrigger1 = true;
            GetCheckManBindGrid4();
        }
        #endregion
        #region  linq结果转换datatable
        /// 
        /// linq结果转换datatable
        /// 
        /// 
        /// 
        /// 
        public DataTable LINQToDataTable(IEnumerable varlist)
        {
            DataTable dtReturn = new DataTable();
            // column names 
            PropertyInfo[] oProps = null;
            if (varlist == null) return dtReturn;
            foreach (T rec in varlist)
            {
                // Use reflection to get property names, to create table, Only first time, others 
                 if (oProps == null)
                {
                    oProps = ((Type)rec.GetType()).GetProperties();
                    foreach (PropertyInfo pi in oProps)
                    {
                        Type colType = pi.PropertyType;
                        if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
                        == typeof(Nullable<>)))
                        {
                            colType = colType.GetGenericArguments()[0];
                        }
                        dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
                    }
                }
                DataRow dr = dtReturn.NewRow();
                foreach (PropertyInfo pi in oProps)
                {
                    dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue
                    (rec, null);
                }
                dtReturn.Rows.Add(dr);
            }
            return dtReturn;
        }
        #endregion
        #region 审批填写表格
        /// 
        /// 审批人保存第一次
        /// 
        private void OperateComplianceObligationsCSort()
        {
            BLL.ComplianceObligationsCService.DeleteSolution_CQMSConstructSolutionApprove_Item(ConstructSolutionId,CurrUser.UserId);
            jerqueSaveComplianceObligationsCList();
            foreach (Model.Solution_CQMSConstructSolutionApprove_Item coc in complianceObligationsCs)
            {
                coc.ConstructSolutionId = ConstructSolutionId;
                BLL.ComplianceObligationsCService.AddSolution_CQMSConstructSolutionApprove_Item(coc);
            }
        }
        /// 
        /// 填报人保存(修改)
        /// 
        private void TbrOperateComplianceObligationsCSort()
        {
            jerqueSaveComplianceObligationsCListTbr();
            foreach (Model.Solution_CQMSConstructSolutionApprove_Item coc in complianceObligationsCs)
            {
                coc.ConstructSolutionId = ConstructSolutionId;
                BLL.ComplianceObligationsCService.UpdateSolution_CQMSConstructSolutionApprove_Item(coc);
            }
        }
        /// 
        /// 审批人(修改)
        /// 
        private void SprOperateComplianceObligationsCSort()
        {
            jerqueSaveComplianceObligationsCListSpr();
            foreach (Model.Solution_CQMSConstructSolutionApprove_Item coc in complianceObligationsCs)
            {
                coc.ConstructSolutionId = ConstructSolutionId;
                BLL.ComplianceObligationsCService.UpdateSolution_CQMSConstructSolutionApprove_ItemNew(coc);
            }
        }
        protected void btnNew_Click(object sender, EventArgs e)
        {
            jerqueSaveComplianceObligationsCList();
            Model.Solution_CQMSConstructSolutionApprove_Item complianceObligationsC = new Model.Solution_CQMSConstructSolutionApprove_Item
            {
                Id = SQLHelper.GetNewID(typeof(Model.Solution_CQMSConstructSolutionApprove_Item))
            };
            complianceObligationsCs.Add(complianceObligationsC);
            this.gvOperateComplianceObligations.DataSource = complianceObligationsCs;
            this.gvOperateComplianceObligations.DataBind();
        }
        private void jerqueSaveComplianceObligationsCList()
        {
            complianceObligationsCs.Clear();
            JArray mergedData = gvOperateComplianceObligations.GetMergedData();
            foreach (JObject mergedRow in mergedData)
            {
                string status = mergedRow.Value("status");
                JObject values = mergedRow.Value("values");
                int i = mergedRow.Value("index");
               var hazardSort = new Model.Solution_CQMSConstructSolutionApprove_Item
                {
                   Id = this.gvOperateComplianceObligations.Rows[i].DataKeys[0].ToString(),
                   SortId= i+1,
                   Chapter = values.Value("Chapter").ToString(),
                   Amendment = values.Value("Amendment").ToString(),
                   Proposer = CurrUser.UserId,
                   ProposerName= CurrUser.UserName,
                   Modification = values.Value("Modification").ToString(),
                   ReviewerOpinion = values.Value("ReviewerOpinion").ToString(),
                   IsAccept = values.Value("IsAccept").ToString(),
               };
                complianceObligationsCs.Add(hazardSort);
            }
        }
        private void jerqueSaveComplianceObligationsCListTbr()
        {
            complianceObligationsCs.Clear();
            JArray mergedData = gvOperateComplianceObligations.GetMergedData();
            foreach (JObject mergedRow in mergedData)
            {
                string status = mergedRow.Value("status");
                JObject values = mergedRow.Value("values");
                int i = mergedRow.Value("index");
                var hazardSort = new Model.Solution_CQMSConstructSolutionApprove_Item
                {
                    Id = this.gvOperateComplianceObligations.Rows[i].DataKeys[0].ToString(),
                    Modification = values.Value("Modification").ToString(),
                   
                };
                complianceObligationsCs.Add(hazardSort);
            }
        }
        private void jerqueSaveComplianceObligationsCListSpr()
        {
            complianceObligationsCs.Clear();
            JArray mergedData = gvOperateComplianceObligations.GetMergedData();
            foreach (JObject mergedRow in mergedData)
            {
                string status = mergedRow.Value("status");
                JObject values = mergedRow.Value("values");
                int i = mergedRow.Value("index");
                var hazardSort = new Model.Solution_CQMSConstructSolutionApprove_Item
                {
                    Id = this.gvOperateComplianceObligations.Rows[i].DataKeys[0].ToString(),
                    ReviewerOpinion= values.Value("ReviewerOpinion").ToString(),
                    IsAccept = values.Value("IsAccept").ToString(),
                };
                complianceObligationsCs.Add(hazardSort);
            }
        }
        protected void gvOperateComplianceObligations_RowCommand(object sender, GridCommandEventArgs e)
        {
            jerqueSaveComplianceObligationsCList();
            string rowID = this.gvOperateComplianceObligations.DataKeys[e.RowIndex][0].ToString();
            if (e.CommandName == "Delete")
            {
                foreach (var item in complianceObligationsCs)
                {
                    if (item.Id == rowID)
                    {
                        complianceObligationsCs.Remove(item);
                        break;
                    }
                }
                gvOperateComplianceObligations.DataSource = complianceObligationsCs;
                gvOperateComplianceObligations.DataBind();
                ShowNotify("删除数据成功!", MessageBoxIcon.Success);
            }
        }
        #endregion
        /// 
        /// 不同意的情况下显示
        /// 
        /// 
        /// 
        protected void radChange(object sender, EventArgs e) {
                //不同意的情况下
            if (rblIsAgree.SelectedValue == "false")
            {
                if (isSendTrue)
                { 
                    
                }
                else {
                    //显示
                    options.Hidden = false;
                    options1.Hidden = false;
                    //第一次
                    gvOperateComplianceObligations.AllColumns[4].Hidden = true;
                    gvOperateComplianceObligations.AllColumns[5].Hidden = true;
                    gvOperateComplianceObligations.AllColumns[6].Hidden = true;
                    gvOperateComplianceObligations.AllColumns[7].Hidden = true;
                }
                   
            }
            else {
                if (isSendTrue)
                {
                }
                else {
                    //同意的情况下
                    options.Hidden = true;
                    options1.Hidden = true;
                }
            }
        }
    }
}