using System.Collections.Generic; using System.Linq; using System; namespace BLL { public static class APIPageDataService { #region 获取当前人数 /// /// 获取当前人数 /// /// 项目ID /// public static List getPersonNum(string projectId, DateTime dateValue) { 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()) { getSiteInOutList = getInMaxs.Where(x => x.IsIn == true).ToList(); } } return getSiteInOutList; } } 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(); 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 && x.ChangeTime < endDate select new { x.PersonId, x.ChangeTime, x.IsIn, z.PostType,x.ProjectId }; if (getDayAll.Any()) { var getInMaxs = from x in getDayAll group x by new {x.PersonId,x.ProjectId} into g select new Model.PageDataPersonInOutItem { PersonId = g.First().PersonId, ProjectId = g.First().ProjectId, ChangeTime = g.Max(x => x.ChangeTime), IsIn = g.First().IsIn, PostType = g.First().PostType }; if (getInMaxs.Any()) { getSiteInOutList = getInMaxs.Where(x => x.IsIn == true).ToList(); } } return getSiteInOutList; } } #endregion #region 获取当前人工时 /// /// 获取当前人工时 /// /// 项目ID /// public static int getSafeHours(string projectId) { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { int safeHours = 0; var getPersonInOutNumber = db.SitePerson_PersonInOutNumber.FirstOrDefault(x => x.ProjectId == projectId && x.InOutDate.Year == DateTime.Now.Year && x.InOutDate.Month == DateTime.Now.Month && x.InOutDate.Day == DateTime.Now.Day); if (getPersonInOutNumber != null) { //// 获取工时 safeHours = getPersonInOutNumber.WorkHours ?? 0; } else { safeHours = getSafeWorkTime(projectId); } return safeHours; } } #endregion /// /// 获取当前人工时 /// /// public static int getSafeWorkTime(string projectId) { Model.SGGLDB db = Funs.DB; int SafeHours = 0; //// 查找当前项目 最新的人工时数量记录 int getMaxWorkHours = db.SitePerson_PersonInOutNumber.Where(x => x.ProjectId == projectId).Max(x => x.WorkHours) ?? 0; var getAllPersonInOutList = from x in db.SitePerson_PersonInOutNow where x.ProjectId == projectId && x.ChangeTime.Value.Year == DateTime.Now.Year && x.ChangeTime.Value.Month == DateTime.Now.Month && x.ChangeTime.Value.Day == DateTime.Now.Day select x; var getPersonOutTimes = getAllPersonInOutList.Where(x => x.IsIn == false); var getInLists = getAllPersonInOutList.Where(x => x.IsIn == true); if (getPersonOutTimes.Count() > 0) { List personIdList = new List(); foreach (var item in getPersonOutTimes) { var getMaxInTime = getInLists.Where(x => x.ChangeTime < item.ChangeTime && x.PersonId == item.PersonId && x.ChangeTime.Value.AddDays(1) >= item.ChangeTime).Max(x => x.ChangeTime); if (getMaxInTime.HasValue) { SafeHours += Convert.ToInt32((item.ChangeTime - getMaxInTime).Value.TotalMinutes); } else { personIdList.Add(item.PersonId); } } if (personIdList.Count() > 0) { SafeHours += (personIdList.Distinct().Count() * 8 * 60); } } SafeHours = Convert.ToInt32((SafeHours) * 1.0 / 60) + getMaxWorkHours; return SafeHours; } #region 获取日进场人数 /// /// 获取当前人数 /// /// 项目ID /// public static int getPersonInNowNum(string projectId, DateTime dateValue) { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { var getDayAll = from x in db.SitePerson_PersonInOutNow where x.ProjectId == projectId && x.ChangeTime.Value.Year == dateValue.Year && x.ChangeTime.Value.Month == dateValue.Month && x.ChangeTime.Value.Day == dateValue.Day && x.IsIn == true select x; return getDayAll.Select(x => x.PersonId).Distinct().Count(); ; } } #endregion #region 获取当前现场人数 /// /// 获取当前现场人数 /// /// public static List getPersonNumByCompany(DateTime dateValue) { 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.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()) { getSiteInOutList = getInMaxs.Where(x => x.IsIn == true).ToList(); } } return getSiteInOutList; } } public static List getPersonNumByCompany(DateTime dateValue,string[] pids) { 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.ChangeTime.Value.Year == dateValue.Year && x.ChangeTime.Value.Month == dateValue.Month && x.ChangeTime.Value.Day == dateValue.Day && pids.Contains(x.ProjectId) 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()) { getSiteInOutList = getInMaxs.Where(x => x.IsIn == true).ToList(); } } return getSiteInOutList; } } #endregion } }