using FineUIPro;
using Model;
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BLL
{
    public static class SYHSEData_DataService
    {
        public static Model.SGGLDB db = Funs.DB;
        #region 获取列表
        /// 
        /// 记录数
        /// 
        public static int count
        {
            get;
            set;
        }
        public static List GetSYHSEData_DataByModle(Model.SYHSEData_Data table)
        {
            var q = from x in db.SYHSEData_Data
                    where
                              (string.IsNullOrEmpty(table.Id) || x.Id.Contains(table.Id)) &&
                              (string.IsNullOrEmpty(table.FactoryId) || x.FactoryId.Contains(table.FactoryId)) 
                    select x
                  ;
            return q.ToList();
        }
        /// 获取分页列表
        /// 
        /// 页码
        /// 每页数量
        /// 
        public static IEnumerable getListData(Model.SYHSEData_Data table, Grid Grid1)
        {
            var q = GetSYHSEData_DataByModle(table);
            count = q.Count();
            if (count == 0)
            {
                return null;
            }
            //  q=  q.Take(Grid1.PageSize * Grid1.PageIndex).Skip(Grid1.PageSize * (Grid1.PageIndex)).ToList();
            // q = SortConditionHelper.SortingAndPaging(q, Grid1.SortField, Grid1.SortDirection, Grid1.PageIndex, Grid1.PageSize);
            return from x in q
                   select new
                   {
                       x.Id,
                       x.FactoryId,
                       x.SafetyMnaHours,
                       x.GeneralRiskNum,
                       x.LowRiskNum,
                       x.MoreRiskNum,
                       x.GreatRiskNum,
                       x.ReportDate,
                   };
        }
        #endregion
        public static bool IsReportByDate(DateTime dateTime)
        {
            var result = false;
            var q = (from x in Funs.DB.SYHSEData_Data
                     where x.ReportDate >= dateTime.Date && x.ReportDate < (dateTime.Date.AddDays(1).Date)
                     select x).ToList();
            if (q != null && q.Count > 0)
            {
                result = true;
            }
            return result;
        }
        public static Model.ReturnData PushCNCEC(string Id)
        {
            string baseurl = "/api/SYHSEData/SaveNewSYHSEData";
            var item = GetItemById(Id);
            string str = JsonConvert.SerializeObject(item);
            var responeData = BLL.ServerService.PushCNCEC(str, baseurl);
            return responeData;
        }
        public static Model.NewSYHSEData GetItemById(string Id)
        {
            var data=GetSYHSEData_DataById(Id);
            var data_realtime = HazardRealtimedeviceService.GetHazard_RealTimeDeviceByDate(data.ReportDate);
            var data_hidden= SyhsedataHiddendangercheckService.GetSYHSEData_HiddenDangerCheckByDate(data.ReportDate);   
            var data_risk= SyhsedataRiskcontrolService.GetSYHSEData_RiskControlByDate(data.ReportDate);
            NewSYHSEData APIData = new NewSYHSEData();
            var APIDataList_Item= new List();
            var APIDataList_Relatime= new List();  
            var APIDataList_Hidden= new List();  
            var APIDataList_Risk= new List();
            foreach (var tb in data_realtime)
            {
                var q = new NewSYHSEDataRealTimeDeviceItem()
                {
                    Id=tb.ID,
                    HazardName=tb.HazardName,
                    HazardLevel=tb.HazardLevel,
                    DeviceName=tb.DeviceName,
                    Medium=tb.Medium,
                    MeasurementUnit=tb.MeasurementUnit,
                    DateTime=tb.DateTime.ToString(),
                    Value=tb.Value,
                
                };
                APIDataList_Relatime.Add(q);
            }
            foreach (var tb in data_hidden)
            {
                var q = new NewSYHSEDataHiddenDangerCheckItem()
                {
                    Id=tb.Id,
                    HiddenDangerName=tb.HiddenDangerName,
                    TotalNum=tb.TotalNum.HasValue ? tb.TotalNum.Value:0,
                    OKNum=tb.OKNum.HasValue ? tb.OKNum.Value : 0,
                };
                APIDataList_Hidden.Add(q);
            }
            foreach (var tb in data_risk)
            {
                var q = new NewSYHSEDataRiskControlItem()
                { 
                    Id=tb.Id,
                    RiskControlName=tb.RiskControlName,
                
                };            
                APIDataList_Risk.Add(q);
            }
            var thisUnit = CommonService.GetIsThisUnit();
            NewSYHSEDataItem Item = new NewSYHSEDataItem();
            Item.Id = data.Id;
            Item.ReportDate=data.ReportDate.ToString();
            Item.UnitId = thisUnit.UnitId;
            Item.CollCropCode = thisUnit.CollCropCode;
            Item.UnitName= thisUnit.UnitName;
            Item.FactoryId = data.FactoryId;
            Item.FactoryCode = ProjectService.GetProjectByProjectId(data.FactoryId).ProjectCode; 
            Item.FactoryName = ProjectService.GetProjectByProjectId(data.FactoryId).ProjectName;
            Item.Address = ProjectService.GetProjectByProjectId(data.FactoryId).ProjectAddress;
            Item.MapCoordinates= ProjectService.GetProjectByProjectId(data.FactoryId).MapCoordinates;
            Item.SafetyMnaHours =  data.SafetyMnaHours.HasValue ? data.SafetyMnaHours.Value : 0;
            Item.GeneralRiskNum =  data.GeneralRiskNum.HasValue ? data.GeneralRiskNum.Value : 0;
            Item.LowRiskNum =  data.LowRiskNum.HasValue ? data.LowRiskNum.Value : 0;
            Item.MoreRiskNum =  data.MoreRiskNum.HasValue ? data.MoreRiskNum.Value : 0;
            Item.GreatRiskNum =  data.GreatRiskNum.HasValue ? data.GreatRiskNum.Value : 0;
            Item.NewSYHSEDataRiskControlItems = APIDataList_Risk;
            Item.NewSYHSEDataRealTimeDeviceItems = APIDataList_Relatime;
            Item.NewSYHSEDataHiddenDangerCheckItems = APIDataList_Hidden;
            APIDataList_Item.Add(Item);
            APIData.NewSYHSEDataItems = APIDataList_Item;
          
            return APIData;
        }
        public static Model.SYHSEData_Data GetSYHSEData_DataById(string Id)
        {
            return db.SYHSEData_Data.FirstOrDefault(x => x.Id == Id);
        }
        public static void AddSYHSEData_Data(Model.SYHSEData_Data newtable)
        {
            Model.SYHSEData_Data table = new Model.SYHSEData_Data
            {
                Id = newtable.Id,
                FactoryId = newtable.FactoryId,
                SafetyMnaHours = newtable.SafetyMnaHours,
                GeneralRiskNum = newtable.GeneralRiskNum,
                LowRiskNum = newtable.LowRiskNum,
                MoreRiskNum = newtable.MoreRiskNum,
                GreatRiskNum = newtable.GreatRiskNum,
                ReportDate = newtable.ReportDate,
            };
            db.SYHSEData_Data.InsertOnSubmit(table);
            db.SubmitChanges();
        }
        public static void AddBulkSYHSEData_Data(List newtables)
        {
            db.SYHSEData_Data.InsertAllOnSubmit(newtables);
            db.SubmitChanges();
        }
        public static void UpdateSYHSEData_Data(Model.SYHSEData_Data newtable)
        {
            Model.SYHSEData_Data table = db.SYHSEData_Data.FirstOrDefault(x => x.Id == newtable.Id);
            if (table != null)
            {
                table.Id = newtable.Id;
                table.FactoryId = newtable.FactoryId;
                table.SafetyMnaHours = newtable.SafetyMnaHours;
                table.GeneralRiskNum = newtable.GeneralRiskNum;
                table.LowRiskNum = newtable.LowRiskNum;
                table.MoreRiskNum = newtable.MoreRiskNum;
                table.GreatRiskNum = newtable.GreatRiskNum;
                table.ReportDate = newtable.ReportDate;
                db.SubmitChanges();
            }
        }
        public static void DeleteSYHSEData_DataById(string Id)
        {
            Model.SYHSEData_Data table = db.SYHSEData_Data.FirstOrDefault(x => x.Id == Id);
            if (table != null)
            {
                db.SYHSEData_Data.DeleteOnSubmit(table);
                db.SubmitChanges();
            }
        }
        public static void DeleteALLSYHSEData_Data()
        {
            if (db.SYHSEData_Data != null)
            {
                db.SYHSEData_Data.DeleteAllOnSubmit(db.SYHSEData_Data);
                db.SubmitChanges();
            }
        }
    }
}