using FineUIPro; using Model; using System; using System.Collections.Generic; using System.Linq; namespace BLL { public class SitePerson_DayReportService { /// /// 获取工作日报信息 /// /// 工作日报Id /// public static Model.SitePerson_DayReport GetDayReportByDayReportId(string dayReportId) { return Funs.DB.SitePerson_DayReport.FirstOrDefault(x => x.DayReportId == dayReportId); } /// /// 增加工作日报信息 /// /// 工作日报实体 public static void AddDayReport(Model.SitePerson_DayReport dayReport) { Model.SUBQHSEDB db = Funs.DB; Model.SitePerson_DayReport newDayReport = new Model.SitePerson_DayReport { DayReportId = dayReport.DayReportId, ProjectId = dayReport.ProjectId, CompileMan = dayReport.CompileMan, CompileDate = dayReport.CompileDate, States = dayReport.States }; db.SitePerson_DayReport.InsertOnSubmit(newDayReport); db.SubmitChanges(); ////增加一条编码记录 BLL.CodeRecordsService.InsertCodeRecordsByMenuIdProjectIdUnitId(BLL.Const.DayReportMenuId, dayReport.ProjectId, null, dayReport.DayReportId, dayReport.CompileDate); } /// /// 修改工作日报信息 /// /// 工作日报实体 public static void UpdateDayReport(Model.SitePerson_DayReport dayReport) { Model.SUBQHSEDB db = Funs.DB; Model.SitePerson_DayReport newDayReport = db.SitePerson_DayReport.First(e => e.DayReportId == dayReport.DayReportId); newDayReport.ProjectId = dayReport.ProjectId; newDayReport.CompileMan = dayReport.CompileMan; newDayReport.CompileDate = dayReport.CompileDate; newDayReport.States = dayReport.States; db.SubmitChanges(); } /// /// 根据工作日报主键删除一个工作日报信息 /// /// 工作日报主键 public static void DeleteDayReportByDayReportId(string dayReportId) { Model.SUBQHSEDB db = Funs.DB; Model.SitePerson_DayReport dayReport = db.SitePerson_DayReport.FirstOrDefault(e => e.DayReportId == dayReportId); if (dayReport != null) { ///删除编码表记录 BLL.CodeRecordsService.DeleteCodeRecordsByDataId(dayReportId); BLL.CommonService.DeleteFlowOperateByID(dayReportId); db.SitePerson_DayReport.DeleteOnSubmit(dayReport); db.SubmitChanges(); } } /// /// 判断人工月报是否存在 /// /// /// /// true 存在;false:不存在 public static bool IsExistDayReport(DateTime compileDate, string projectId) { var q = from x in Funs.DB.SitePerson_DayReport where x.CompileDate == compileDate && x.ProjectId == projectId select x; if (q.Count() > 0) { return true; } else { return false; } } /// /// 根据时间获取工作日报信息 /// /// 开始时间 /// 结束时间 /// 工作日报信息 public static List GetDayReportsByCompileDate(DateTime startTime, DateTime endTime, string projectId) { return (from x in Funs.DB.SitePerson_DayReport where x.CompileDate >= startTime && x.CompileDate < endTime && x.ProjectId == projectId && x.States == BLL.Const.State_2 select x).ToList(); } /// /// 根据时间获取工作日报信息 /// /// 开始时间 /// 结束时间 /// 工作日报信息 public static List GetDayReportsByCompileDate2(DateTime startTime, string projectId) { return (from x in Funs.DB.SitePerson_DayReport where x.CompileDate >= startTime && x.ProjectId == projectId && x.States == BLL.Const.State_2 select x).ToList(); } /// /// 获取工作日报信息 /// /// 开始时间 /// 结束时间 /// 工作日报信息 public static List GetDayReports(string projectId) { return (from x in Funs.DB.SitePerson_DayReport where x.ProjectId == projectId && x.States == BLL.Const.State_2 select x).ToList(); } /// /// 根据时间获取工作日报信息 /// /// 开始时间 /// 结束时间 /// 工作日报信息 public static List GetDayReportsByCompileDateAndUnitId(DateTime startTime, DateTime endTime, string projectId, string unitId) { using (Model.SUBQHSEDB db = new Model.SUBQHSEDB(Funs.ConnString)) { return (from x in db.SitePerson_DayReport join y in db.SitePerson_DayReportDetail on x.DayReportId equals y.DayReportId where x.CompileDate >= startTime && x.CompileDate < endTime && x.ProjectId == projectId && x.States == BLL.Const.State_2 && y.UnitId == unitId select x).Distinct().ToList(); } } /// /// 获取出入记录人工时 /// /// public static List getDayReports(string projectId, DateTime? sDate) { Model.SUBQHSEDB db = Funs.DB; List reports = new List(); var getAllPersonInOutList = from x in db.SitePerson_PersonInOutNumber where x.ProjectId == projectId select x; if (getAllPersonInOutList.Count() > 0) { var getInOutDates = getAllPersonInOutList.Select(x => x.InOutDate); if (sDate.HasValue) { getInOutDates = getInOutDates.Where(x => x.Year == sDate.Value.Year && x.Month == sDate.Value.Month && x.Day == sDate.Value.Day); } foreach (var item in getInOutDates) { var getNow = getAllPersonInOutList.FirstOrDefault(x => x.InOutDate.Year == item.Year && x.InOutDate.Month == item.Month && x.InOutDate.Day == item.Day); if (getNow != null) { Model.SitePerson_DayReport reportItem = new Model.SitePerson_DayReport { DayReportId = SQLHelper.GetNewID(), ProjectId = projectId, CompileDate = item, TotalPersonWorkTime = getNow.WorkHours, }; var getMax = getAllPersonInOutList.Where(x => x.InOutDate < item).Max(x => x.WorkHours) ?? 0; reportItem.DayWorkTime = (getNow.WorkHours ?? 0) - getMax; reports.Add(reportItem); } } } return reports; } /// /// 获取当月时间汇总 /// /// public static List getMonthChart() { Model.SUBQHSEDB db = Funs.DB; var sDate = DateTime.Now.AddMonths(-6); var eDate = DateTime.Now; var sitePerson = db.SitePerson_DayReport .Where(c => c.CompileDate >= sDate && c.CompileDate <= eDate) .Select(c => new { c.DayReportId, c.CompileDate, PersonWorkTime = db.SitePerson_DayReportDetail.Where(x => x.DayReportId == c.DayReportId).Sum(x => x.PersonWorkTime), TotalPersonWorkTime = db.SitePerson_DayReportDetail.Where(x => x.DayReportId == c.DayReportId).Sum(x => x.TotalPersonWorkTime) }).ToList(); return sitePerson.GroupBy(c => new { c.CompileDate.Value.Year, c.CompileDate.Value.Month }).Select(c => new { Date = c.Key.Year + "-" + c.Key.Month, DayWorkTime = c.Sum(t => t.PersonWorkTime), TotalPersonWorkTime = c.Sum(t => t.TotalPersonWorkTime), }).ToList(); } public static void SyncReport(string projectid) { var db = Funs.DB; var datetime = DateTime.Now.ToString(); var dataStart = DateTime.Now.ToString("yyyy-MM-dd 00:00:00"); var dataEnd = DateTime.Now.ToString("yyyy-MM-dd 23:59:59"); //1.根据日期获取当天所有考勤 //var resultList = db.SitePerson_PersonInOut.Where(x => x.ProjectId == projectid && x.ChangeTime >= Convert.ToDateTime(dataStart) //&& x.ChangeTime <= Convert.ToDateTime(dataEnd)).ToList(); var resultList = db.SitePerson_Person.Where(x => x.ProjectId == projectid && x.IsUsed==true).ToList(); //添加到人工时日报 if (resultList.Count > 0) { //resultList人员去重 resultList = resultList.GroupBy(x => x.IdentityCard).Select(item => item.First()).ToList(); #region 人工时日报 var q =( from x in Funs.DB.SitePerson_DayReport where x.CompileDate.Value.Date == DateTime.Now.Date && x.ProjectId == projectid select x).FirstOrDefault(); if (q!=null) { SitePerson_DayReportDetailService.DeleteDayReportDetailsByDayReportId(q.DayReportId); DeleteDayReportByDayReportId(q.DayReportId); } var DayReportId = SQLHelper.GetNewID(typeof(Model.SitePerson_DayReport)); Model.SitePerson_DayReport newDayReport = new Model.SitePerson_DayReport { DayReportId = DayReportId, ProjectId = projectid, CompileDate = DateTime.Now, States = BLL.Const.State_0 //待提交 }; if (!string.IsNullOrEmpty(datetime)) { newDayReport.CompileDate = Convert.ToDateTime(DateTime.Now); } BLL.SitePerson_DayReportService.AddDayReport(newDayReport); var units = from x in Funs.DB.Project_ProjectUnit where x.ProjectId == projectid && (x.UnitType == BLL.Const.ProjectUnitType_1 || x.UnitType == BLL.Const.ProjectUnitType_2 || x.UnitType == BLL.Const.ProjectUnitType_0) select x; //1为总包,2为施工分包 0为其他 if (units.Count() > 0) { foreach (var item in units) { var d = DateTime.Now.Date; if (!string.IsNullOrEmpty(datetime)) { d = Convert.ToDateTime(datetime).Date; } if (item.OutTime == null || item.OutTime >= d) { Model.SitePerson_DayReportDetail newDayReportDetail = new Model.SitePerson_DayReportDetail(); string newKeyID = SQLHelper.GetNewID(typeof(Model.SitePerson_DayReportDetail)); newDayReportDetail.DayReportDetailId = newKeyID; newDayReportDetail.DayReportId = DayReportId; newDayReportDetail.UnitId = item.UnitId; newDayReportDetail.WorkTime = 10; //根据unitid获取实际人数 var RealPersonNum = resultList.Where(x => x.UnitId == item.UnitId).Count() ; if (RealPersonNum > 0) { newDayReportDetail.RealPersonNum = RealPersonNum ; newDayReportDetail.PersonWorkTime = 10 * RealPersonNum; }else { newDayReportDetail.RealPersonNum = 0; newDayReportDetail.PersonWorkTime = 0; } //newDayReportDetail.StaffData = this.GetStaffData(item.UnitId, item.UnitType, compileDate.Value); BLL.SitePerson_DayReportDetailService.AddDayReportDetail(newDayReportDetail); var posts = (from x in Funs.DB.Base_WorkPost join y in Funs.DB.SitePerson_Person on x.WorkPostId equals y.WorkPostId where y.UnitId == item.UnitId && y.ProjectId == projectid orderby x.WorkPostCode select x).Distinct().ToList(); foreach (var postItem in posts) { Model.SitePerson_DayReportUnitDetail newDayReportUnitDetail = new Model.SitePerson_DayReportUnitDetail { DayReportDetailId = newKeyID, PostId = postItem.WorkPostId, CheckPersonNum = GetCheckingCout(postItem.WorkPostId, DateTime.Now, projectid) }; if (!string.IsNullOrEmpty(datetime)) { newDayReportUnitDetail.CheckPersonNum = GetCheckingCout(postItem.WorkPostId, Convert.ToDateTime(datetime), projectid); } newDayReportUnitDetail.RealPersonNum = newDayReportUnitDetail.CheckPersonNum; newDayReportUnitDetail.PersonWorkTime = newDayReportUnitDetail.RealPersonNum * newDayReportDetail.WorkTime; BLL.SitePerson_DayReportUnitDetailService.AddDayReportUnitDetail(newDayReportUnitDetail); } } } } #endregion } } #region 得到当前岗位考勤人数 /// /// 得到当前岗位考勤人数 /// /// /// private static int GetCheckingCout(string workPostId, DateTime txtCompileDate, string projectid) { int count = 0; DateTime? nowMont = txtCompileDate; if (nowMont.HasValue) { var checks = from x in Funs.DB.SitePerson_Checking join y in Funs.DB.SitePerson_Person on x.PersonId equals y.PersonId join z in Funs.DB.Base_WorkPost on y.WorkPostId equals z.WorkPostId where x.IntoOutTime > nowMont.Value.AddDays(-1) && x.IntoOutTime < nowMont.Value.AddDays(1) && y.ProjectId == projectid && z.WorkPostId == workPostId select x; count = checks.Count(); } return count; } #endregion } }