using FineUIPro;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Model;
using RestSharp;
using Newtonsoft.Json;
using static BLL.Project_CQMSDataService;
namespace BLL
{
    public static class Project_HJGLData_HJGLService
    {
        public static Model.SUBQHSEDB db = Funs.DB;
        /// 
        /// HJGL数据类型
        /// 
        public enum HJGLDateType
        {
            /// 
            /// 全部数据
            /// 
            All,
            /// 
            /// 焊工总数
            /// 
            TotalNumberOfWelders,
            /// 
            /// 达因数
            /// 
            ArrivalFactor,
            /// 
            /// 拍片数
            /// 
            NumberOfFilms,
            /// 
            /// 缺陷分析
            /// 
            DefectAnalysis
        }
        #region 获取列表
        /// 
        /// 记录数
        /// 
        public static int count
        {
            get;
            set;
        }
        public static List GetProject_HJGLData_HJGLByModle(Model.Project_HJGLData_HJGL table)
        {
            var q = from x in db.Project_HJGLData_HJGL
                    where
                              (string.IsNullOrEmpty(table.Id) || x.Id.Contains(table.Id)) &&
                              (string.IsNullOrEmpty(table.ProjectId) || x.Id.Contains(table.ProjectId)) &&
                              (string.IsNullOrEmpty(table.UnitId) || x.UnitId.Contains(table.UnitId)) &&
                              (string.IsNullOrEmpty(table.CollCropCode) || x.CollCropCode.Contains(table.CollCropCode)) &&
                              (string.IsNullOrEmpty(table.UnitName) || x.UnitName.Contains(table.UnitName))
                    select x
                  ;
            return q.ToList();
        }
        /// 获取分页列表
        /// 
        /// 页码
        /// 每页数量
        /// 
        public static IEnumerable getListData(Model.Project_HJGLData_HJGL table, Grid Grid1)
        {
            var q = GetProject_HJGLData_HJGLByModle(table);
            count = q.Count();
            if (count == 0)
            {
                return null;
            }
            // q = SortConditionHelper.SortingAndPaging(q, Grid1.SortField, Grid1.SortDirection, Grid1.PageIndex, Grid1.PageSize);
            return from x in q
                   select new
                   {
                       x.Id,
                       x.ProjectId,
                       x.UnitId,
                       x.CollCropCode,
                       x.UnitName,
                       x.ReportDate,
                       x.WelderNum,
                       x.TotalDineNum,
                       x.CompleteDineNum,
                       x.TotalFilmNum,
                       x.OKFilmNum,
                   };
        }
        #endregion
        public static Model.Project_HJGLData_HJGL GetProject_HJGLData_HJGLById(string Id)
        {
            return db.Project_HJGLData_HJGL.FirstOrDefault(x => x.Id == Id);
        }
        public static List GetProject_HJGLData_HJGLByProjectid(string Projectid)
        {
            var q = (from x in db.Project_HJGLData_HJGL
                     where x.ProjectId == Projectid
                     select x).ToList();
            return q;
        }
        public static void AddProject_HJGLData_HJGL(Model.Project_HJGLData_HJGL newtable)
        {
            using (Model.SUBQHSEDB db = new Model.SUBQHSEDB(Funs.ConnString))
            {
                Model.Project_HJGLData_HJGL table = new Model.Project_HJGLData_HJGL
                {
                    Id = newtable.Id,
                    ProjectId = newtable.ProjectId,
                    UnitId = newtable.UnitId,
                    CollCropCode = newtable.CollCropCode,
                    UnitName = newtable.UnitName,
                    ReportDate = newtable.ReportDate,
                    WelderNum = newtable.WelderNum,
                    TotalDineNum = newtable.TotalDineNum,
                    CompleteDineNum = newtable.CompleteDineNum,
                    TotalFilmNum = newtable.TotalFilmNum,
                    OKFilmNum = newtable.OKFilmNum,
                };
                db.Project_HJGLData_HJGL.InsertOnSubmit(table);
                db.SubmitChanges();
            }
        }
        public static void UpdateProject_HJGLData_HJGL(Model.Project_HJGLData_HJGL newtable)
        {
            using (Model.SUBQHSEDB db = new Model.SUBQHSEDB(Funs.ConnString))
            {
                Model.Project_HJGLData_HJGL table = db.Project_HJGLData_HJGL.FirstOrDefault(x => x.Id == newtable.Id);
                if (table != null)
                {
                    table.Id = newtable.Id;
                    table.ProjectId = newtable.ProjectId;
                    table.UnitId = newtable.UnitId;
                    table.CollCropCode = newtable.CollCropCode;
                    table.UnitName = newtable.UnitName;
                    table.ReportDate = newtable.ReportDate;
                    table.WelderNum = newtable.WelderNum;
                    table.TotalDineNum = newtable.TotalDineNum;
                    table.CompleteDineNum = newtable.CompleteDineNum;
                    table.TotalFilmNum = newtable.TotalFilmNum;
                    table.OKFilmNum = newtable.OKFilmNum;
                    db.SubmitChanges();
                }
            }
        }
        public static void DeleteProject_HJGLData_HJGLById(string Id)
        {
            using (Model.SUBQHSEDB db = new Model.SUBQHSEDB(Funs.ConnString))
            {
                Model.Project_HJGLData_HJGL table = db.Project_HJGLData_HJGL.FirstOrDefault(x => x.Id == Id);
                if (table != null)
                {
                    db.Project_HJGLData_HJGL.DeleteOnSubmit(table);
                    db.SubmitChanges();
                }
            }
        }
        /// 
        /// 判断该项目的该日期是否统计数据
        /// 
        /// 
        /// 
        public static bool IsReportByDate(DateTime dateTime, string projectid)
        {
            var result = false;
            var q = (from x in Funs.DB.Project_HJGLData_HJGL
                     where x.ReportDate >= dateTime.Date && x.ReportDate < (dateTime.Date.AddDays(1).Date) && x.ProjectId == projectid
                     select x).ToList();
            if (q != null && q.Count > 0)
            {
                result = true;
            }
            return result;
        }
        /// 
        /// 根据projectid判断当天项目是否已统计数据
        /// 
        /// 
        /// 
        public static bool IsReportByToday(string projectid)
        {
            var result = false;
            var q = (from x in Funs.DB.Project_HJGLData_HJGL
                     where x.ReportDate < DateTime.Now.AddDays(1).Date && x.ReportDate >= DateTime.Now.Date && x.ProjectId == projectid
                     select x).ToList();
            if (q != null && q.Count > 0)
            {
                result = true;
            }
            return result;
        }
        /// 
        /// 根据projectid,获取该项目当天的统计数据
        /// 
        /// 
        /// 
        public static Model.Project_HJGLData_HJGL getTodayProject_HJGLData_HJGL(string projectid)
        {
            var q = (from x in Funs.DB.Project_HJGLData_HJGL
                     where x.ReportDate < DateTime.Now.AddDays(1).Date && x.ReportDate >= DateTime.Now.Date && x.ProjectId == projectid
                     select x).FirstOrDefault();
            return q;
        }
        /// 
        /// 统计所有在建项目数据
        /// 
        public static void StatisticalAllProjectData()
        {
            var projectlist = ProjectService.GetProjectWorkList();
            foreach (var item in projectlist)
            {
                StatisticalData(item.ProjectId, HJGLDateType.All);
            }
        }
        /// 
        /// 统计数据
        /// 
        /// 项目id
        /// 数据类型
        public static void StatisticalData(string projectid, HJGLDateType hJGLDateType)
        {
            string thisUnitId = string.Empty;
            var thisUnit = CommonService.GetIsThisUnit();
            if (thisUnit != null)
            {
                thisUnitId = thisUnit.UnitId;
            }
            var base_Unit = BLL.UnitService.GetUnitByUnitId(thisUnitId);
            Model.Project_HJGLData_HJGL table = new Model.Project_HJGLData_HJGL();
            if (IsReportByToday(projectid))
            {
                table = getTodayProject_HJGLData_HJGL(projectid);
            }
            else
            {
                table.Id = SQLHelper.GetNewID();
            }
            table.UnitId = thisUnitId;
            table.CollCropCode = base_Unit.CollCropCode;
            table.UnitName = base_Unit.UnitName;
            table.ProjectId = projectid;
            table.ReportDate = DateTime.Now.Date;
            if (hJGLDateType == HJGLDateType.TotalNumberOfWelders || hJGLDateType == HJGLDateType.All)
            {
                table.WelderNum = GetWelderNum(projectid);
            }
            if (hJGLDateType == HJGLDateType.ArrivalFactor || hJGLDateType == HJGLDateType.All)
            {
                table.TotalDineNum = GetTotalDineNum(projectid);
                table.CompleteDineNum = GetCompleteDineNum(projectid);
            }
            if (hJGLDateType == HJGLDateType.NumberOfFilms || hJGLDateType == HJGLDateType.All)
            {
                table.TotalFilmNum = GetTotalFilmNum(projectid);
                table.OKFilmNum = GetOKFilmNum(projectid);
            }
            if (hJGLDateType == HJGLDateType.DefectAnalysis || hJGLDateType == HJGLDateType.All)
            {
                // Project_HJGLData_DefectService.StatisticalData(projectid);
            }
            if (IsReportByToday(projectid))
            {
                UpdateProject_HJGLData_HJGL(table);
            }
            else
            {
                AddProject_HJGLData_HJGL(table);
            }
            HJGLData_HJGLService.UpdateTodyData_State();
        }
        /// 
        /// 获取焊工总数
        /// 
        /// 
        public static int GetWelderNum(string projectid)
        {
            int result = (from x in Funs.DB.BS_Welder
                          where x.ProjectId == projectid && x.WED_IfOnGuard == true
                          select x).Count();
            return result;
        }
        /// 
        /// 获取总达因数
        /// 
        /// 
        public static int GetTotalDineNum(string projectid)
        {
            int result = Convert.ToInt32((from x in Funs.DB.PW_JointInfo
                                          where x.ProjectId == projectid
                                          select x.JOT_Size).ToList().Sum());
            return result;
        }
        /// 
        /// 获取完成达因数
        /// 
        /// 
        public static int GetCompleteDineNum(string projectid)
        {
            int result = Convert.ToInt32((from x in Funs.DB.PW_JointInfo
                                          where x.ProjectId == projectid
                                          select x.JOT_DoneDin).ToList().Sum());
            return result;
        }
        /// 
        /// 获取总片数
        /// 
        /// 
        public static int GetTotalFilmNum(string projectid)
        {
            int result = Convert.ToInt32((from x in Funs.DB.CH_CheckItem
                                          join y in Funs.DB.CH_Check on x.CHT_CheckID equals y.CHT_CheckID
                                          where y.ProjectId == projectid
                                          select x.CHT_TotalFilm).ToList().Sum());
            return result;
        }
        /// 
        /// 获取合格片数
        /// 
        /// 
        public static int GetOKFilmNum(string projectid)
        {
            int result = Convert.ToInt32((from x in Funs.DB.CH_CheckItem
                                          join y in Funs.DB.CH_Check on x.CHT_CheckID equals y.CHT_CheckID
                                          where y.ProjectId == projectid
                                          select x.CHT_PassFilm).ToList().Sum());
            return result;
        }
        #region 推送项目焊接数据
        /// 
        /// 推送项目焊接数据
        /// 
        /// 
        public static ReturnData PushProjectHJGLData()
        {
            var items = (from x in db.Project_HJGLData_HJGL
                         where x.ReportDate == DateTime.Now.Date
                         select x).ToList();
            var defectItems = (from x in db.Project_HJGLData_Defect
                               where x.ReportDate == DateTime.Now.Date
                               select x).ToList();
            Model.ReturnData responeData = new Model.ReturnData();
            if (items.Count() > 0 || defectItems.Count() > 0)
            {
                var thisUnit = CommonService.GetIsThisUnit();
                var newItem = new { CollCropCode = thisUnit.CollCropCode, Items = items, DefectItems = defectItems };
                var str = JsonConvert.SerializeObject(newItem);
                var baseurl = "/api/HJGLData/SaveProjectHJGLData";
                responeData = ServerService.PushCNCEC(str, baseurl);
            }
            else
            {
                responeData.code = 0;
                responeData.message = "当前没有项目焊接数据";
            }
            return responeData;
        }
        #endregion
    }
}