using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using BLL;
namespace FineUIPro.Web.common
{
    public partial class mainProject : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Model.SGGLDB db = Funs.DB;
                //未遂事故
                var wsAccidentList1 = from x in db.Accident_AccidentPersonRecord
                                      join y in db.Base_AccidentType on x.AccidentTypeId equals y.AccidentTypeId
                                      where y.AccidentTypeName.Contains("未遂") && x.ProjectId == this.CurrUser.LoginProjectId
                                      select x;
                var wsAccidentList2 = from x in db.Accident_AccidentReportOther
                                      join y in db.Sys_Const on x.AccidentTypeId equals y.ConstValue
                                      where y.ConstText.Contains("未遂") && x.ProjectId == this.CurrUser.LoginProjectId
                                      select x;
                this.divWS.InnerHtml = (wsAccidentList1.Count() + wsAccidentList2.Count()).ToString();
                //隐患整改
                var getRectify = db.Check_RectifyNotices.Where(x => x.ProjectId == this.CurrUser.LoginProjectId);
                this.divYH.InnerHtml = getRectify.Count().ToString();
                //安全人工时
                int wHours = db.SitePerson_PersonInOutNumber.Where(x => x.ProjectId == this.CurrUser.LoginProjectId).Max(x => x.WorkHours) ?? 0;
                this.divRGS.InnerHtml = wHours.ToString();
                //教育培训
                var getTrainRecord = from x in db.EduTrain_TrainRecord where x.ProjectId == this.CurrUser.LoginProjectId select x;
                this.divPX.InnerHtml = getTrainRecord.Count().ToString();
                //质量问题
                var checkList = from x in db.Check_CheckControl where x.ProjectId == this.CurrUser.LoginProjectId select x;
                this.divZLWT.InnerHtml = checkList.Count().ToString();
                //质量共检数据
                var inspectionManagements = from x in db.ProcessControl_InspectionManagement where x.ProjectId == this.CurrUser.LoginProjectId select x;
                this.divZLGJ.InnerHtml = inspectionManagements.Count().ToString();
                //验收数据
                this.divYS.InnerHtml = inspectionManagements.Count(x => x.IsOnceQualified == true).ToString();
                //竣工资料
                this.divJGZL.InnerHtml = inspectionManagements.Count(x => x.IsOnceQualified == true).ToString();
                //NCR
                var NCRManagements = from x in db.Comprehensive_NCRManagement where x.ProjectId == this.CurrUser.LoginProjectId select x;
                this.divNCR.InnerHtml = NCRManagements.Count().ToString();
                //变更单
                var designChangeOrders = from x in db.Comprehensive_DesignChangeOrder where x.ProjectId == this.CurrUser.LoginProjectId select x;
                this.divBG.InnerHtml = designChangeOrders.Count().ToString();
                //工程量完成情况
                string date = string.Empty;
                var quantityCompletions = from x in Funs.DB.View_JDGL_QuantityCompletion where x.ProjectId == this.CurrUser.LoginProjectId orderby x.SortIndex, x.Name select x;
                if (quantityCompletions.Count() > 0)
                {
                    string quantityCompletionStr = "
序号
类型
单位
设计数量
计划完成
实际完成
计划完成率
累计计划完成
累计实际完成
累计计划完成率
总完成率
 ";
                    int i = 1;
                    foreach (var item in quantityCompletions)
                    {
                        quantityCompletionStr += ""
                                        + i + "
"
                                        + item.Name + "
"
                                        + item.Unit + "
"
                                        + (item.DesignNum != null ? item.DesignNum.Value.ToString("F0") : "0") + "
"
                                        + (item.PlanNum != null ? item.PlanNum.Value.ToString("F0") : "0") + "
"
                                        + (item.RealNum != null ? item.RealNum.Value.ToString("F0") : "0") + "
"
                                        + item.Rate + "
"
                                        + item.TotalPlanNum + "
"
                                        + item.TotalRealNum + "
"
                                        + item.TotalRate + "
"
                                        + item.SumRate + "
 ";
                        i++;
                    }
                    divGZL.InnerHtml = quantityCompletionStr;
                    if (quantityCompletions.Count() > 0)
                    {
                        if (quantityCompletions.First() != null && quantityCompletions.First().EndDate != null)
                        {
                            date = " (" + string.Format("{0:yyyy-MM}", quantityCompletions.First().EndDate) + ")";
                        }
                    }
                }
                else   //低温储罐项目显示低温储罐数据
                {
                    var lowTankCompletions = from x in Funs.DB.View_JDGL_LowTankCompletion where x.ProjectId == this.CurrUser.LoginProjectId orderby x.Code select x;
                    string quantityCompletionStr = "序号
储罐编号
类型
单位
设计数量
计划完成
实际完成
计划完成率
累计计划完成
累计实际完成
累计计划完成率
总完成率
 ";
                    int i = 1;
                    foreach (var item in lowTankCompletions)
                    {
                        quantityCompletionStr += ""
                                        + i + "
"
                                        + item.Code + "
"
                                        + item.Name + "
"
                                        + item.Unit + "
"
                                        + (item.TotalNum != null ? item.TotalNum.Value.ToString("F0") : "0") + "
"
                                        + (item.PlanNum != null ? item.PlanNum.Value.ToString("F0") : "0") + "
"
                                        + (item.RealNum != null ? item.RealNum.Value.ToString("F0") : "0") + "
"
                                        + item.Rate + "
"
                                        + item.TotalPlanNum + "
"
                                        + item.TotalRealNum + "
"
                                        + item.TotalRate + "
"
                                        + item.SumRate + "
 ";
                        i++;
                    }
                    divGZL.InnerHtml = quantityCompletionStr;
                    if (lowTankCompletions.Count() > 0)
                    {
                        if (lowTankCompletions.First() != null && lowTankCompletions.First().EndDate != null)
                        {
                            date = " (" + string.Format("{0:yyyy-MM}", lowTankCompletions.First().EndDate) + ")";
                        }
                    }
                }
                divMonth.InnerHtml = "专业工作量表" + date;
            }
        }
        #region 赢得值曲线
        protected string Two
        {
            get
            {
                List series = new List();
                Model.BusinessColumn businessColumn = new Model.BusinessColumn();
                List listCategories = new List();
                businessColumn.title = "赢得值曲线";
                Model.Project_Installation installation = BLL.Project_InstallationService.GetProjectInstallationByProjectId(this.CurrUser.LoginProjectId);
                if (installation != null)
                {
                    Model.SingleSerie s = new Model.SingleSerie();
                    Model.SingleSerie s2 = new Model.SingleSerie();
                    Model.SingleSerie s3 = new Model.SingleSerie();
                    Model.SingleSerie s4 = new Model.SingleSerie();
                    Model.SingleSerie s5 = new Model.SingleSerie();
                    Model.SingleSerie s6 = new Model.SingleSerie();
                    List listdata = new List();
                    List listdata2 = new List();
                    List listdata3 = new List();
                    List listdata4 = new List();
                    List listdata5 = new List();
                    List listdata6 = new List();
                    string strSql = "select distinct (cast(YEAR(Months) as varchar(4))+'.'+cast(MONTH(Months) as varchar(2))) as 月份,t.Months," +
                             "ThisRealCost as '本月已完工作实际费用-ACWP',ThisPlanCost as '本月已完工作预算费用-BCWP',ThisPlanValue as '本月计划工作预算费用-BCWS',TotalPlanValue as '累计计划工作预算费用-BCWS',TotalRealCost as '累计已完工作实际费用-ACWP',TotalPlanCost as '累计已完工作预算费用-BCWP' " +
                             "from dbo.View_WBS_CostControlParentDetail as t where ParentId=@Id order by t.Months";
                    //string date = DateTime.Now.Year + "-" + DateTime.Now.Month + "-01";
                    SqlParameter[] parameter = new SqlParameter[]
                            {
                        new SqlParameter("@Id",installation.InstallationId),
                                //new SqlParameter("@Months",date),
                            };
                    DataTable dt = SQLHelper.GetDataTableRunText(strSql, parameter);
                    decimal lastbcws = 0, bcws = 0, lastacwp = 0, acwp = 0, lastbcwp = 0, bcwp = 0;
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        dt.Rows[i]["本月已完工作实际费用-ACWP"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月已完工作实际费用-ACWP"].ToString()) / 10000;
                        dt.Rows[i]["本月已完工作预算费用-BCWP"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月已完工作预算费用-BCWP"].ToString()) / 10000;
                        dt.Rows[i]["本月计划工作预算费用-BCWS"] = Funs.GetNewDecimalOrZero(dt.Rows[i]["本月计划工作预算费用-BCWS"].ToString()) / 10000;
                        bcws = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计计划工作预算费用-BCWS"].ToString());
                        acwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计已完工作实际费用-ACWP"].ToString());
                        bcwp = Funs.GetNewDecimalOrZero(dt.Rows[i]["累计已完工作预算费用-BCWP"].ToString());
                        if (bcws == lastbcws)
                        {
                            if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
                            {
                                dt.Rows[i]["累计计划工作预算费用-BCWS"] = 0;
                            }
                            else
                            {
                                dt.Rows[i]["累计计划工作预算费用-BCWS"] = bcws / 10000;
                            }
                        }
                        else
                        {
                            dt.Rows[i]["累计计划工作预算费用-BCWS"] = bcws / 10000;
                        }
                        if (acwp == lastacwp)
                        {
                            if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
                            {
                                dt.Rows[i]["累计已完工作实际费用-ACWP"] = 0;
                            }
                            else
                            {
                                dt.Rows[i]["累计已完工作实际费用-ACWP"] = acwp / 10000;
                            }
                        }
                        else
                        {
                            dt.Rows[i]["累计已完工作实际费用-ACWP"] = acwp / 10000;
                        }
                        if (bcwp == lastbcwp)
                        {
                            if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) > DateTime.Now)
                            {
                                dt.Rows[i]["累计已完工作预算费用-BCWP"] = 0;
                            }
                            else
                            {
                                dt.Rows[i]["累计已完工作预算费用-BCWP"] = bcwp / 10000;
                            }
                        }
                        else
                        {
                            dt.Rows[i]["累计已完工作预算费用-BCWP"] = bcwp / 10000;
                        }
                        lastbcws = bcws;
                        lastacwp = acwp;
                        lastbcwp = bcwp;
                        listCategories.Add(dt.Rows[i]["月份"].ToString());
                        if (Funs.GetNewDateTimeOrNow(dt.Rows[i]["Months"].ToString()) <= DateTime.Now)
                        {
                            listdata.Add(Convert.ToDouble(dt.Rows[i]["本月计划工作预算费用-BCWS"]));
                            listdata2.Add(Convert.ToDouble(dt.Rows[i]["累计计划工作预算费用-BCWS"]));
                            listdata3.Add(Convert.ToDouble(dt.Rows[i]["本月已完工作预算费用-BCWP"]));
                            listdata4.Add(Convert.ToDouble(dt.Rows[i]["累计已完工作预算费用-BCWP"]));
                            listdata5.Add(Convert.ToDouble(dt.Rows[i]["本月已完工作实际费用-ACWP"]));
                            listdata6.Add(Convert.ToDouble(dt.Rows[i]["累计已完工作实际费用-ACWP"]));
                        }
                    }
                    s.data = listdata;
                    s2.data = listdata2;
                    s3.data = listdata3;
                    s4.data = listdata4;
                    s5.data = listdata5;
                    s6.data = listdata6;
                    series.Add(s);
                    series.Add(s2);
                    series.Add(s3);
                    series.Add(s4);
                    series.Add(s5);
                    series.Add(s6);
                    businessColumn.categories = listCategories;
                    businessColumn.series = series;
                }
                return JsonConvert.SerializeObject(businessColumn);
            }
        }
        #endregion
        #region  人力情况
        protected string Person
        {
            get
            {
                Model.SGGLDB db = Funs.DB;
                List series = new List();
                Model.BusinessColumn businessColumn = new Model.BusinessColumn();
                List listCategories = new List();
                var persons = from x in db.SitePerson_Person where x.ProjectId == this.CurrUser.LoginProjectId && x.IsUsed == true && x.InTime <= DateTime.Now && (!x.OutTime.HasValue || x.OutTime > DateTime.Now) select x;
                var posts = (from x in persons
                             join y in db.Base_WorkPost on x.WorkPostId equals y.WorkPostId
                             select y).Distinct();
                Model.SingleSerie s = new Model.SingleSerie();
                List listdata = new List();
                //木工
                listCategories.Add("木工");
                int workPostCount1 = persons.Count(x => x.WorkPostId == Const.WorkPost_Carpentry);
                listdata.Add(workPostCount1);
                //钢筋工
                listCategories.Add("钢筋工");
                int workPostCount2 = persons.Count(x => x.WorkPostId == Const.WorkPost_SteelWorker);
                listdata.Add(workPostCount2);
                //瓦工
                listCategories.Add("瓦工");
                int workPostCount3 = persons.Count(x => x.WorkPostId == Const.WorkPost_Bricklayer);
                listdata.Add(workPostCount3);
                //混凝土工
                listCategories.Add("混凝土工");
                int workPostCount4 = persons.Count(x => x.WorkPostId == Const.WorkPost_ConcreteWorker);
                listdata.Add(workPostCount4);
                //钳工
                listCategories.Add("钳工");
                int workPostCount5 = persons.Count(x => x.WorkPostId == Const.WorkPost_Fitter1 || x.WorkPostId == Const.WorkPost_Fitter2);
                listdata.Add(workPostCount5);
                //焊工
                listCategories.Add("焊工");
                int workPostCount6 = persons.Count(x => x.WorkPostId == Const.WorkPost_Welder1 || x.WorkPostId == Const.WorkPost_Welder2 ||
                        x.WorkPostId == Const.WorkPost_Welder3 || x.WorkPostId == Const.WorkPost_Welder4 || x.WorkPostId == Const.WorkPost_Welder5);
                listdata.Add(workPostCount6);
                //铆工
                listCategories.Add("铆工");
                int workPostCount7 = persons.Count(x => x.WorkPostId == Const.WorkPost_Riveter);
                listdata.Add(workPostCount7);
                //管工
                listCategories.Add("管工");
                int workPostCount8 = persons.Count(x => x.WorkPostId == Const.WorkPost_Foreman);
                listdata.Add(workPostCount8);
                //电工
                listCategories.Add("电工");
                int workPostCount9 = persons.Count(x => x.WorkPostId == Const.WorkPost_Electrician1 || x.WorkPostId == Const.WorkPost_Electrician2
                         || x.WorkPostId == Const.WorkPost_Electrician3);
                listdata.Add(workPostCount9);
                //仪表工
                listCategories.Add("仪表工");
                int workPostCount10 = persons.Count(x => x.WorkPostId == Const.WorkPost_Instrumentalist);
                listdata.Add(workPostCount10);
                //防腐保温工
                listCategories.Add("防腐保温工");
                int workPostCount11 = persons.Count(x => x.WorkPostId == Const.WorkPost_AnticorrosionWorker);
                listdata.Add(workPostCount11);
                //防腐保温工
                listCategories.Add("管理人员");
                int workPostCount12 = (from x in persons
                                       join y in db.Base_WorkPost on x.WorkPostId equals y.WorkPostId
                                       where y.PostType == Const.PostType_1
                                       select x).Count();
                listdata.Add(workPostCount12);
                //其他
                listCategories.Add("其他");
                int workPostCount13 = persons.Count() - workPostCount1 - workPostCount2 - workPostCount3 - workPostCount4 - workPostCount5 - workPostCount6 - workPostCount7
                    - workPostCount8 - workPostCount9 - workPostCount10 - workPostCount11 - workPostCount12;
                listdata.Add(workPostCount13);
                s.data = listdata;
                series.Add(s);
                businessColumn.categories = listCategories;
                businessColumn.title = persons.Count().ToString();
                businessColumn.series = series;
                return JsonConvert.SerializeObject(businessColumn);
            }
        }
        #endregion
        #region  关键事项
        protected string swiper_One
        {
            get
            {
                var getGJSX = (from x in Funs.DB.GJSX
                               join y in Funs.DB.Base_QuestionType on x.QuestionTypeID equals y.QuestionTypeID
                               where x.ProjectId == this.CurrUser.LoginProjectId && x.State != "0"
                               orderby x.CreateDate
                               select new { x.GJSXID, x.Detail, x.CreateDate, x.ProjectId, y.QuestionTypeName }).Distinct().Take(20);
                string strNoticeHtml = string.Empty;
                var readIds = from x in Funs.DB.Sys_UserRead where x.UserId == this.CurrUser.UserId select x.DataId;
                foreach (var item in getGJSX)
                {
                    string url = "../PZHGL/GJSX/GJSXListEdit.aspx?EditType=Edit&Id=" + item.GJSXID;
                    //var attachFile = BLL.AttachFileService.GetAttachFile(item.NoticeId, BLL.Const.ServerNoticeMenuId);
                    //if (attachFile != null && !string.IsNullOrEmpty(attachFile.AttachUrl))
                    //{
                    //    url = "../" + attachFile.AttachUrl.Split(',')[0].Replace("\\", "/");
                    //}
                    if (item.QuestionTypeName.Contains("紧急"))
                    {
                        strNoticeHtml += "" + item.Detail + "
" + string.Format("{0:yyyy-MM-dd}", item.CreateDate) + "
 ";
                    }
                    else if (item.QuestionTypeName.Contains("重要"))
                    {
                        strNoticeHtml += "" + item.Detail + "
" + string.Format("{0:yyyy-MM-dd}", item.CreateDate) + "
 ";
                    }
                    else
                    {
                        strNoticeHtml += "" + item.Detail + "
" + string.Format("{0:yyyy-MM-dd}", item.CreateDate) + "
 ";
                    }
                }
                return "";
            }
        }
        #endregion
        protected void imgBtn_Click(object sender, EventArgs e)
        {
            Model.GJSX gjsx = BLL.GJSXService.GetGJSXById(this.hdNoticeId.Value);
            if (gjsx != null)
            {
                BLL.APIUserService.getSaveUserRead(BLL.Const.GJSXMenuId, gjsx.ProjectId, this.CurrUser.UserId, gjsx.GJSXID);
            }
        }
    }
}