using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.DataVisualization.Charting;
using System.Drawing;
using BLL;

namespace FineUIPro.Web.common
{
    public partial class MainSupervision : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ShowChart();
            if (!IsPostBack)
            {
                BindPointNoTrust();
                BindTrustNoCheck();
                BindCheckNoAudit();
            }
        }

        private void BindPointNoTrust()
        {
            string strSql = @" SELECT batch.PointBatchCode+'   |   '+ (pipe.PipelineCode +'   |   ' + jot.WeldJointCode+ '   |   ' + 
                                      CONVERT(VARCHAR(100) ,batchItem.PointDate,23) ) AS  PointNoTrust
                                 FROM dbo.Batch_PointBatchItem batchItem
                                 LEFT JOIN dbo.Batch_PointBatch batch ON batch.PointBatchId = batchItem.PointBatchId
                                 LEFT JOIN dbo.Pipeline_WeldJoint jot ON jot.WeldJointId = batchItem.WeldJointId
                                 LEFT JOIN dbo.Batch_BatchTrustItem trustItem ON trustItem.PointBatchItemId = batchItem.PointBatchItemId
                                 LEFT JOIN dbo.Pipeline_Pipeline pipe ON pipe.PipelineId = jot.PipelineId
                                WHERE batchItem.PointState IS NOT NULL AND trustItem.TrustBatchItemId IS NULL
                                      AND batch.ProjectId=@ProjectId";

            if (!string.IsNullOrEmpty(this.CurrUser.LoginProjectId))
            {
                SqlParameter[] parameter = new SqlParameter[]
                     {
                        new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId)
                     };
                DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
                gvPointNoTrust.RecordCount = dt.Rows.Count;
                var table = this.GetPagedDataTable(gvPointNoTrust, dt);
                gvPointNoTrust.DataSource = table;
                gvPointNoTrust.DataBind();
            }
        }


        protected void gvPointNoTrust_PageIndexChange(object sender, GridPageEventArgs e)
        {
            gvPointNoTrust.PageIndex = e.NewPageIndex;
            BindPointNoTrust();
        }
        protected void drpPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            gvPointNoTrust.PageSize = Convert.ToInt32(drpPageSize.SelectedValue);
            BindPointNoTrust();
        }

        private void BindTrustNoCheck()
        {
            string strSql = @"  SELECT trust.TrustBatchCode+'     ' + ndttype.DetectionTypeCode + '    ' + 
                                       (pipe.PipelineCode +'     ' + jot.WeldJointCode) AS  TrustNoCheck
                                 FROM Batch_BatchTrustItem trustItem
                                 LEFT JOIN dbo.Batch_BatchTrust trust ON trust.TrustBatchId = trustItem.TrustBatchId
                                 LEFT JOIN dbo.Base_DetectionType ndttype ON ndttype.DetectionTypeId = trust.DetectionTypeId
                                 LEFT JOIN dbo.Pipeline_WeldJoint jot ON jot.WeldJointId = trustItem.WeldJointId
                                 LEFT JOIN dbo.Batch_NDEItem ndtItem ON ndtItem.TrustBatchItemId = trustItem.TrustBatchItemId
                                 LEFT JOIN dbo.Pipeline_Pipeline pipe ON pipe.PipelineId = jot.PipelineId
                                 WHERE (ndtItem.NDEItemID IS NULL OR (ndtItem.NDEItemID IS NOT NULL AND ndtItem.NDEReportNo IS NULL))
                                       AND (trustItem.IsCancelTrust IS NULL OR trustItem.IsCancelTrust=0)
                                       AND pipe.ProjectId=@ProjectId
                                 ORDER BY ndttype.DetectionTypeCode";

            if (!string.IsNullOrEmpty(this.CurrUser.LoginProjectId))
            {
                SqlParameter[] parameter = new SqlParameter[]
                     {
                        new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId)
                     };
                DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
                gvTrustNoCheck.RecordCount = dt.Rows.Count;
                var table = this.GetPagedDataTable(gvTrustNoCheck, dt);
                gvTrustNoCheck.DataSource = table;
                gvTrustNoCheck.DataBind();
            }
        }

        protected void gvTrustNoCheck_PageIndexChange(object sender, GridPageEventArgs e)
        {
            gvTrustNoCheck.PageIndex = e.NewPageIndex;
            BindTrustNoCheck();
        }
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            gvTrustNoCheck.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
            BindTrustNoCheck(); 
        }

        private void BindCheckNoAudit()
        {
            string strSql = @" SELECT ndt.NDECode+'     '+ (pipe.PipelineCode +'     ' + jot.WeldJointCode) AS  CheckNoAudit
                                 FROM dbo.Batch_NDEItem ndtItem
                                 LEFT JOIN dbo.Batch_NDE ndt ON ndt.NDEID = ndtItem.NDEID
                                 LEFT JOIN dbo.Batch_BatchTrustItem trust ON trust.TrustBatchItemId = ndtItem.TrustBatchItemId
                                 LEFT JOIN dbo.Pipeline_WeldJoint jot ON jot.WeldJointId = trust.WeldJointId  
                                 LEFT JOIN dbo.Pipeline_Pipeline pipe ON pipe.PipelineId = jot.PipelineId
                                WHERE ndtItem.SubmitDate IS NULL AND ndtItem.NDEReportNo IS NOT NULL AND ndt.ProjectId=@ProjectId";

            if (!string.IsNullOrEmpty(this.CurrUser.LoginProjectId))
            {
                SqlParameter[] parameter = new SqlParameter[]
                     {
                        new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId)
                     };
                DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
                gvCheckNoAudit.DataSource = dt;
                gvCheckNoAudit.DataBind();
            }
        }

        private void ShowChart()
        {
            string strSql1 = @"SELECT v.totalDin AS '预估',(v.totalDin-ISNULL(v1.LastDin,0)) AS '完成', 
                                      ISNULL(v1.LastDin,0) AS '剩余',ISNULL(v2.LastWeekDin,0) AS '近一周'
                                FROM
                                   (SELECT ProjectId, ISNULL(SUM(ISNULL(Size,0)),0) AS totalDin 
                                     FROM dbo.Pipeline_WeldJoint 
									 WHERE IsCancel IS NULL OR (IsCancel=1 AND WeldingDailyId IS NOT NULL) 
									  GROUP BY ProjectId) v

                                    LEFT JOIN
                                   (SELECT ProjectId, ISNULL(SUM(ISNULL(Size,0)),0) AS LastDin 
                                    FROM dbo.Pipeline_WeldJoint 
                                    WHERE WeldingDailyId IS NULL AND IsCancel IS NULL 
									GROUP BY ProjectId) v1 ON v1.ProjectId = v.ProjectId
                                   
                                    LEFT JOIN
                                   (SELECT jot.ProjectId, ISNULL(SUM(ISNULL(jot.Size,0)),0) AS LastWeekDin 
                                    FROM dbo.Pipeline_WeldJoint jot
                                    LEFT JOIN dbo.Pipeline_WeldingDaily report ON report.WeldingDailyId = jot.WeldingDailyId
                                    WHERE jot.WeldingDailyId IS NOT NULL AND report.WeldingDate<=GETDATE() AND report.WeldingDate>DATEADD(ww,-1,GETDATE())
                                    GROUP BY jot.ProjectId) v2 ON v2.ProjectId = v.ProjectId

                                WHERE v.ProjectId=@ProjectId1";

            string strSql2 = @"SELECT ISNULL(v1.BatchTrustNum,0) AS '委托数',ISNULL(v2.NdtCheckNum,0) AS '拍片焊口',
                                     (ISNULL(v1.BatchTrustNum,0)-ISNULL(v2.NdtCheckNum,0)) AS '积压焊口' ,
                                     ISNULL(v3.LastWeekCheckNum,0) AS '近一周检测'
                                FROM 
                                   (SELECT trust.ProjectId, COUNT(d.TrustBatchItemId) AS BatchTrustNum 
                                    FROM dbo.Batch_BatchTrustItem  d
                                    LEFT JOIN dbo.Batch_BatchTrust trust ON  trust.TrustBatchId = d.TrustBatchId
                                    LEFT JOIN dbo.Base_DetectionType ndt ON ndt.DetectionTypeId = trust.DetectionTypeId
                                    WHERE ndt.SysType='射线检测' AND d.IsCancelTrust IS NULL  GROUP BY trust.ProjectId) v1
                               LEFT JOIN 
                                   (SELECT ndt.ProjectId,COUNT(ndtItme.NDEItemID) AS NdtCheckNum 
                                      FROM dbo.Batch_NDEItem ndtItme 
                                      LEFT JOIN dbo.Batch_NDE ndt ON ndt.NDEID = ndtItme.NDEID
                                      LEFT JOIN dbo.Base_DetectionType ndtType ON ndtType.DetectionTypeId = ndtItme.DetectionTypeId
                                    WHERE ndtType.SysType ='射线检测' AND SubmitDate IS NOT NULL
                                    GROUP BY ndt.ProjectId ) v2 ON v2.ProjectId = v1.ProjectId   
                              LEFT JOIN 
                                   (SELECT ndt.ProjectId,COUNT(ndtItme.NDEItemID) AS LastWeekCheckNum 
                                      FROM dbo.Batch_NDEItem ndtItme 
                                      LEFT JOIN dbo.Batch_NDE ndt ON ndt.NDEID = ndtItme.NDEID
                                      LEFT JOIN dbo.Base_DetectionType ndtType ON ndtType.DetectionTypeId = ndtItme.DetectionTypeId
                                     WHERE ndtType.SysType ='射线检测' AND SubmitDate IS NOT NULL
                                           AND ndtItme.SubmitDate<=GETDATE() AND ndtItme.SubmitDate>DATEADD(ww,-1,GETDATE())
                                          GROUP BY ndt.ProjectId ) v3 ON v3.ProjectId = v1.ProjectId   
                             WHERE v1.ProjectId=@ProjectId2 AND ISNULL(v1.BatchTrustNum,0)>0  ";

            if (!string.IsNullOrEmpty(this.CurrUser.LoginProjectId))
            {
                SqlParameter[] parameter1 = new SqlParameter[]
                     {
                        new SqlParameter("@ProjectId1", this.CurrUser.LoginProjectId)
                     };
                DataTable dt1 = SQLHelper.GetDataTableRunText(strSql1, parameter1);

                SqlParameter[] parameter2 = new SqlParameter[]
                    {
                        new SqlParameter("@ProjectId2", this.CurrUser.LoginProjectId)
                    };
                DataTable dt2 = SQLHelper.GetDataTableRunText(strSql2, parameter2);

                if (dt1.Rows.Count > 0)
                {
                    CreateChart(dt1, Chart1);
                }
                if (dt2.Rows.Count > 0)
                {
                    CreateChart(dt2, Chart2);
                }
            }
        }


        /// <summary>
        /// 创建Chart图形
        /// </summary>
        /// <param name="dt">数据表</param>
        /// <param name="chart1">图形</param>
        private void CreateChart(DataTable dt, Chart chart1)
        {
            chart1.BackColor = Color.WhiteSmoke;
            chart1.ImageLocation = "~/Images/ChartPic_#SEQ(300,3)";
            chart1.BorderlineDashStyle = ChartDashStyle.Solid;
            chart1.Palette = ChartColorPalette.BrightPastel;
            chart1.BackSecondaryColor = Color.White;
            chart1.BackGradientStyle = GradientStyle.TopBottom;
            chart1.BorderWidth = 2;
            chart1.BorderColor = Color.FromArgb(26, 59, 105);
            chart1.ImageType = ChartImageType.Png;

            ChartArea chartArea = new ChartArea();
            chartArea.Name = "焊接工作量";
            chartArea.BackColor = Color.Transparent;
            chartArea.AxisX.IsLabelAutoFit = false;
            chartArea.AxisY.IsLabelAutoFit = false;
            chartArea.AxisX.LabelStyle.Font = new Font("Verdana,Arial,Helvetica,sans-serif", 8F, FontStyle.Regular);
            chartArea.AxisY.LabelStyle.Font = new Font("Verdana,Arial,Helvetica,sans-serif", 8F, FontStyle.Regular);
            chartArea.AxisY.LineColor = Color.FromArgb(64, 64, 64, 64);
            chartArea.AxisX.LineColor = Color.FromArgb(64, 64, 64, 64);
            chartArea.AxisY.MajorGrid.LineColor = Color.FromArgb(64, 64, 64, 64);
            chartArea.AxisX.MajorGrid.LineColor = Color.FromArgb(64, 64, 64, 64);
            chartArea.AxisX.Interval = 1;
            chartArea.Area3DStyle.Enable3D = true;
            chart1.ChartAreas.Add(chartArea);

            chart1.Series.Add("焊接工作量");
            chart1.Series["焊接工作量"].ChartType = ChartControlService.GetChartType("Column");
            chart1.Series["焊接工作量"].Name = "焊接工作量";
            chart1.Series["焊接工作量"].IsValueShownAsLabel = false;
            chart1.Series["焊接工作量"].BorderWidth = 2;
            chart1.Series["焊接工作量"]["DrawingStyle"] = "Cylinder";

            for (int i = 0; i < dt.Columns.Count; i++)
            {
                
                chart1.Series["焊接工作量"].Points.AddXY(dt.Columns[i].ColumnName, dt.Rows[0][i].ToString());
                chart1.Series["焊接工作量"].Points[i].Color = GetColor(i);
                //chart1.Series["焊接工作量"].Points[i].Url = "~/WeldingProcess/WeldingReport/WeldSummary.aspx";
                chart1.Series["焊接工作量"].Points[i].ToolTip = "#VALX:#VALY";
            }
        }

        private Color GetColor(int i)
        {
            Color c = Color.Blue;
            if (i == 1)
            {
                c = Color.Yellow;
            }
            if (i == 2)
            {
                c = Color.Red;
            }
            if (i == 3)
            {
                c = Color.Green;
            }
            return c;
        }
    }
}