using Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BLL { /// /// 事故类型 /// public static class DoorServerService { public static Model.SUBQHSEDB db = Funs.DB; /// /// 根据主键获取事故类型 /// /// /// public static Model.T_d_EmployInOutRecord GetEmployInOutRecordById(string id) { return Funs.DB.T_d_EmployInOutRecord.FirstOrDefault(e => e.NewID == id); } #region 根据出入记录 写入考勤记录 /// /// 根据出入记录 写入考勤记录 /// public static void InsertEmployInOutRecord(Model.SitePerson_PersonInOut newInOut) { using (Model.SUBQHSEDB db = new Model.SUBQHSEDB(Funs.ConnString)) { if (newInOut.ChangeTime.HasValue) { Model.T_d_EmployInOutRecord newInOutRecord = new Model.T_d_EmployInOutRecord { NewID = SQLHelper.GetNewID(), ProjectId = newInOut.ProjectId, InstallationName = ProjectService.GetProjectNameByProjectId(newInOut.ProjectId), RecordDate = newInOut.ChangeTime.Value.Date, IDCardNo = newInOut.IdentityCard, }; ////获取人员 newInOutRecord.UnitId = newInOut.UnitId; newInOutRecord.UnitName = newInOut.UnitName; newInOutRecord.EmployNO = newInOut.IdentityCard; newInOutRecord.EmployName = newInOut.PersonName; newInOutRecord.PostId = newInOut.WorkPostId; newInOutRecord.PostName = newInOut.WorkPostName; #region 上下班时间 ///上午上班 8 DateTime TWorkIn1 = newInOut.ChangeTime.Value.Date.AddHours(8); ///上午下班 12:30 DateTime TOffDuty1 = newInOut.ChangeTime.Value.Date.AddHours(12).AddMinutes(30); ///下午上班 1:30 DateTime TWorkIn2 = newInOut.ChangeTime.Value.Date.AddHours(13).AddMinutes(30); ///下午下班 7 DateTime TOffDuty2 = newInOut.ChangeTime.Value.Date.AddHours(19); if (newInOut.IsIn == true) { ///上午上班 if (newInOut.ChangeTime < TOffDuty1) { newInOutRecord.WorkIn1 = newInOut.ChangeTime; } else if (newInOut.ChangeTime < TOffDuty2) { newInOutRecord.WorkIn2 = newInOut.ChangeTime; } else { newInOutRecord.WorkIn3 = newInOut.ChangeTime; } } else { ///上午下班 if (newInOut.ChangeTime < TWorkIn2) { newInOutRecord.OffDuty1 = newInOut.ChangeTime; } else if (newInOut.ChangeTime < TOffDuty2.AddHours(1)) { newInOutRecord.OffDuty2 = newInOut.ChangeTime; } else { newInOutRecord.OffDuty3 = newInOut.ChangeTime; } } #endregion 上下班时间 bool isInsert = false; var getInOutRecord =db.T_d_EmployInOutRecord.FirstOrDefault(x => x.ProjectId == newInOut.ProjectId && x.IDCardNo == newInOut.IdentityCard && x.RecordDate == newInOut.ChangeTime.Value.Date); if (getInOutRecord == null) { isInsert = true; } if (isInsert) { newInOutRecord.ManHours = 4; newInOutRecord.ManOverHours = 0; db.T_d_EmployInOutRecord.InsertOnSubmit(newInOutRecord); db.SubmitChanges(); } else { #region 计算人工时 if (newInOutRecord.WorkIn1.HasValue && (!getInOutRecord.WorkIn1.HasValue || getInOutRecord.WorkIn1 > newInOutRecord.WorkIn1)) { getInOutRecord.WorkIn1 = newInOutRecord.WorkIn1; } if (newInOutRecord.WorkIn2.HasValue && (!getInOutRecord.WorkIn2.HasValue || getInOutRecord.WorkIn2 > newInOutRecord.WorkIn2)) { getInOutRecord.WorkIn2 = newInOutRecord.WorkIn2; } if (newInOutRecord.WorkIn3.HasValue && (!getInOutRecord.WorkIn3.HasValue || getInOutRecord.WorkIn3 > newInOutRecord.WorkIn3)) { getInOutRecord.WorkIn3 = newInOutRecord.WorkIn3; } if (newInOutRecord.OffDuty1.HasValue && (!getInOutRecord.OffDuty1.HasValue || getInOutRecord.OffDuty1 < newInOutRecord.OffDuty1)) { getInOutRecord.OffDuty1 = newInOutRecord.OffDuty1; } if (newInOutRecord.OffDuty2.HasValue && (!getInOutRecord.OffDuty2.HasValue || getInOutRecord.OffDuty2 < newInOutRecord.OffDuty2)) { getInOutRecord.OffDuty2 = newInOutRecord.OffDuty2; } if (newInOutRecord.OffDuty3.HasValue && (!getInOutRecord.OffDuty3.HasValue || getInOutRecord.OffDuty3 < newInOutRecord.OffDuty3)) { getInOutRecord.OffDuty3 = newInOutRecord.OffDuty3; } int m1 = 0; if (getInOutRecord.WorkIn1.HasValue || getInOutRecord.OffDuty1.HasValue) { m1 = 240; if (getInOutRecord.WorkIn1.HasValue && getInOutRecord.OffDuty1.HasValue) { m1 = Convert.ToInt32((getInOutRecord.OffDuty1 - getInOutRecord.WorkIn1).Value.TotalMinutes); } } int m2 = 0; if (getInOutRecord.WorkIn2.HasValue || getInOutRecord.OffDuty2.HasValue) { m2 = 240; if (getInOutRecord.WorkIn2.HasValue && getInOutRecord.OffDuty2.HasValue) { m2 = Convert.ToInt32((getInOutRecord.OffDuty2 - getInOutRecord.WorkIn2).Value.TotalMinutes); } } int m3 = 0; if (getInOutRecord.WorkIn3.HasValue || getInOutRecord.OffDuty3.HasValue) { m3 = 240; if (getInOutRecord.WorkIn3.HasValue && getInOutRecord.OffDuty3.HasValue) { m3 = Convert.ToInt32((getInOutRecord.OffDuty3 - getInOutRecord.WorkIn3).Value.TotalMinutes); } } #endregion 计算人工时 getInOutRecord.ManHours = Convert.ToInt32(Math.Ceiling((m1 + m2 + m3) * 1.0 / 60)); getInOutRecord.ManOverHours = Convert.ToInt32(Math.Ceiling(m3 * 1.0 / 60)); db.SubmitChanges(); } } } } #endregion 根据出入记录 写入考勤记录 #region 获取单位信息 /// /// 获取单位信息 /// /// public static Model.T_d_department GetSupDep(string projectId, int? departmentID, int ParentID) { var getDep = Funs.DB.T_d_department.FirstOrDefault(x => x.ProjectId == projectId && x.DepartmentID == departmentID); if (getDep != null) { if (getDep.ParentID == ParentID) { return getDep; } else { return GetSupDep(projectId, getDep.ParentID, ParentID); } } else { return null; } } #endregion 获取单位信息 /// /// 获取月度门禁人员考勤统计 /// /// /// /// /// public static Model.InOutRecordStatisticOutput getInOutRecordStatistics(string projectId, string personid, DateTime date) { var result = new InOutRecordStatisticOutput(); var inOutRecordStatisticList = new List(); result.DayInOutRecordStatistic = new List(); var queryPersonInOutRecordList = (from x in Funs.DB.SitePerson_PersonInOut where x.ProjectId == projectId && x.PersonId == personid && x.ChangeTime.Value.Year == date.Year && x.ChangeTime.Value.Month == date.Month select x).ToList(); //获取当月人员的出入记录 var allCheckInDays = (from x in Funs.DB.SitePerson_PersonInOut where x.ProjectId == projectId && x.PersonId == personid select x.ChangeTime.Value.Date).Distinct().Count(); var personModel = PersonService.GetPersonById(personid);//获取人员信息 var dateList = Funs.GetMonthDay(date.Year, date.Month);//获取当月日期 foreach (var day in dateList) { DayInOutRecordStatistic dayInOutRecordStatistic = new DayInOutRecordStatistic(); dayInOutRecordStatistic.Date = day.Date; dayInOutRecordStatistic.Items = new List(); dayInOutRecordStatistic.State = 0; var dayqueryPersonInOutRecord = queryPersonInOutRecordList.Where(x => x.ChangeTime.Value.Date == day.Date).Select(x => new { x.ChangeTime, x.InOutWay, x.IsIn }).ToList(); if (dayqueryPersonInOutRecord.Count > 0) { dayInOutRecordStatistic.State = 1; foreach (var item in dayqueryPersonInOutRecord) { DayInOutRecordStatisticDetail dayInOutRecordStatisticDetail = new DayInOutRecordStatisticDetail(); if (item.InOutWay.ToString() == Const.InOutWay_1) { dayInOutRecordStatisticDetail.InOutWayName = "门禁"; } else if (item.InOutWay.ToString() == Const.InOutWay_2) { dayInOutRecordStatisticDetail.InOutWayName = "手动"; } else if (item.InOutWay.ToString() == Const.InOutWay_3) { dayInOutRecordStatisticDetail.InOutWayName = "移动端"; } else { dayInOutRecordStatisticDetail.InOutWayName = "其他"; } dayInOutRecordStatisticDetail.ChangeTime = item.ChangeTime.Value; dayInOutRecordStatisticDetail.IsIn = item.IsIn; dayInOutRecordStatistic.Items.Add(dayInOutRecordStatisticDetail); } var InOutWayNameList = dayInOutRecordStatistic.Items.Select(x => x.InOutWayName).Distinct().ToList(); if (InOutWayNameList.Count == 1 && InOutWayNameList[0] == "手动") { dayInOutRecordStatistic.State = 2; } } result.DayInOutRecordStatistic.Add(dayInOutRecordStatistic); } result.UnitId = personModel.UnitId; result.PersonId = personModel.PersonId; result.ProjectId = projectId; result.CheckInDays = result.DayInOutRecordStatistic.Count(x => x.State == 1); result.AbsentDays = result.DayInOutRecordStatistic.Count(x => x.State == 0); result.EntryDays = int.Parse(Math.Ceiling((DateTime.Now - personModel.InTime.Value).TotalDays).ToString()); result.AllCheckInDays = allCheckInDays; return result; } } }