using BLL;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Windows.Forms;
using System.Xml.Linq;
namespace FineUIPro.Web.DCGL.ServerCheck
{
    public partial class CheckNotice : PageBase
    {
        #region 定义项
        /// 
        /// 督查检查主键
        /// 
        public string CheckInfoId
        {
            get
            {
                return (string)ViewState["CheckInfoId"];
            }
            set
            {
                ViewState["CheckInfoId"] = value;
            }
        }
        #endregion
        #region 加载页面
        /// 
        /// 加载页面
        /// 
        /// 
        /// 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ////权限按钮方法                
                this.InitTreeMenu();
                this.CheckInfoId = string.Empty;
            }
        }
        #endregion
        #region 加载树
        /// 
        /// 加载树
        /// 
        private void InitTreeMenu()
        {
            this.tvControlItem.Nodes.Clear();
            this.tvControlItem.ShowBorder = false;
            this.tvControlItem.ShowHeader = false;
            this.tvControlItem.EnableIcons = true;
            this.tvControlItem.AutoScroll = true;
            this.tvControlItem.EnableSingleClickExpand = true;
            TreeNode rootNode = new TreeNode
            {
                Text = "检查方式-年月",
                NodeID = "0",
                Expanded = true
            };
            this.tvControlItem.Nodes.Add(rootNode);
            var checkInfoLists = (from x in Funs.DB.DCGL_Check_CheckInfo select x).ToList();
            if (!string.IsNullOrEmpty(this.txtCheckStartTimeS.Text))
            {
                checkInfoLists = checkInfoLists.Where(x => x.CheckStartTime >= Funs.GetNewDateTime(this.txtCheckStartTimeS.Text)).ToList();
            }
            if (!string.IsNullOrEmpty(this.txtCheckEndTimeS.Text))
            {
                checkInfoLists = checkInfoLists.Where(x => x.CheckEndTime <= Funs.GetNewDateTime(this.txtCheckEndTimeS.Text)).ToList();
            }
            var checkTypeList = (from x in checkInfoLists select x.CheckTypeName).Distinct();
            foreach (var item in checkTypeList)
            {
                TreeNode rootUnitNode = new TreeNode
                {
                    Text = item,
                    NodeID = item,
                    Expanded = true,
                    ToolTip = "检查方式"
                };//定义根节点
                rootNode.Nodes.Add(rootUnitNode);
                var checkInfoList = (from x in checkInfoLists where x.CheckTypeName == item select x).ToList();
                this.BindNodes(rootUnitNode, checkInfoList);
            }
        }
        #endregion
        #region 绑定树节点
        /// 
        ///  绑定树节点
        /// 
        /// 
        private void BindNodes(TreeNode node, List checkInfoList)
        {
            if (node.ToolTip == "检查方式")
            {
                var pointListMonth = (from x in checkInfoList
                                      orderby x.CheckStartTime descending
                                      select string.Format("{0:yyyy-MM}", x.CheckStartTime)).Distinct();
                foreach (var item in pointListMonth)
                {
                    TreeNode newNode = new TreeNode
                    {
                        Text = item,
                        NodeID = item + "|" + node.NodeID,
                        ToolTip = "月份"
                    };
                    node.Nodes.Add(newNode);
                    this.BindNodes(newNode, checkInfoList);
                }
            }
            else if (node.ToolTip == "月份")
            {
                var dReports = from x in checkInfoList
                               where string.Format("{0:yyyy-MM}", x.CheckStartTime) == node.Text
                               orderby x.CheckStartTime descending
                               select x;
                foreach (var item in dReports)
                {
                    TreeNode newNode = new TreeNode();
                    var units = BLL.UnitService.GetUnitByUnitId(item.SubjectUnitId);
                    if (units != null)
                    {
                        newNode.Text = (item.CheckStartTime.Day).ToString().PadLeft(2, '0') + "日:" + units.UnitName;
                    }
                    else
                    {
                        newNode.Text = (item.CheckStartTime.Day).ToString().PadLeft(2, '0') + "日:未知单位";
                    }
                    newNode.NodeID = item.CheckInfoId;
                    newNode.EnableClickEvent = true;
                    node.Nodes.Add(newNode);
                }
            }
        }
        #endregion
        #region 点击TreeView
        /// 
        /// 点击TreeView
        /// 
        /// 
        /// 
        protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e)
        {
            this.CheckInfoId = this.tvControlItem.SelectedNodeID;
            this.txtCheckType.Text = this.tvControlItem.SelectedNode.ParentNode.ParentNode.Text;
            this.PageInfoLoad(); ///页面输入保存信息
            this.BindGrid1();
            this.BindGrid2();
        }
        #endregion
        #region 加载页面输入保存信息
        /// 
        /// 加载页面输入保存信息
        /// 
        private void PageInfoLoad()
        {
            var checkInfo = Funs.DB.DCGL_Check_CheckInfo.FirstOrDefault(x => x.CheckInfoId == this.CheckInfoId);
            if (checkInfo != null)
            {
                this.txtCheckStartTime.Text = string.Format("{0:yyyy-MM-dd}", checkInfo.CheckStartTime);
                this.txtCheckEndTime.Text = string.Format("{0:yyyy-MM-dd}", checkInfo.CheckEndTime);
                this.drpSubjectUnit.Text = BLL.UnitService.GetUnitNameByUnitId(checkInfo.SubjectUnitId);
                this.txtCheckType.Text = checkInfo.CheckTypeName;
                this.txtSubjectUnitMan.Text = checkInfo.SubjectUnitMan;
                this.txtSubjectUnitAdd.Text = checkInfo.SubjectUnitAdd;
                this.txtSubjectUnitTel.Text = checkInfo.SubjectUnitTel;
                this.txtSubjectObject.Text = checkInfo.SubjectObject;
                this.txtCheckTeamLeader.Text = checkInfo.CheckTeamLeader;
                this.txtCheckManName.Text = checkInfo.CheckManName;
                this.txtSupervisionGroupName.Text = checkInfo.SupervisionGroupName;
                this.txtCompileMan.Text = checkInfo.CompileMan;
                this.txtCompileDate.Text = string.Format("{0:yyyy-MM-dd}", checkInfo.CompileDate);
            }
            else
            {
                this.drpSubjectUnit.Text = string.Empty;
                this.txtSubjectObject.Text = string.Empty;
                this.txtSubjectUnitMan.Text = string.Empty;
                this.txtSubjectUnitTel.Text = string.Empty;
                this.txtSubjectUnitAdd.Text = string.Empty;
                this.txtCheckStartTime.Text = string.Empty;
                this.txtCheckEndTime.Text = string.Empty;
                this.txtCheckType.Text = string.Empty;
                this.txtCheckTeamLeader.Text = string.Empty;
                this.txtCheckManName.Text = string.Empty;
                this.txtSupervisionGroupName.Text = string.Empty;
                this.txtCompileMan.Text = string.Empty;
                this.txtCompileDate.Text = string.Empty;
                this.CheckInfoId = string.Empty;
            }
        }
        #endregion
        #region 数据绑定
        /// 
        /// 数据绑定
        /// 
        private void BindGrid1()
        {
            string strSql = @"SELECT CheckFileId,CheckInfoId,CheckFileName,SortIndex,Remark FROM dbo.DCGL_Check_CheckInfo_CheckFile WHERE 1=1 ";
            List listStr = new List();
            strSql += " AND CheckInfoId = @CheckInfoId";
            listStr.Add(new SqlParameter("@CheckInfoId", this.CheckInfoId));
            SqlParameter[] parameter = listStr.ToArray();
            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
            Grid1.RecordCount = tb.Rows.Count;
            //tb = GetFilteredTable(Grid1.FilteredData, tb);
            var table = this.GetPagedDataTable(Grid1, tb);
            Grid1.DataSource = table;
            Grid1.DataBind();
        }
        /// 
        /// 数据绑定
        /// 
        private void BindGrid2()
        {
            string strSql = @"SELECT CheckTeamId,CheckInfoId,UserName,SexName,SupervisionGroupName,SortIndex,PostName,WorkTitle,CheckPostName,CheckDate 
                            FROM dbo.DCGL_Check_CheckInfo_CheckTeam 
                            WHERE 1=1  ";
            List listStr = new List();
            strSql += " AND CheckInfoId = @CheckInfoId";
            listStr.Add(new SqlParameter("@CheckInfoId", this.CheckInfoId));
            SqlParameter[] parameter = listStr.ToArray();
            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
            Grid2.RecordCount = tb.Rows.Count;
            //tb = GetFilteredTable(Grid2.FilteredData, tb);
            var table = this.GetPagedDataTable(Grid2, tb);
            Grid2.DataSource = table;
            Grid2.DataBind();
        }
        #endregion
        #region 排序
        /// 
        /// 排序
        /// 
        /// 
        /// 
        protected void Grid1_Sort(object sender, GridSortEventArgs e)
        {
            BindGrid1();
        }
        /// 
        /// 排序
        /// 
        /// 
        /// 
        protected void Grid2_Sort(object sender, GridSortEventArgs e)
        {
            BindGrid2();
        }
        #endregion
        #region 查看检查办法
        /// 
        /// 查看检查办法
        /// 
        /// 
        /// 
        protected void btnFind_Click(object sender, EventArgs e)
        {
            PageContext.RegisterStartupScript(Window3.GetShowReference(String.Format("CheckInfoTemplate.aspx")));
        }
        #endregion
        #region 组面板 折叠展开事件
        /// 
        /// 组面板 折叠展开事件
        /// 
        /// 
        /// 
        protected void Gridl_Collapse(object sender, EventArgs e)
        {
            if (this.Grid1.Collapsed)
            {
                this.Grid2.Collapsed = false;
            }
        }
        /// 
        /// 组面板 折叠展开事件
        /// 
        /// 
        /// 
        protected void Grid2_Collapse(object sender, EventArgs e)
        {
            if (this.Grid2.Collapsed)
            {
                this.Grid1.Collapsed = false;
            }
        }
        /// 
        /// 组面板 折叠展开事件
        /// 
        /// 
        /// 
        protected void Gridl_Expand(object sender, EventArgs e)
        {
            if (this.Grid1.Expanded)
            {
                this.Grid2.Expanded = false;
            }
        }
        /// 
        /// 组面板 折叠展开事件
        /// 
        /// 
        /// 
        protected void Grid2_Expand(object sender, EventArgs e)
        {
            if (this.Grid2.Expanded)
            {
                this.Grid1.Expanded = false;
            }
        }
        #endregion
        /// 
        /// 查询
        /// 
        /// 
        /// 
        protected void Tree_TextChanged(object sender, EventArgs e)
        {
            this.InitTreeMenu();
            this.BindGrid1();
            this.BindGrid2();
        }
        /// 
        /// 从集团获取
        /// 
        /// 
        /// 
        protected void btnGet_Click(object sender, EventArgs e)
        {
            var returnValue = getDCGLCheckInfo_CheckTeam();
            // var returnValue= CNCECHSSEGetWebService.getCheck_CheckInfo_Table8Item();
            if (returnValue.code == 1)
            {
                ShowNotify(returnValue.message, MessageBoxIcon.Success);
                PageInfoLoad();
            }
            else
            {
                Alert.ShowInTop(returnValue.message, MessageBoxIcon.Success);
            }
        }
        #region 获取
        /// 
        ///  获取
        /// 
        /// 
        /// 
        public static Model.ResponeData getDCGLCheckInfo_CheckTeam()
        {
            var responeData = new Model.ResponeData();
            try
            {
                string unitId = CommonService.GetThisUnitId();
                string baseurl = SysConstSetService.CNCECPath + "/api/HSSEData/getDCGLCheckInfo_CheckTeam?unitId=" + unitId;
                string contenttype = "application/json;charset=unicode";
                Hashtable newToken = new Hashtable
                {
                    { "token", ServerService.GetToken().Token }
                };
                var strJosn = APIGetHttpService.Http(baseurl, "GET", contenttype, newToken, null);
                if (!string.IsNullOrEmpty(strJosn))
                {
                    JObject obj = JObject.Parse(strJosn);
                    responeData.code = Funs.GetNewIntOrZero(obj["code"].ToString());
                    responeData.message = obj["message"].ToString();
                    if (responeData.code == 1)
                    {
                        string data = obj["data"].ToString();
                        JArray arr = JArray.Parse(data);
                        if (arr.Count() > 0)
                        {
                            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
                            {
                                List ids = new List();
                                foreach (var item in arr)
                                {
                                    string getCheckInfoId = item["CheckInfoId"].ToString();
                                    if (!ids.Contains(getCheckInfoId))
                                    {
                                        var updateCheckInfo = db.DCGL_Check_CheckInfo.FirstOrDefault(x => x.CheckInfoId == getCheckInfoId);
                                        if (updateCheckInfo == null)
                                        {
                                            ids.Add(getCheckInfoId);
                                            Model.DCGL_Check_CheckInfo newCheckInfo = new Model.DCGL_Check_CheckInfo
                                            {
                                                CheckInfoId = getCheckInfoId,
                                                CheckTypeName = item["CheckTypeName"].ToString(),
                                                SubjectUnitId = item["SubjectUnitId"].ToString(),
                                                SubjectUnitAdd = item["SubjectUnitAdd"].ToString(),
                                                SubjectUnitMan = item["SubjectUnitMan"].ToString(),
                                                SubjectUnitTel = item["SubjectUnitTel"].ToString(),
                                                CheckStartTime = Funs.GetNewDateTimeOrNow(item["CheckStartTime"].ToString()),
                                                CheckEndTime = Funs.GetNewDateTimeOrNow(item["CheckEndTime"].ToString()),
                                                SubjectObject = item["SubjectObject"].ToString(),
                                            };
                                            db.DCGL_Check_CheckInfo.InsertOnSubmit(newCheckInfo);
                                            db.SubmitChanges();
                                        }
                                        else
                                        {
                                            updateCheckInfo.CheckInfoId = getCheckInfoId;
                                            updateCheckInfo.CheckTypeName = item["CheckTypeName"].ToString();
                                            updateCheckInfo.SubjectUnitId = item["SubjectUnitId"].ToString();
                                            updateCheckInfo.SubjectUnitAdd = item["SubjectUnitAdd"].ToString();
                                            updateCheckInfo.SubjectUnitMan = item["SubjectUnitMan"].ToString();
                                            updateCheckInfo.SubjectUnitTel = item["SubjectUnitTel"].ToString();
                                            updateCheckInfo.CheckStartTime = Funs.GetNewDateTimeOrNow(item["CheckStartTime"].ToString());
                                            updateCheckInfo.CheckEndTime = Funs.GetNewDateTimeOrNow(item["CheckEndTime"].ToString());
                                            updateCheckInfo.SubjectObject = item["SubjectObject"].ToString();
                                            db.SubmitChanges();
                                        }
                                    }
                                    //string getCheckItemId = item["CheckItemId"].ToString();
                                    //var updateTable8 = db.Check_CheckInfo_Table8.FirstOrDefault(x => x.CheckItemId == getCheckItemId);
                                    //if (updateTable8 == null)
                                    //{
                                    //    Model.Check_CheckInfo_Table8 newTable8 = new Model.Check_CheckInfo_Table8
                                    //    {
                                    //        CheckItemId = getCheckItemId,
                                    //        CheckInfoId = getCheckInfoId,
                                    //        Values1 = item["Values1"].ToString(),
                                    //        Values2 = item["Values2"].ToString(),
                                    //        Values3 = item["Values3"].ToString(),
                                    //        Values4 = item["Values4"].ToString(),
                                    //        Values5 = item["Values5"].ToString(),
                                    //        Values6 = item["Values6"].ToString(),
                                    //        Values7 = item["Values7"].ToString(),
                                    //        Values8 = item["Values8"].ToString(),
                                    //    };
                                    //    db.Check_CheckInfo_Table8.InsertOnSubmit(newTable8);
                                    //    db.SubmitChanges();
                                    //}
                                    //else
                                    //{
                                    //    updateTable8.Values1 = item["Values1"].ToString();
                                    //    updateTable8.Values2 = item["Values2"].ToString();
                                    //    updateTable8.Values3 = item["Values3"].ToString();
                                    //    updateTable8.Values4 = item["Values4"].ToString();
                                    //    updateTable8.Values5 = item["Values5"].ToString();
                                    //    updateTable8.Values6 = item["Values6"].ToString();
                                    //    updateTable8.Values7 = item["Values7"].ToString();
                                    //    updateTable8.Values8 = item["Values8"].ToString();
                                    //    db.SubmitChanges();
                                    //}
                                    string getCheckTeamId = item["CheckTeamId"].ToString();
                                    var checkTeam = db.DCGL_Check_CheckInfo_CheckTeam.FirstOrDefault(x => x.CheckTeamId == getCheckTeamId);
                                    if (checkTeam == null)
                                    {
                                        string UserName = item["UserName"].ToString();
                                        string SexName = item["SexName"].ToString();
                                        //UnitId = item["UnitId"].ToString(),
                                        //UnitName = item["UnitName"].ToString(),
                                        string SupervisionGroupId = item["SupervisionGroupId"].ToString();
                                        string SupervisionGroupName = item["SupervisionGroupName"].ToString();
                                        string PostName = item["PostName"].ToString();
                                        string WorkTitle = item["WorkTitle"].ToString();
                                        string CheckPostName = item["CheckPostName"].ToString();
                                        var CheckDate = Funs.GetNewDateTime(item["CheckDate"].ToString());
                                        var SortIndex = Funs.GetNewInt(item["SortIndex"].ToString());
                                        Model.DCGL_Check_CheckInfo_CheckTeam newCheckTeam = new Model.DCGL_Check_CheckInfo_CheckTeam
                                        {
                                            CheckTeamId = getCheckTeamId,
                                            CheckInfoId = getCheckInfoId,
                                            UserName = item["UserName"].ToString(),
                                            SexName = item["SexName"].ToString(),
                                            //UnitId = item["UnitId"].ToString(),
                                            //UnitName = item["UnitName"].ToString(),
                                            SupervisionGroupId = item["SupervisionGroupId"].ToString(),
                                            SupervisionGroupName = item["SupervisionGroupName"].ToString(),
                                            PostName = item["PostName"].ToString(),
                                            WorkTitle = item["WorkTitle"].ToString(),
                                            CheckPostName = item["CheckPostName"].ToString(),
                                            CheckDate = Funs.GetNewDateTime(item["CheckDate"].ToString()),
                                            SortIndex = Funs.GetNewInt(item["SortIndex"].ToString()),
                                        };
                                        db.DCGL_Check_CheckInfo_CheckTeam.InsertOnSubmit(newCheckTeam);
                                        db.SubmitChanges();
                                    }
                                    else
                                    {
                                        checkTeam.CheckTeamId = getCheckTeamId;
                                        checkTeam.CheckInfoId = getCheckInfoId;
                                        checkTeam.UserName = item["UserName"].ToString();
                                        checkTeam.SexName = item["SexName"].ToString();
                                        //checkTeam.UnitId = item["UnitId"].ToString();
                                        //checkTeam.UnitName = item["UnitName"].ToString();
                                        checkTeam.SupervisionGroupId = item["SupervisionGroupId"].ToString();
                                        checkTeam.SupervisionGroupName = item["SupervisionGroupName"].ToString();
                                        checkTeam.PostName = item["PostName"].ToString();
                                        checkTeam.WorkTitle = item["WorkTitle"].ToString();
                                        checkTeam.CheckPostName = item["CheckPostName"].ToString();
                                        checkTeam.CheckDate = Funs.GetNewDateTime(item["CheckDate"].ToString());
                                        checkTeam.SortIndex = Funs.GetNewInt(item["SortIndex"].ToString());
                                        db.SubmitChanges();
                                    }
                                }
                                responeData.message = "获取成功:记录" + arr.Count().ToString() + "条";
                            }
                        }
                        else { responeData.message = "未获取数据!"; }
                    }
                }
            }
            catch (Exception ex)
            {
                responeData.code = 0;
                responeData.message = "获取失败:" + ex.Message;
                ErrLogInfo.WriteLog("督查检查通知单获取!", ex);
            }
            return responeData;
        }
        #endregion
    }
}