using BLL;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
namespace FineUIPro.Web
{
    public partial class mainMenu_HSSE : PageBase
    {
        #region 定义项
        /// 
        /// 项目主键
        /// 
        public string ProjectId
        {
            get
            {
                return (string)ViewState["ProjectId"];
            }
            set
            {
                ViewState["ProjectId"] = value;
            }
        }
        #endregion
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.ProjectId = string.Empty;
                if (this.CurrUser != null && !string.IsNullOrEmpty(this.CurrUser.LoginProjectId))
                {
                    this.ProjectId = this.CurrUser.LoginProjectId;
                }
                getHazardRegisterLists = new List();
                getHazardRegisterLists = HSSE_Hazard_HazardRegisterService.GetHazardRegisterListByProjectId(this.ProjectId);
                ///当前现场总人数
                getSitePerson();
                var project = BLL.ProjectService.GetProjectByProjectId(this.ProjectId);
                if (project != null && project.Telephone != null)
                {
                    this.xmb.InnerHtml = project.Telephone;
                }
            }
        }
        #region 当前现场总人数
        /// 
        ///  当前现场总人数
        /// 
        private void getSitePerson()
        {
           //var  getEmployInOutRecords = Funs.DB.T_d_EmployInOutRecord.Where(x => x.ProjectId == this.ProjectId && x.RecordDate.Value == DateTime.Now.Date).ToList();
           // int AllCount = getEmployInOutRecords.Count();
            var getallin = APIPageDataService.getPersonNum(ProjectId, DateTime.Now);
            int AllCount = getallin.Count();
            if (AllCount > 0)
            {
                ////总人数
                this.divperson.InnerHtml= ((AllCount % 10000) / 1000).ToString();
                this.person00.InnerHtml = ((AllCount % 1000) / 100).ToString();
                this.person01.InnerHtml = ((AllCount % 100) / 10).ToString();
                this.person02.InnerHtml = (AllCount % 10).ToString();
            }
        }
        #endregion
        
        #region 项目安全人工时
        /// 
        ///  项目安全人工时
        /// 
        protected string Two
        {
            get
            {
                List series = new List();
                Model.BusinessColumn businessColumn = new Model.BusinessColumn();
                List listCategories = new List();
                businessColumn.title = "项目安全人工时";
                Model.SingleSerie s = new Model.SingleSerie();
                List listdata = new List();
                Model.SingleSerie s2 = new Model.SingleSerie();
                List listdata2= new List();
                var getMonts= SitePerson_MonthReportService.getMonthReports(CurrUser.LoginProjectId,null);            
                foreach (var month in getMonts.OrderBy(x=>x.CompileDate))
                {
                    listCategories.Add(string.Format("{0:yyyy-MM}", month.CompileDate));                    
                    listdata.Add(double.Parse((month.TotalPersonWorkTime ?? 0).ToString()));
                    listdata2.Add(double.Parse((month.DayWorkTime ?? 0).ToString()));
                }
                s.data = listdata;
                series.Add(s);
                s2.data = listdata2;
                series.Add(s2);
                businessColumn.categories = listCategories; 
                businessColumn.series = series;
                return JsonConvert.SerializeObject(businessColumn);
            }
        }
        #endregion
        #region 作业许可数量统计
        /// 
        ///  作业许可数量统计
        /// 
        protected string Three
        {
            get
            {
                List series = new List();
                Model.BusinessColumn businessColumn = new Model.BusinessColumn();
                List listCategories = new List();
                businessColumn.title = "作业许可数量统计";
                Model.SingleSerie s = new Model.SingleSerie();
                List listdata = new List();
                var getStates = LicensePublicService.drpStatesItem().Where(x=>x.Value != Const._Null);
                var getLicense = APILicenseDataService.getLicenseDataListByStates(this.ProjectId, Const.UnitId_CWCEC, null);
                foreach (var itemStates in getStates)
                {
                    listCategories.Add(itemStates.Text);                   
                    listdata.Add(getLicense.Where(x => x.States == itemStates.Value).Count());
                }
                s.data = listdata;
                series.Add(s);
                businessColumn.categories = listCategories;
                businessColumn.series = series;
                return JsonConvert.SerializeObject(businessColumn);
            }
        }
        #endregion
        #region  安全检查问题统计
        /// 
        /// 
        /// 
        public static List getHazardRegisterLists;
        /// 
        /// 按单位统计
        /// 
        protected string Four1
        {
            get
            {
                List series = new List();
                Model.BusinessColumn businessColumn = new Model.BusinessColumn();
                List listCategories = new List();
                Model.SingleSerie s = new Model.SingleSerie();
                Model.SingleSerie s2 = new Model.SingleSerie();
                List listdata = new List();
                List listdata2 = new List();
                businessColumn.title = "安全检查问题统计";
                var units = getHazardRegisterLists.Select(x => x.ResponsibleUnit).Distinct();
                //UnitService.GetUnitByProjectIdUnitTypeList(this.ProjectId, BLL.Const.ProjectUnitType_2);        
                if (units.Count() > 0)
                {
                    foreach (var unitId in units)
                    {
                        var getPuUnit = Funs.DB.Project_ProjectUnit.FirstOrDefault(x => x.ProjectId == this.ProjectId && x.UnitId == unitId);
                        if (getPuUnit != null)
                        {
                            var getunits = UnitService.GetUnitByUnitId(unitId);
                            if (getunits != null)
                            {
                                listCategories.Add(getunits.ShortUnitName ?? getunits.UnitCode);
                                var unitHazardRegisters = getHazardRegisterLists.Where(x => x.ResponsibleUnit == getunits.UnitId);
                                var noW = unitHazardRegisters.Where(x => x.States != "3");
                                //listdata.Add(unitHazardRegisters.Count() - noW.Count());
                                //listdata2.Add(unitHazardRegisters.Count());
                                listdata.Add(unitHazardRegisters.Where(x=>x.States=="1").Count());
                                listdata2.Add(unitHazardRegisters.Count());
                            }
                        }
                    }
                }
                else
                {
                    var getunits = UnitService.GetUnitByProjectIdUnitTypeList(this.ProjectId, BLL.Const.ProjectUnitType_2).Take(10);
                    foreach (var unit in getunits)
                    {
                        listCategories.Add(unit.ShortUnitName ?? unit.UnitCode);
                        var unitHazardRegisters = getHazardRegisterLists.Where(x => x.ResponsibleUnit == unit.UnitId);
                        var noW = unitHazardRegisters.Where(x => x.States != "3");
                        //listdata.Add(unitHazardRegisters.Count() - noW.Count());
                        //listdata2.Add(unitHazardRegisters.Count());
                        listdata.Add(unitHazardRegisters.Where(x => x.States == "1").Count());
                        listdata2.Add(unitHazardRegisters.Count());
                    }
                }
                s.data = listdata;
                series.Add(s);
                s2.data = listdata2;
                series.Add(s2);
                businessColumn.categories = listCategories;
                businessColumn.series = series;
                return JsonConvert.SerializeObject(businessColumn);
            }
        }
        /// 
        /// 按类型统计
        /// 
        protected string Four2
        {
            get
            {
                List series = new List();
                Model.BusinessColumn businessColumn = new Model.BusinessColumn();
                List listCategories = new List();
                Model.SingleSerie s = new Model.SingleSerie();
                List listdata = new List();
                Model.SingleSerie s2 = new Model.SingleSerie();
                List listdata2 = new List();
                businessColumn.title = "安全检查问题统计";
                var getTypes = HSSE_Hazard_HazardRegisterTypesService.GetHazardRegisterTypesList("1");
                foreach (var item in getTypes)
                {
                    listCategories.Add(item.RegisterTypesName);
                    var unitHazardRegisters = getHazardRegisterLists.Where(x => x.RegisterTypesId == item.RegisterTypesId);
                    var noW = unitHazardRegisters.Where(x => x.States != "3");
                    listdata.Add(unitHazardRegisters.Count() - noW.Count());
                    listdata2.Add(unitHazardRegisters.Count());
                }
                s.data = listdata;
                series.Add(s);
                s2.data = listdata2;
                series.Add(s2);
                businessColumn.categories = listCategories;
                businessColumn.series = series;
                return JsonConvert.SerializeObject(businessColumn);
            }
        }
        #endregion
        #region 入场安全培训
        /// 
        ///  入场安全培训
        /// 
        protected string Five
        {
            get
            {
                List series = new List();
                Model.BusinessColumn businessColumn = new Model.BusinessColumn();
                List listCategories = new List();
                businessColumn.title = "入场培训";
                Model.SingleSerie s = new Model.SingleSerie();
                Model.SingleSerie s2 = new Model.SingleSerie();
                //// 每月培训数量
                List listdata = new List();
                List listdata2 = new List();
                var getTrainRecord = from x in Funs.DB.EduTrain_TrainRecord
                                     where x.ProjectId == this.ProjectId && x.TrainTypeId == Const.EntryTrainTypeId
                                     select x;
                var getTrainRecordDetail = from x in Funs.DB.EduTrain_TrainRecordDetail
                                           join y in getTrainRecord on x.TrainingId equals y.TrainingId
                                           select x;
                DateTime startTime = DateTime.Now;
                DateTime endTime = DateTime.Now;
                var getProject = ProjectService.GetProjectByProjectId(this.ProjectId);
                if (getProject != null && getProject.StartDate.HasValue)
                {
                    startTime = getProject.StartDate.Value;
                    if (getProject.EndDate.HasValue && getProject.EndDate < DateTime.Now)
                    {
                        endTime = getProject.EndDate.Value;
                    }
                }
                int totalCout = 0;
                for (int i = 0; startTime.AddMonths(i) <= endTime; i++)
                {
                    listCategories.Add(string.Format("{0:yyyy-MM}", startTime.AddMonths(i)));
                    
                    var getMontDetail = from x in getTrainRecordDetail
                                        join y in getTrainRecord on x.TrainingId equals y.TrainingId
                                        where y.TrainStartDate.Value.Year == startTime.AddMonths(i).Year && y.TrainStartDate.Value.Month == startTime.AddMonths(i).Month
                                        select x;
                    listdata.Add(getMontDetail.Count());
                    totalCout = totalCout + getMontDetail.Count();
                    listdata2.Add(totalCout);
                }
                s.data = listdata;
                s2.data = listdata2;
                series.Add(s);
                series.Add(s2);
                businessColumn.categories = listCategories;
                businessColumn.series = series;
                return JsonConvert.SerializeObject(businessColumn);
            }
        }
        #endregion
        # region 事故统计
        /// 
        ///  事故统计
        /// 
        protected string Six
        {
            get
            {
                List series = new List();
                Model.BusinessColumn businessColumn = new Model.BusinessColumn();
             
                Model.SingleSerie s = new Model.SingleSerie();
                List listdata = new List();
                businessColumn.title = "事故统计";
                var getAccident = from x in Funs.DB.Accident_AccidentReport
                                  where x.ProjectId == this.ProjectId
                                  select x;
           
                listdata.Add(getAccident.Where(x => x.AccidentTypeId == "1" || x.AccidentTypeId == "2" || x.AccidentTypeId == "3" || x.AccidentTypeId == "4").Count());
                listdata.Add(getAccident.Where(x => x.AccidentTypeId == "5").Count());
                listdata.Add(getAccident.Where(x => x.AccidentTypeId == "6" || x.AccidentTypeId == "7").Count());
                listdata.Add(getAccident.Where(x => x.AccidentTypeId == "8" || x.AccidentTypeId == "9").Count());
                listdata.Add(getAccident.Where(x => x.AccidentTypeId == "10").Count());
                listdata.Add(getAccident.Where(x => x.AccidentTypeId == "11").Count());
                s.data = listdata;
                series.Add(s);
                businessColumn.series = series;
                return JsonConvert.SerializeObject(businessColumn);
            }
        }
        #endregion
    }
}