diff --git a/SGGL/BLL/API/HSSE/APIPageDataService.cs b/SGGL/BLL/API/HSSE/APIPageDataService.cs index 236b0786..596dfd88 100644 --- a/SGGL/BLL/API/HSSE/APIPageDataService.cs +++ b/SGGL/BLL/API/HSSE/APIPageDataService.cs @@ -16,49 +16,56 @@ namespace BLL { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { - List getSiteInOutList = new List(); - var getDayAll = from x in db.SitePerson_PersonInOutNow - join y in db.SitePerson_Person on x.PersonId equals y.PersonId - join z in db.Base_WorkPost on y.WorkPostId equals z.WorkPostId - where x.ProjectId == projectId - && x.ChangeTime.Value.Year == dateValue.Year - && x.ChangeTime.Value.Month == dateValue.Month - && x.ChangeTime.Value.Day == dateValue.Day - select new { x.PersonId, x.ChangeTime, x.IsIn, z.PostType }; - if (getDayAll.Any()) - { - var getInMaxs = from x in getDayAll - group x by x.PersonId into g - select new Model.PageDataPersonInOutItem - { - PersonId = g.First().PersonId, - ChangeTime = g.Max(x => x.ChangeTime), - IsIn = g.First().IsIn, - PostType = g.First().PostType - }; - if (getInMaxs.Any()) + var startDate = dateValue.Date; + var endDate = startDate.AddDays(1); + var query = + from x in db.SitePerson_PersonInOutNow + where x.ChangeTime >= startDate && x.ChangeTime < endDate && x.ProjectId == projectId + group x by new { x.PersonId, x.ProjectId } into g + select new + { + g.Key.PersonId, + g.Key.ProjectId, + MaxChangeTime = g.Max(x => x.ChangeTime) + }; + var finalQuery = + from record in query + join detail in db.SitePerson_PersonInOutNow + on new { record.PersonId, record.ProjectId, record.MaxChangeTime } + equals new { detail.PersonId, detail.ProjectId, MaxChangeTime = detail.ChangeTime } + join y in db.SitePerson_Person on record.PersonId equals y.PersonId + join z in db.Base_WorkPost on y.WorkPostId equals z.WorkPostId + where detail.IsIn == true + select new Model.PageDataPersonInOutItem { - getSiteInOutList = getInMaxs.Where(x => x.IsIn == true).ToList(); - } - } - return getSiteInOutList; + PersonId = record.PersonId, + ProjectId = record.ProjectId, + ChangeTime = record.MaxChangeTime, + IsIn = true, + PostType = z.PostType + }; + + return finalQuery.ToList(); } } public static List getPersonNum(List projectIds, DateTime dateValue) { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) - { + { var startDate = dateValue.Date; var endDate = startDate.AddDays(1); - List getSiteInOutList = new List(); + /* List getSiteInOutList = new List(); var getDayAll = from x in db.SitePerson_PersonInOutNow join y in db.SitePerson_Person on x.PersonId equals y.PersonId join z in db.Base_WorkPost on y.WorkPostId equals z.WorkPostId - where projectIds.Contains(x.ProjectId) - && x.ChangeTime >= startDate && + where x.ChangeTime >= startDate && x.ChangeTime < endDate select new { x.PersonId, x.ChangeTime, x.IsIn, z.PostType,x.ProjectId }; + if (projectIds.Any()) + { + getDayAll= getDayAll.Where(x => projectIds.Contains(x.ProjectId)); + } if (getDayAll.Any()) { var getInMaxs = from x in getDayAll @@ -71,12 +78,43 @@ namespace BLL IsIn = g.First().IsIn, PostType = g.First().PostType }; - if (getInMaxs.Any()) + getSiteInOutList = getInMaxs.Where(x => x.IsIn == true).ToList(); + + }*/ + + var query = + from x in db.SitePerson_PersonInOutNow + where x.ChangeTime >= startDate && x.ChangeTime < endDate + group x by new { x.PersonId, x.ProjectId } into g + select new { - getSiteInOutList = getInMaxs.Where(x => x.IsIn == true).ToList(); - } - } - return getSiteInOutList; + g.Key.PersonId, + g.Key.ProjectId, + MaxChangeTime = g.Max(x => x.ChangeTime) + }; + + if (projectIds.Any()) + { + query = query.Where(x => projectIds.Contains(x.ProjectId)); + } + var finalQuery = + from record in query + join detail in db.SitePerson_PersonInOutNow + on new { record.PersonId, record.ProjectId, record.MaxChangeTime } + equals new { detail.PersonId, detail.ProjectId, MaxChangeTime = detail.ChangeTime } + join y in db.SitePerson_Person on record.PersonId equals y.PersonId + join z in db.Base_WorkPost on y.WorkPostId equals z.WorkPostId + where detail.IsIn == true + select new Model.PageDataPersonInOutItem + { + PersonId= record.PersonId, + ProjectId = record.ProjectId, + ChangeTime = record.MaxChangeTime, + IsIn = true, + PostType = z.PostType + }; + + return finalQuery.ToList(); } } @@ -210,16 +248,17 @@ namespace BLL { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { + DateTime dt1 = dateValue.Date; + DateTime dt2= dateValue.Date.AddDays(1); List getSiteInOutList = new List(); var getDayAll = from x in db.SitePerson_PersonInOutNow join y in db.SitePerson_Person on x.PersonId equals y.PersonId join z in db.Base_WorkPost on y.WorkPostId equals z.WorkPostId - where x.ChangeTime.Value.Year == dateValue.Year && x.ChangeTime.Value.Month == dateValue.Month - && x.ChangeTime.Value.Day == dateValue.Day && pids.Contains(x.ProjectId) + where pids.Contains(x.ProjectId) && x.ChangeTime<= dt2 && x.ChangeTime>= dt1 select new { x.PersonId, x.ChangeTime, x.IsIn, z.PostType }; if (getDayAll.Any()) { - var getInMaxs = from x in getDayAll + var getInMaxs = from x in getDayAll.ToList() group x by x.PersonId into g select new Model.PageDataPersonInOutItem { diff --git a/SGGL/FineUIPro.Web/common/main_new.aspx.cs b/SGGL/FineUIPro.Web/common/main_new.aspx.cs index 9291f8f8..6187f01e 100644 --- a/SGGL/FineUIPro.Web/common/main_new.aspx.cs +++ b/SGGL/FineUIPro.Web/common/main_new.aspx.cs @@ -39,7 +39,7 @@ namespace FineUIPro.Web.common GetHjAsync(), // 焊接 GetGjsxAsync(), // 关键事项 GetSitePersonAsync(), // 人员信息 - GetProjectSitePersonAsync(), // 项目人员图表 + //GetProjectSitePersonAsync(), // 项目人员图表 GetJdAsync(), // 进度 GetZgsjAsync(), // 整改数据 GetCldhAsync() // 材料到货表格 @@ -58,11 +58,11 @@ namespace FineUIPro.Web.common { var db = Funs.DB; pids = !string.IsNullOrEmpty(CurrUser.CompanyProjectId) - ? CurrUser.CompanyProjectId.Split(',') - : db.Base_Project - .Where(x => x.ProjectState == "1") - .Select(x => x.ProjectId) - .ToArray(); + ? CurrUser.CompanyProjectId.Split(',') + : db.Base_Project + .Where(x => x.ProjectState == "1") + .Select(x => x.ProjectId) + .ToArray(); //在建项目 if (pids == null) { @@ -112,7 +112,7 @@ namespace FineUIPro.Web.common else { this.divSafeWorkTimeMonth.InnerHtml = countMonthAqrgs.ToString().Split('.')[0]; - } + } // 安全培训人员(合并数据库查询) var trainingQuery = db.EduTrain_TrainRecord .Where(x => pids.Contains(x.ProjectId)) @@ -128,7 +128,7 @@ namespace FineUIPro.Web.common divSafePersonNum.InnerHtml = trainingQuery != null ? (trainingQuery.TrainCount + trainingQuery.BoShengCount).ToString() - : "0"; + : "0"; @@ -137,12 +137,12 @@ namespace FineUIPro.Web.common .Where(x=> x.IsUsed == true && x.InTime < DateTime.Now && (x.OutTime == null || x.OutTime > DateTime.Now)) .Where(x => pids.Contains(x.ProjectId)) .Join(db.Base_WorkPost.Where(x => x.IsHsse==true), - person => person.WorkPostId, - post => post.WorkPostId, - (person, post) => person) + person => person.WorkPostId, + post => post.WorkPostId, + (person, post) => person) .Count(); divSafeManagePersonNum.InnerText = safetyStaffCount.ToString(); - }); + }); } // 质量统计模块封装 private async Task BindQualityStatisticsAsync() @@ -150,21 +150,21 @@ namespace FineUIPro.Web.common await Task.Run(() => { var db = Funs.DB; - // 质量管理人员(合并公司+项目级查询) - var qualityQuery = db.Base_WorkPost - .Where(x => x.IsCQMS == true) + // 质量管理人员(合并公司+项目级查询) + var qualityQuery = db.Base_WorkPost + .Where(x => x.IsCQMS == true) .GroupJoin(db.SitePerson_Person.Where(x=> x.IsUsed == true), - post => post.WorkPostId, - person => person.WorkPostId, - (post, persons) => new { post, persons }) - .SelectMany(x => x.persons.DefaultIfEmpty(), + post => post.WorkPostId, + person => person.WorkPostId, + (post, persons) => new { post, persons }) + .SelectMany(x => x.persons.DefaultIfEmpty(), (x, person) => new { x.post, person }) .Where(x => pids.Contains(x.person.ProjectId)); - divCqmsManageNum.InnerText = qualityQuery.Count().ToString(); - // 质量培训人员 + divCqmsManageNum.InnerText = qualityQuery.Count().ToString(); + // 质量培训人员 divCqmsPxNum.InnerText = db.Comprehensive_InspectionPerson .Where(x => pids.Contains(x.ProjectId)) - .Count(x => x.IsTrain == true).ToString(); + .Count(x => x.IsTrain == true).ToString(); }); } // 项目统计优化 @@ -178,16 +178,16 @@ namespace FineUIPro.Web.common int pcount3 = 0; if (acount > 0) { - pcount1 = allProjects.Where(x => x.ProjectState == Const.ProjectState_1 || x.ProjectState == null).Count(); + pcount1 = allProjects.Where(x => x.ProjectState == Const.ProjectState_1 || x.ProjectState == null).Select( x => x.ProjectId).Count(); var pidzjsg = string.Join(",", allProjects.Where(x => x.ProjectState == Const.ProjectState_1 || x.ProjectState == null).Select(x => x.ProjectId)).Split(','); if (pids == null) { - pcount2 = (from x in Funs.DB.SitePerson_Person where x.IsUsed == true && pidzjsg.Contains(x.ProjectId) select x).Count(); + pcount2 = (from x in Funs.DB.SitePerson_Person where x.IsUsed == true && pidzjsg.Contains(x.ProjectId) select x.ProjectId).Count(); } else { pidzjsg = pids; - pcount2 = (from x in Funs.DB.SitePerson_Person where x.IsUsed == true && pids.Contains(x.ProjectId) select x).Count(); + pcount2 = (from x in Funs.DB.SitePerson_Person where x.IsUsed == true && pids.Contains(x.ProjectId) select x.ProjectId).Count(); } pcount3 = Count3(pidzjsg); } @@ -238,7 +238,7 @@ namespace FineUIPro.Web.common var datetime2 = d2; var getAllPersonInOutList = from x in Funs.DB.SitePerson_PersonInOutNumber - select x; + select new { x.ProjectId, x.InOutDate, x.WorkHours }; if (pids != null) { getAllPersonInOutList = getAllPersonInOutList.Where(x => pids.Contains(x.ProjectId)); @@ -353,7 +353,7 @@ namespace FineUIPro.Web.common return await Task.Run(() => { Model.SingleSerie series = new Model.SingleSerie(); - var project1s = allProjects.Where(x => x.ProjectState == Const.ProjectState_1 || x.ProjectState == null).ToList(); + var project1s = allProjects.Where(x => x.ProjectState == Const.ProjectState_1 || x.ProjectState == null).Select(x=> new { x.ProjectId, x.ProjectName, x.ProjectState2, x.Province, x.ShortName }).ToList(); var consts = Funs.DB.Sys_Const.Where(x => x.GroupId == ConstValue.GroupId_ProjectState).ToList(); string name = string.Empty; if (project1s.Any()) @@ -421,11 +421,11 @@ namespace FineUIPro.Web.common var accidentList1 = from x in db.Accident_AccidentPersonRecord join y in db.Base_AccidentType on x.AccidentTypeId equals y.AccidentTypeId where y.AccidentTypeName.Contains("未遂") - select x; + select new { x.ProjectId, x.AccidentDate } ; var accidentList2 = from x in db.Accident_AccidentReportOther join y in db.Sys_Const on x.AccidentTypeId equals y.ConstValue where y.ConstText.Contains("未遂") - select x; + select new { x.ProjectId, x.AccidentDate }; var allProvinceProjectList = (from x in allProjects join y in provinceDic on x.Province equals y.ProvinceCode where provinces.Contains(y.CnShortName ) @@ -640,7 +640,7 @@ namespace FineUIPro.Web.common protected int Count3(string[] pids) { int cout1 = 0; - cout1 = Funs.DB.Solution_LargerHazard.Where(x => x.States == Const.State_2 && pids.Contains(x.ProjectId)).Count(); + cout1 = Funs.DB.Solution_LargerHazard.Count(x => x.States == Const.State_2 && pids.Contains(x.ProjectId)); return cout1; } #endregion @@ -872,11 +872,11 @@ namespace FineUIPro.Web.common var getallin = new List(); if (pids == null) { - getallin = APIPageDataService.getPersonNumByCompany(DateTime.Now); + getallin = APIPageDataService.getPersonNum(new List(),DateTime.Now); } else { - getallin = APIPageDataService.getPersonNumByCompany(DateTime.Now, pids); + getallin = APIPageDataService.getPersonNum(pids.ToList(), DateTime.Now); } AllCount = getallin.Count(); if (AllCount > 0) @@ -887,6 +887,15 @@ namespace FineUIPro.Web.common div_xcrs.InnerHtml = AllCount.ToString(); div_zyxcrs.InnerHtml = (AllCount - MCount).ToString(); div_glxcrs.InnerHtml = MCount.ToString(); + + //项目现场人员统计 + foreach (var item in allProjects) + { + ProjectPersonMc += "'" + item.ShortName + "',"; + ProjectPersonCount += "'" + getallin.Count(x => x.ProjectId == item.ProjectId) + "',"; + } + ProjectPersonMc = ProjectPersonMc.TrimEnd(','); + ProjectPersonCount = ProjectPersonCount.TrimEnd(','); }); } #endregion @@ -937,10 +946,16 @@ namespace FineUIPro.Web.common #region 整改数据 protected async Task GetZgsjAsync() { - div_zgsj.InnerHtml = (GetGeneralClosedNum() + GetGeneralNotClosedNum()).ToString(); - div_zgywc.InnerHtml = GetGeneralClosedNum().ToString(); - div_zgwwc.InnerHtml = GetGeneralNotClosedNum().ToString(); - div_zgwcl.InnerHtml = (100.0 * GetGeneralClosedNum() / (GetGeneralNotClosedNum() + GetGeneralClosedNum())).ToString("0.##") + "%"; + await Task.Run(() => + { + int GeneralClosedNum = GetGeneralClosedNum(); + int GeneralNotClosedNum = GetGeneralNotClosedNum(); + div_zgsj.InnerHtml = (GeneralClosedNum + GeneralNotClosedNum).ToString(); + div_zgywc.InnerHtml = GeneralClosedNum.ToString(); + div_zgwwc.InnerHtml = GeneralNotClosedNum.ToString(); + div_zgwcl.InnerHtml = (100.0 * GeneralClosedNum / (GeneralNotClosedNum + GeneralClosedNum)).ToString("0.##") + "%"; + }); + } ///