using BLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using AspNet = System.Web.UI.WebControls;
namespace FineUIPro.Web.HSSE.HiddenInspection
{
    public partial class RishAnalysis : PageBase
    {
        #region 定义项
        /// 
        /// 项目id
        /// 
        public string ProjectId
        {
            get
            {
                return (string)ViewState["ProjectId"];
            }
            set
            {
                ViewState["ProjectId"] = value;
            }
        }
        #endregion
        #region 加载页面
        /// 
        /// 加载页面
        /// 
        /// 
        /// 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Funs.DropDownPageSize(this.ddlPageSize);
                ddlPageSize.SelectedValue = Grid1.PageSize.ToString();
                this.txtEndTime.Text = DateTime.Now.ToString("yyyy-MM-dd");
                this.txtStartTime.Text = DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd");
                this.ProjectId = this.CurrUser.LoginProjectId;
                ProjectService.InitProjectDropDownList(this.drpProject, false);
                this.drpProject.SelectedValue = this.ProjectId;
                this.drpProject.Enabled = false;
                UnitService.InitUnitDropDownList(this.drpUnit, this.ProjectId, true);
                BindGrid();
              
            } 
            this.AnalyseData();
        } 
        /// 
        /// 绑定数据
        /// 
        private void BindGrid()
        {
            var getDatas = DataStatisticsService.HazardRegisterStatistics(this.drpProject.SelectedValue, this.drpUnit.SelectedValue, Funs.GetNewDateTime(this.txtStartTime.Text), Funs.GetNewDateTime(this.txtEndTime.Text));
            DataTable tb = this.GetPagedDataTable(Grid1, getDatas);
            Grid1.RecordCount = tb.Rows.Count;
            var table = this.GetPagedDataTable(Grid1, tb);
            Grid1.DataSource = table;
            Grid1.DataBind();
        }
        #endregion
        #region 查询
        /// 
        /// 查询
        /// 
        /// 
        /// 
        protected void TextBox_TextChanged(object sender, EventArgs e)
        {
            this.BindGrid();
        }
        #endregion
        #region 排序、分页、关闭窗口
        /// 
        /// 分页
        /// 
        /// 
        /// 
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            BindGrid();
        }
        /// 
        /// 排序
        /// 
        /// 
        /// 
        protected void Grid1_Sort(object sender, GridSortEventArgs e)
        {
            BindGrid();
        }
        /// 
        /// 分页显示条数下拉框
        /// 
        /// 
        /// 
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindGrid();
        }
        #endregion
        #region 导出按钮
        /// 导出按钮
        /// 
        /// 
        /// 
        protected void btnOut_Click(object sender, EventArgs e)
        {
            Response.ClearContent();
            string filename = Funs.GetNewFileName();
            Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("HSE巡检统计" + filename, System.Text.Encoding.UTF8) + ".xls");
            Response.ContentType = "application/excel";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            this.Grid1.PageSize = this.Grid1.RecordCount;
            BindGrid();
            Response.Write(GetGridTableHtml(Grid1));
            Response.End();
        }
        /// 
        /// 导出方法
        /// 
        /// 
        /// 
        private string GetGridTableHtml(Grid grid)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("");
            sb.Append("
");
            sb.Append("");
            foreach (GridColumn column in grid.Columns)
            {
                sb.AppendFormat("| {0} | ", column.HeaderText);
            }
            sb.Append("
");
            foreach (GridRow row in grid.Rows)
            {
                sb.Append("");
                foreach (GridColumn column in grid.Columns)
                {
                    string html = row.Values[column.ColumnIndex].ToString();
                    if (column.ColumnID == "tfPageIndex")
                    {
                        html = (row.FindControl("lblPageIndex") as AspNet.Label).Text;
                    }else if(column.ColumnIndex == 6)
                    {
                        html = (row.FindControl("DataCountRate") as AspNet.Label).Text;
                    }
                    sb.AppendFormat("| {0} | ", html);
                }
                sb.Append("
");
            }
            sb.Append("
");
            return sb.ToString();
        }
        #endregion     
        protected string ConvertDataCountRate(object dataCountRate)
        {
            string res = string.Empty;
            if (dataCountRate != null)
            {
                res = ((float)dataCountRate).ToString("0.00");
            }
            return res;
        }
        #region 统计
        /// 
        /// 统计分析
        /// 
        /// 
        /// 
        protected void BtnAnalyse_Click(object sender, EventArgs e)
        {
            this.AnalyseData();
            PageContext.RegisterStartupScript(@" setTimeout(function () { rendChart(" + legend + "," + xAxis + "," + series + ");},1000);  ");
        }
        public string legend = "[]";
        public string xAxis = "[]";
        public string series = "[]";
        /// 
        /// 统计方法
        /// 
        private void AnalyseData()
        {
            if (this.rblState.SelectedValue == "0")
            {
                string strSql = @" select u.UnitId,u.unitName,
                             count(*)    as allnum,
                             Sum(case when States= 1 or States is null then 1 else 0 end) as todo,
                             Sum(case when States= 3 or States =2 then 1 else 0 end) as finish
                             from HSSE_Hazard_HazardRegister r left join Base_Unit u on r.ResponsibleUnit = u.UnitId
                             where u.UnitId is not null and ProjectId=@ProjectId and States != '4' and ProblemTypes = '1'
                            ";
                if (!string.IsNullOrEmpty(this.txtStartRectificationTime.Text.Trim()))
                {
                    strSql += " and CheckTime >='" + this.txtStartRectificationTime.Text.Trim() + "' ";
                }
                if (!string.IsNullOrEmpty(this.txtEndRectificationTime.Text.Trim()))
                {
                    strSql += " and CheckTime <'" + DateTime.Parse(this.txtEndRectificationTime.Text.Trim()).AddDays(1).ToString("yyyy-MM-dd") + "' ";
                }
                strSql += " group by u.UnitId,u.unitName ";
                List listStr = new List();
                listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
                SqlParameter[] parameter = listStr.ToArray();
                DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
                legend = "[\"全部\", \"待整改\", \"已整改\"]";
                xAxis = "[";
                string series1 = "[";
                string series2 = "[";
                string series3 = "[";
                if (tb != null)
                {
                    foreach (DataRow dr in tb.Rows)
                    {
                        xAxis += "\"" + dr["unitName"].ToString() + "\",";
                        series1 += "" + dr["allnum"].ToString() + ",";
                        series2 += "" + dr["todo"].ToString() + ",";
                        series3 += "" + dr["finish"].ToString() + ",";
                    }
                }
                xAxis = xAxis.TrimEnd(',');
                xAxis += "]";
                series1 = series1.TrimEnd(',');
                series1 += "]";
                series2 = series2.TrimEnd(',');
                series2 += "]";
                series3 = series3.TrimEnd(',');
                series3 += "]";
                series = @"[{
                                name: '全部',
                                type: 'bar',
                                label: {
                                            show: true,
                                            position: 'top'
                                        }, 
                                barWidth: 20,
                                emphasis: {
                                    focus: 'series'
                                },
                                data: " + series1 + @"
                            },
                            {
                                name: '待整改',
                                type: 'bar', 
                                barWidth: 20,
                                label: {
                                            show: true,
                                            position: 'top'
                                        }, 
                                emphasis: {
                                    focus: 'series'
                                },
                                data: " + series2 + @"
                            },
                            {
                                name: '已整改',
                                type: 'bar', 
                                barWidth: 20,
                                label: {
                                            show: true,
                                            position: 'top'
                                        }, 
                                emphasis: {
                                    focus: 'series'
                                },
                                data: " + series3 + @"
                            }]";
            }
            else
            {
                string strSql = @" select u.UnitId,u.unitName,r.RegisterTypesId,t.RegisterTypesName,
                             count(*)    as allnum,
                             Sum(case when States= 1 or States is null then 1 else 0 end) as todo,
                             Sum(case when States= 3 or States = 2 then 1 else 0 end) as finish
                             from HSSE_Hazard_HazardRegister r left join Base_Unit u on r.ResponsibleUnit = u.UnitId 
							 left join HSSE_Hazard_HazardRegisterTypes t on r.RegisterTypesId=t.RegisterTypesId
                             where u.UnitId is not null and r.RegisterTypesId is not null and  ProjectId=@ProjectId and States != '4' and ProblemTypes = '1'
                              ";
                if (!string.IsNullOrEmpty(this.txtStartRectificationTime.Text.Trim()))
                {
                    strSql += " and CheckTime >='" + this.txtStartRectificationTime.Text.Trim() + "' ";
                }
                if (!string.IsNullOrEmpty(this.txtEndRectificationTime.Text.Trim()))
                {
                    strSql += " and CheckTime <'" + DateTime.Parse(this.txtEndRectificationTime.Text.Trim()).AddDays(1).ToString("yyyy-MM-dd") + "' ";
                }
                strSql += " group by u.UnitId,u.unitName ,r.RegisterTypesId,t.RegisterTypesName ";
                List listStr = new List();
                listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
                SqlParameter[] parameter = listStr.ToArray();
                DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
                Dictionary> data = new Dictionary>();
                legend = "[";
                xAxis = "[";
                HashSet xdic = new HashSet();
                HashSet unitdic = new HashSet();
                foreach (DataRow dr in tb.Rows)
                {
                    xdic.Add(dr["RegisterTypesName"].ToString());
                    unitdic.Add(dr["unitName"].ToString());
                    Dictionary temp = null;
                    if (!data.ContainsKey(dr["unitName"].ToString()))
                    {
                        data.Add(dr["unitName"].ToString(), new Dictionary());
                    }
                    temp = data[dr["unitName"].ToString()];
                    if (!temp.ContainsKey(dr["RegisterTypesName"].ToString()))
                    {
                        temp.Add(dr["RegisterTypesName"].ToString(), "0");
                    }
                    temp[dr["RegisterTypesName"].ToString()] = dr["allnum"].ToString();
                }
                foreach (string types in xdic)
                {
                    xAxis += "\"" + types + "\",";
                }
                xAxis = xAxis.TrimEnd(',');
                xAxis += "]";
                foreach (string types in unitdic)
                {
                    legend += "\"" + types + "[全部]\",";
                    legend += "\"" + types + "[未整改]\",";
                    legend += "\"" + types + "[已整改]\",";
                }
                legend = legend.TrimEnd(',');
                legend += "]";
                series = "[";
                foreach (string unit in data.Keys)
                {
                    string tempseries = "";
                    foreach (string types in xdic)
                    {
                        if (data[unit].ContainsKey(types))
                        {
                            tempseries += "" + data[unit][types] + ",";
                        }
                        else
                        {
                            tempseries += "0,";
                        }
                    }
                    series += @"{
                                name: '" + unit + @"[全部]',
                                type: 'bar',
                                stack: '全部',
                                barWidth: 10,
                                label: {
                                    show: true,
                                    position: 'top'
                                }, 
                                emphasis: {
                                    focus: 'series'
                                },
                                data: [" + tempseries.TrimEnd(',') + @"] 
                                },";
                }
                data = new Dictionary>();
                foreach (DataRow dr in tb.Rows)
                {
                    xdic.Add(dr["RegisterTypesName"].ToString());
                    Dictionary temp = null;
                    if (!data.ContainsKey(dr["unitName"].ToString()))
                    {
                        data.Add(dr["unitName"].ToString(), new Dictionary());
                    }
                    temp = data[dr["unitName"].ToString()];
                    if (!temp.ContainsKey(dr["RegisterTypesName"].ToString()))
                    {
                        temp.Add(dr["RegisterTypesName"].ToString(), "0");
                    }
                    temp[dr["RegisterTypesName"].ToString()] = dr["todo"].ToString();
                }
                foreach (string unit in data.Keys)
                {
                    string tempseries = "";
                    foreach (string types in xdic)
                    {
                        if (data[unit].ContainsKey(types))
                        {
                            tempseries += "" + data[unit][types] + ",";
                        }
                        else
                        {
                            tempseries += "0,";
                        }
                    }
                    series += @"{
                                name: '" + unit + @"[未整改]',
                                type: 'bar',
                                stack: '未整改',
                                barWidth: 10,
                                label: {
                                    show: true,
                                    position: 'top'
                                }, 
                                emphasis: {
                                    focus: 'series'
                                },
                                data: [" + tempseries.TrimEnd(',') + @"] 
                                },";
                }
                data = new Dictionary>();
                foreach (DataRow dr in tb.Rows)
                {
                    xdic.Add(dr["RegisterTypesName"].ToString());
                    Dictionary temp = null;
                    if (!data.ContainsKey(dr["unitName"].ToString()))
                    {
                        data.Add(dr["unitName"].ToString(), new Dictionary());
                    }
                    temp = data[dr["unitName"].ToString()];
                    if (!temp.ContainsKey(dr["RegisterTypesName"].ToString()))
                    {
                        temp.Add(dr["RegisterTypesName"].ToString(), "0");
                    }
                    temp[dr["RegisterTypesName"].ToString()] = dr["finish"].ToString();
                }
                foreach (string unit in data.Keys)
                {
                    string tempseries = "";
                    foreach (string types in xdic)
                    {
                        if (data[unit].ContainsKey(types))
                        {
                            tempseries += "" + data[unit][types] + ",";
                        }
                        else
                        {
                            tempseries += "0,";
                        }
                    }
                    series += @"{
                                name: '" + unit + @"[已整改]',
                                type: 'bar',
                                stack: '已整改',
                                barWidth: 10,
                                label: {
                                    show: true,
                                    position: 'top'
                                }, 
                                emphasis: {
                                    focus: 'series'
                                },
                                data: [" + tempseries.TrimEnd(',') + @"] 
                                },";
                }
                series = series.TrimEnd(',');
                series += "]";
            }
        }
        #endregion
        #region 图形
        /// 
        /// 图形变换 
        /// 
        /// 
        /// 
        protected void drpChartType_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.AnalyseData();
            PageContext.RegisterStartupScript(@"setTimeout(function () {  rendChart(" + legend + "," + xAxis + "," + series + ");}, 1000); ");
        }
        protected void ckbShow_CheckedChanged(object sender, CheckedEventArgs e)
        {
            this.AnalyseData();
            PageContext.RegisterStartupScript(@"setTimeout(function () { rendChart(" + legend + "," + xAxis + "," + series + ");}, 1000);");
        }
        #endregion
    }
}