using FineUIPro; using Model; using Newtonsoft.Json; using NPOI.SS.Formula.Functions; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace BLL { public static class HJGLData_HJGLService { //public static SGGLDB db = Funs.DB; public static List BeUnderConstructionList = ProjectService.GetProjectWorkList().Where(x => (x.ProjectAttribute == "GONGCHENG" || x.ProjectAttribute == null)).Select(x => x.ProjectId).ToList(); #region 获取列表 /// /// 记录数 /// public static int count { get; set; } public static List GetHJGLData_HJGLByModle(HJGLData_HJGL table) { var db = Funs.DB; var q = from x in db.HJGLData_HJGL where (string.IsNullOrEmpty(table.Id) || x.Id.Contains(table.Id)) && (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)) orderby x.ReportDate descending select x ; return q.ToList(); } /// 获取分页列表 /// /// 页码 /// 每页数量 /// public static IEnumerable getListData(HJGLData_HJGL table, Grid Grid1) { var q = GetHJGLData_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.UnitId, x.CollCropCode, x.UnitName, x.ReportDate, x.WelderNum, x.TotalDineNum, x.CompleteDineNum, x.TotalFilmNum, x.OKFilmNum, x.State, x.CreateDate, x.CreateMan }; } #endregion 获取列表 public static void AddHJGLData_HJGL(HJGLData_HJGL newtable) { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { var table = new HJGLData_HJGL { Id = newtable.Id, 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, State = newtable.State, CreateDate = newtable.CreateDate, CreateMan = newtable.CreateMan }; db.HJGLData_HJGL.InsertOnSubmit(table); db.SubmitChanges(); } } public static void DeleteHJGLData_HJGLById(string Id) { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { var table = db.HJGLData_HJGL.FirstOrDefault(x => x.Id == Id); if (table != null) { db.HJGLData_HJGL.DeleteOnSubmit(table); db.SubmitChanges(); } } } public static HJGLData_HJGL GetHJGLData_HJGLById(string Id) { var db = Funs.DB; return db.HJGLData_HJGL.FirstOrDefault(x => x.Id == Id); } public static HJGLData GetItemById(string Id) { var item = new HJGLDataItem(); var data = new HJGLData(); var data_HJGL = GetHJGLData_HJGLById(Id); if (data_HJGL != null) { var data_HJGL_detail = HJGLData_DefectService.GetHJGLData_DefectByDate(data_HJGL.ReportDate); item.CollCropCode = data_HJGL.CollCropCode; item.CompleteDineNum = data_HJGL.CompleteDineNum; item.Id = data_HJGL.Id; item.OKFilmNum = data_HJGL.OKFilmNum; item.ReportDate = data_HJGL.ReportDate.Value.ToShortDateString(); item.TotalDineNum = data_HJGL.TotalDineNum; item.TotalFilmNum = data_HJGL.TotalFilmNum; item.UnitId = data_HJGL.UnitId; item.WelderNum = data_HJGL.WelderNum; var list = new List(); if (data_HJGL_detail != null) { foreach (var detail in data_HJGL_detail) { var hjglDataDefectItem = new HJGLDataDefectItems(); hjglDataDefectItem.DefectNum = detail.DefectNum; hjglDataDefectItem.DefectName = detail.DefectName; hjglDataDefectItem.Id = detail.Id; list.Add(hjglDataDefectItem); } item.HJGLDataDefectItems = list; } } var hJGLDataItems = new List(); hJGLDataItems.Add(item); data.HJGLDataItems = hJGLDataItems; return data; } public static async Task GetTodayHJGLData_HJGLAsync() { var data = new HJGLData(); /* var q = GetTodayData(); if (q != null && q.State == Const.CNCEC_State_S) data = StatisticalData(); else data = StatisticalData();*/ var modelTask = StatisticalDataAsync(); var model = await modelTask; data = model; return data; } public static HJGLData_HJGL GetTodayData() { var q = (from x in Funs.DB.HJGLData_HJGL where x.ReportDate < DateTime.Now.AddDays(1).Date && x.ReportDate >= DateTime.Now.Date select x).FirstOrDefault(); return q; } public static HJGLData_HJGL GetSubUnitHjglDataByDate(string Unitid, DateTime? reportdate) { var result = new Model.HJGLData_HJGL(); if (reportdate == null) { return result; } var projectlist = BLL.ProjectService.GetProjectWorkList(Unitid); var baseUnit = UnitService.GetUnitByUnitId(Unitid); var ProjectData = (from x in Funs.DB.Project_HJGLData_HJGL where x.ReportDate == reportdate && projectlist.Select(e => e.ProjectId).Contains(x.ProjectId) select x).ToList(); result = new HJGLData_HJGL { UnitId = Unitid, CollCropCode = baseUnit.CollCropCode, UnitName = baseUnit.UnitName, ReportDate = DateTime.Now.Date, WelderNum = ProjectData.Sum(x => x.WelderNum), TotalDineNum = ProjectData.Sum(x => x.TotalDineNum), CompleteDineNum = ProjectData.Sum(x => x.CompleteDineNum), TotalFilmNum = ProjectData.Sum(x => x.TotalFilmNum), OKFilmNum = ProjectData.Sum(x => x.OKFilmNum), CreateMan = Const.sysglyId, CreateDate = DateTime.Now }; return result; } public static void UpdateTodyData_State() { var q = GetTodayData(); if (q != null) { q.State = Const.CNCEC_State_1; UpdateHJGLData_HJGL(q); } } public static bool IsReportByDate(DateTime dateTime) { var result = false; var q = (from x in Funs.DB.HJGLData_HJGL 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 bool IsReportByToday() { var result = false; var q = (from x in Funs.DB.HJGLData_HJGL where x.ReportDate < DateTime.Now.AddDays(1).Date && x.ReportDate >= DateTime.Now.Date select x).ToList(); if (q.Count > 0) result = true; return result; } public static ReturnData PushCncec(string Id) { var baseurl = "/api/HJGLData/SaveHJGLData"; var item = GetItemById(Id); var str = JsonConvert.SerializeObject(item); var responeData = ServerService.PushCNCEC(str, baseurl); return responeData; } public static HJGLData StatisticalData() { var data = new HJGLData(); var thisUnitId = string.Empty; var thisUnit = CommonService.GetIsThisUnit(); if (thisUnit != null) thisUnitId = thisUnit.UnitId; var baseUnit = UnitService.GetUnitByUnitId(thisUnitId); var ProjectData = (from x in Funs.DB.Project_HJGLData_HJGL where x.ReportDate < DateTime.Now.AddDays(1).Date && x.ReportDate >= DateTime.Now.Date select x).ToList(); Project_HJGLData_HJGLService.StatisticalAllProjectData(); Project_HJGLData_DefectService.StatisticalAllProjectData(); var table = new HJGLData_HJGL { UnitId = thisUnitId, CollCropCode = baseUnit.CollCropCode, UnitName = baseUnit.UnitName, ReportDate = DateTime.Now.Date, WelderNum = ProjectData.Sum(x => x.WelderNum), TotalDineNum = ProjectData.Sum(x => x.TotalDineNum), CompleteDineNum = ProjectData.Sum(x => x.CompleteDineNum), TotalFilmNum = ProjectData.Sum(x => x.TotalFilmNum), OKFilmNum = ProjectData.Sum(x => x.OKFilmNum), CreateMan = Const.sysglyId, CreateDate = DateTime.Now }; if (IsReportByToday()) { table.Id = GetTodayData().Id; table.State = Const.CNCEC_State_1; UpdateHJGLData_HJGL(table); } else { table.Id = SQLHelper.GetNewID(); table.State = Const.CNCEC_State_0; AddHJGLData_HJGL(table); } var item = new HJGLDataItem(); item.CollCropCode = table.CollCropCode; item.CompleteDineNum = table.CompleteDineNum; item.Id = table.Id; item.OKFilmNum = table.OKFilmNum; item.ReportDate = table.ReportDate.Value.ToShortDateString(); item.TotalDineNum = table.TotalDineNum; item.TotalFilmNum = table.TotalFilmNum; item.UnitId = table.UnitId; item.WelderNum = table.WelderNum; item.HJGLDataDefectItems = Project_HJGLData_DefectService.getTodayProject_HJGLData_Defect(); var hJGLDataItems = new List(); hJGLDataItems.Add(item); data.HJGLDataItems = hJGLDataItems; return data; } public static async Task StatisticalDataAsync() { var data = new HJGLData(); var thisUnitId = string.Empty; var thisUnit = CommonService.GetIsThisUnit(); if (thisUnit != null) thisUnitId = thisUnit.UnitId; var baseUnit = UnitService.GetUnitByUnitId(thisUnitId); Project_HJGLData_HJGLService.StatisticalAllProjectData(); Project_HJGLData_DefectService.StatisticalAllProjectData(); // 并行执行异步方法 var projectHJGLDataListTask = HJGLData_HJGLService.GetProjectHJGLDataAsync(); //获取焊接检查信息 //// 并行执行异步方法 //var welderNumTask = HJGLData_HJGLService.GetWelderNumAsync(); //获取焊工总数 //var dineInfoListTask = HJGLData_HJGLService.GetDineInfoAsync(); //获达因数信息 var chCheckItemListTask = HJGLData_HJGLService.GetCHCheckItemAsync(); //获取焊接检查信息 // 等待所有异步方法执行完成 await Task.WhenAll( projectHJGLDataListTask, //welderNumTask, //dineInfoListTask, chCheckItemListTask ); // 统一获取异步方法的返回值 var projectHJGLDataList = await projectHJGLDataListTask; //var welderNum = await welderNumTask; //var dineInfoList = await dineInfoListTask; var chCheckItemList = await chCheckItemListTask; var table = new HJGLData_HJGL { UnitId = thisUnitId, CollCropCode = baseUnit.CollCropCode, UnitName = baseUnit.UnitName, ReportDate = DateTime.Now.Date, WelderNum = projectHJGLDataList.Sum(x => x.WelderNum), TotalDineNum = projectHJGLDataList.Sum(x => x.TotalDineNum), CompleteDineNum = projectHJGLDataList.Sum(x => x.CompleteDineNum), //TotalFilmNum = projectHJGLDataList.Sum(x => x.TotalFilmNum), //OKFilmNum = projectHJGLDataList.Sum(x => x.OKFilmNum), //WelderNum = welderNum.Count(), //TotalDineNum = Convert.ToInt32(dineInfoList.Sum(x => x.Size)), //CompleteDineNum = Convert.ToInt32(dineInfoList.Sum(x => x.DoneDin)), TotalFilmNum = Convert.ToInt32(chCheckItemList.Sum(x => x.CHT_TotalFilm)), OKFilmNum = Convert.ToInt32(chCheckItemList.Sum(x => x.CHT_PassFilm)), CreateMan = Const.sysglyId, CreateDate = DateTime.Now }; //Project_HJGLData_HJGLService.DeleteProject_HJGLData_HJGLByDate(DateTime.Now.Date); //// 预先对 dineInfoList 和 chCheckItemList 按 ProjectId 进行分组 //var dineInfoDict = dineInfoList // .Where(x => BeUnderConstructionList.Contains(x.ProjectId)) // .GroupBy(x => x.ProjectId) // .ToDictionary(g => g.Key, g => new // { // TotalDineNum = g.Sum(x => x.Size), // CompleteDineNum = g.Sum(x => x.DoneDin) // }); //var chCheckItemDict = chCheckItemList // .Where(x => BeUnderConstructionList.Contains(x.ProjectId)) // .GroupBy(x => x.ProjectId) // .ToDictionary(g => g.Key, g => new // { // TotalFilmNum = g.Sum(x => x.CHT_TotalFilm), // OKFilmNum = g.Sum(x => x.CHT_PassFilm) // }); //foreach (var projectid in BeUnderConstructionList) //{ // // 获取焊工数量 // int welderCount = welderNum.Count(x => x.ProjectId == projectid); // // 获取达因信息 // var dineInfo = dineInfoDict.TryGetValue(projectid, out var dineData) // ? dineData // : new { TotalDineNum = (double?)0, CompleteDineNum = (double?)0 }; // // 获取拍片信息 // var chCheckItem = chCheckItemDict.TryGetValue(projectid, out var checkData) // ? checkData // : new { TotalFilmNum = (int?)0, OKFilmNum = (int?)0 }; // var projectCqmsData = new Project_HJGLData_HJGL() // { // Id = SQLHelper.GetNewID(), // ProjectId = projectid, // UnitId = thisUnitId, // CollCropCode = baseUnit.CollCropCode, // UnitName = baseUnit.UnitName, // ReportDate = DateTime.Now.Date, // WelderNum = welderCount, // TotalDineNum = Convert.ToInt32(dineInfo.TotalDineNum), // CompleteDineNum = Convert.ToInt32(dineInfo.CompleteDineNum), // TotalFilmNum = chCheckItem.TotalFilmNum, // OKFilmNum = chCheckItem.OKFilmNum, // }; // Project_HJGLData_HJGLService.AddProject_HJGLData_HJGL(projectCqmsData); //} if (IsReportByToday()) { table.Id = GetTodayData().Id; table.State = Const.CNCEC_State_1; UpdateHJGLData_HJGL(table); } else { table.Id = SQLHelper.GetNewID(); table.State = Const.CNCEC_State_0; AddHJGLData_HJGL(table); } var item = new HJGLDataItem(); item.CollCropCode = table.CollCropCode; item.CompleteDineNum = table.CompleteDineNum; item.Id = table.Id; item.OKFilmNum = table.OKFilmNum; item.ReportDate = table.ReportDate.Value.ToShortDateString(); item.TotalDineNum = table.TotalDineNum; item.TotalFilmNum = table.TotalFilmNum; item.UnitId = table.UnitId; item.WelderNum = table.WelderNum; item.HJGLDataDefectItems = Project_HJGLData_DefectService.getTodayProject_HJGLData_Defect(); var hJGLDataItems = new List(); hJGLDataItems.Add(item); data.HJGLDataItems = hJGLDataItems; return data; } public static void UpdateHJGLData_HJGL(HJGLData_HJGL newtable) { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { var table = db.HJGLData_HJGL.FirstOrDefault(x => x.Id == newtable.Id); if (table != null) { table.Id = newtable.Id; 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; table.State = newtable.State; table.CreateMan = newtable.CreateMan; table.CreateDate = newtable.CreateDate; db.SubmitChanges(); } } } /// /// 获取焊工总数 /// /// public static List GetWelderNum() { var result = (from x in Funs.DB.BS_Welder where BeUnderConstructionList.Contains(x.ProjectId) && x.WED_IfOnGuard == true select new Model.WelderOutput() { ProjectId = x.ProjectId, UnitId = x.WED_Unit, WEDCode = x.WED_Code, WEDName = x.WED_Name //UnitName = UnitService.getUnitNamesUnitIds(x.UnitIds), }).ToList(); return result; } /// /// 获取焊工总数(异步) /// /// public static async Task> GetWelderNumAsync() { return await Task.Run(GetWelderNum); } /// /// 获取总达因数和完成达因数 /// /// public static IEnumerable GetDineInfo() { var result = (from x in Funs.DB.HJGL_FL_TotalQuantity where BeUnderConstructionList.Contains(x.ProjectId) group x by x.ProjectId into g select new Model.WeldDineOutput() { ProjectId = g.Key, Size = g.Sum(x => Convert.ToDouble(x.TotalWeldQuantity)), DoneDin = g.Sum(x => Convert.ToDouble(x.TotalCompleted)) }); return result; } public static async Task> GetDineInfoAsync() { return await Task.Run(GetDineInfo); } /// /// 获取焊接检查信息 /// /// public static List GetCHCheckItem() { //var result = (from x in Funs.DB.CH_CheckItem // join y in Funs.DB.CH_Check on x.CHT_CheckID equals y.CHT_CheckID // where BeUnderConstructionList.Contains(y.ProjectId) // select new Model.CHCheckItemOutput() // { // Id = x.CHT_CheckItemID, // ProjectId = y.ProjectId, // UnitId = y.UnitId, // CHT_TotalFilm = x.CHT_TotalFilm, // CHT_PassFilm = x.CHT_PassFilm // //UnitName = UnitService.getUnitNamesUnitIds(x.UnitIds), // }).ToList(); List list = new List(); var ndtLists = (from x in Funs.DB.ProcessControl_NondestructiveTest_New where BeUnderConstructionList.Contains(x.ProjectId) select x).ToList(); if (ndtLists.Count() > 0) { //取每个项目、单位、专业最新的一条数据 var datalist = ndtLists.GroupBy(r => new { r.ProjectId, r.UnitId, r.ProfessionalName }).Select(g => g.OrderByDescending(r => r.CreateDate).First()).ToList(); foreach (var project in BeUnderConstructionList) { decimal a = 0, b = 0; var projectDataList = datalist.Where(x => x.ProjectId == project); foreach (var item in projectDataList) { if (item.TotalQuantity.HasValue) { a += Math.Floor(item.TotalQuantity.Value * Funs.GetNewDecimalOrZero(item.TotalRate) / 100); b += item.TotalQuantity.Value; } } list.Add(new CHCheckItemOutput { Id = project, ProjectId = project, //UnitId = y.UnitId, CHT_TotalFilm = (int)Math.Round(b), CHT_PassFilm = (int)Math.Round(a) }); } } return list; } /// /// 获取焊接检查信息(异步) /// /// public static async Task> GetCHCheckItemAsync() { return await Task.Run(GetCHCheckItem); } /// /// 获取项目焊接信息 /// /// public static List GetProjectHJGLData() { var result = (from x in Funs.DB.Project_HJGLData_HJGL where BeUnderConstructionList.Contains(x.ProjectId) && x.ReportDate < DateTime.Now.AddDays(1).Date && x.ReportDate >= DateTime.Now.Date select x).ToList(); return result; } /// /// 获取项目焊接信息(异步) /// /// public static async Task> GetProjectHJGLDataAsync() { return await Task.Run(GetProjectHJGLData); } } }