using FineUIPro; using Model; using Newtonsoft.Json; 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 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_DefectService.StatisticalAllProjectData(); // 并行执行异步方法 var welderNumTask = HJGLData_HJGLService.GetWelderNumAsync(); //获取焊工总数 var dineInfoListTask = HJGLData_HJGLService.GetDineInfoAsync(); //获达因数信息 var chCheckItemListTask = HJGLData_HJGLService.GetCHCheckItemAsync(); //获取焊接检查信息 // 等待所有异步方法执行完成 await Task.WhenAll( welderNumTask, dineInfoListTask, chCheckItemListTask ); // 统一获取异步方法的返回值 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 = 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(); return result; } /// /// 获取焊接检查信息(异步) /// /// public static async Task> GetCHCheckItemAsync() { return await Task.Run(GetCHCheckItem); } } }