public void LogTimeAttendanceFuntion(List <IdentifiedPerson> listIdentifiedPerson, DateTime date, string imageLink) { List <TimeAttendanceLog> listTimeAttendanceLog = new List <TimeAttendanceLog>(); var logDateTo = DateTimeUtils.ConvertDateFrom(date); var listLogNow = db.TimeAttendanceLog.Where(r => r.Date == logDateTo).ToList(); TimeSpan timeSpan; TimeSpan timeSpan2; int sophut; //Lấy nhân viên có độ chính xác >= mức độ chính xác quy định foreach (var item in listIdentifiedPerson) { if (item.InfoEmployee == null) { continue; } modelTimeAttendanceLog = listLogNow.Where(r => r.EmployeeId.Equals(item.InfoEmployee.EmployeeId)).FirstOrDefault(); if (modelTimeAttendanceLog != null) { timeSpan = (date - modelTimeAttendanceLog.TimeIn.Value); modelTimeAttendanceLog.TimeOut = date; modelTimeAttendanceLog.ImageOut = imageLink; modelTimeAttendanceLog.Total = (int)(timeSpan.TotalHours * 60); timeSpan2 = (date - TimeAttendanceStatic.EndTime.Value); modelTimeAttendanceLog.EarlyMinutes = date < TimeAttendanceStatic.EndTime.Value ? (Math.Abs((timeSpan2.Hours * 60)) + Math.Abs(timeSpan2.Minutes)) : 0; modelTimeAttendanceLog.ImageFaceOut = item.ImageFace; } else { timeSpan = (date - TimeAttendanceStatic.StartTime.Value); sophut = (Math.Abs((timeSpan.Hours * 60)) + Math.Abs(timeSpan.Minutes)); modelTimeAttendanceLog = new TimeAttendanceLog() { TimeAttendanceLogId = Guid.NewGuid().ToString(), EmployeeId = item.InfoEmployee.EmployeeId, Date = logDateTo, TimeIn = date, ImageIn = imageLink, LateMinutes = date < TimeAttendanceStatic.StartTime.Value ? 0 : Math.Abs(sophut), ImageFaceIn = item.ImageFace }; listTimeAttendanceLog.Add(modelTimeAttendanceLog); } } if (listTimeAttendanceLog.Count > 0) { db.TimeAttendanceLog.AddRange(listTimeAttendanceLog); } db.SaveChanges(); }
public void LogTimeAttendanceFuntion(IEnumerable <IdentifyResult> listIdentifiedPerson, DateTime date, string imageLink) { try { if (db == null) { db = new TimeAttendanceEntities(_connStr); } List <TimeAttendanceLog> listTimeAttendanceLog = new List <TimeAttendanceLog>(); var logDateTo = DateTimeUtils.ConvertDateFrom(date); var listLogNow = db.TimeAttendanceLog.Where(r => r.Date == logDateTo.Date); TimeSpan timeSpan; TimeSpan timeSpan2; int sophut; //Lấy nhân viên có độ chính xác >= mức độ chính xác quy định foreach (var item in listIdentifiedPerson) { if (item.Candidates.Length > 0) { itemPersonId = item.Candidates[0].PersonId.ToString(); emp = db.Employee.FirstOrDefault(u => u.FaceId.Equals(itemPersonId)); if (emp != null) { modelTimeAttendanceLog = listLogNow.FirstOrDefault(r => r.EmployeeId.Equals(emp.EmployeeId)); if (modelTimeAttendanceLog != null) { timeSpan = (date - modelTimeAttendanceLog.TimeIn.Value); modelTimeAttendanceLog.TimeOut = date; modelTimeAttendanceLog.ImageOut = imageLink; modelTimeAttendanceLog.Total = (int)(timeSpan.TotalHours * 60); timeSpan2 = (date - TimeAttendanceStatic.EndTime.Value); modelTimeAttendanceLog.EarlyMinutes = date < TimeAttendanceStatic.EndTime.Value ? (Math.Abs((timeSpan2.Hours * 60)) + Math.Abs(timeSpan2.Minutes)) : 0; modelTimeAttendanceLog.ImageFaceOut = imageLink; } else { timeSpan = (date - TimeAttendanceStatic.StartTime.Value); sophut = (Math.Abs((timeSpan.Hours * 60)) + Math.Abs(timeSpan.Minutes)); modelTimeAttendanceLog = new TimeAttendanceLog() { TimeAttendanceLogId = Guid.NewGuid().ToString(), EmployeeId = emp.EmployeeId, Date = logDateTo, TimeIn = date, ImageIn = imageLink, LateMinutes = date < TimeAttendanceStatic.StartTime.Value ? 0 : Math.Abs(sophut), ImageFaceIn = imageLink }; var isExisted = (from r in db.TimeAttendanceLog.AsNoTracking() where r.Date == logDateTo.Date && r.EmployeeId.Equals(emp.EmployeeId) select r.TimeAttendanceLogId).Count() > 0; if (!isExisted) { listTimeAttendanceLog.Add(modelTimeAttendanceLog); } } } } } if (listTimeAttendanceLog.Count > 0) { db.TimeAttendanceLog.AddRange(listTimeAttendanceLog); } db.SaveChanges(); } catch (Exception ex1) { } }
public void AddOrUpdateCacheColectionFuntion() { // db = new TimeAttendanceEntities(_connStr); DashboardResultModel modelResult = new DashboardResultModel(); try { var lstEmp = db.Employee.ToList(); var lstEmpId = lstEmp.Select(r => r.EmployeeId); modelResult.TotalEmployee = lstEmpId.Count(); //Ngày hiện tại modelResult.DateNow = DateTime.Now; //Ngày hôm qua modelResult.DateBefore = modelResult.DateNow.AddDays(-1); modelResult.DayNow = modelResult.DateNow.ToString("dd/MM/yyyy"); DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo; Calendar calendar = dfi.Calendar; //Tuần hiện tại modelResult.WeekNow = calendar.GetWeekOfYear(modelResult.DateNow, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); //Ngày đầu của tuần hiện tại DateTime firstDayOfWeekNow = DateTimeUtils.FirstDayOfWeek(modelResult.DateNow); //Ngày cuối của tuần hiện tại DateTime lastDayOfWeekNow = firstDayOfWeekNow.AddDays(6); //Ngày đầu của tuần trước DateTime firstDayOfWeekBefore = firstDayOfWeekNow.AddDays(-7); //Ngày cuối của tuần trước DateTime lastDayOfWeekBefore = firstDayOfWeekBefore.AddDays(6); //Tuần trước modelResult.WeekBefore = calendar.GetWeekOfYear(firstDayOfWeekBefore, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); //Tháng hiện tại modelResult.MonthNow = modelResult.DateNow.Month; //Ngày đầu của tháng hiện tại DateTime firstDayOfMonthNow = new DateTime(modelResult.DateNow.Year, modelResult.MonthNow, 1); //Ngày cuối của tháng hiện tại DateTime lastDayOfMonthNow = firstDayOfMonthNow.AddMonths(1).AddDays(-1); //Tháng trước modelResult.MonthBefore = modelResult.DateNow.AddMonths(-1).Month; //Ngày đầu của tháng trước DateTime firstDayOfMonthBefore = new DateTime(modelResult.DateNow.AddMonths(-1).Year, modelResult.DateNow.AddMonths(-1).Month, 1); //Ngày cuối của tháng trước DateTime lastDayOfMonthBefore = firstDayOfMonthBefore.AddMonths(1).AddDays(-1); //Quý hiện tại modelResult.QuarterNow = ((modelResult.DateNow.Month + 2) / 3); //Ngày đầu của quý hiện tại DateTime firstDayOfQuarterNow = new DateTime(modelResult.DateNow.Year, (modelResult.QuarterNow - 1) * 3 + 1, 1); //Ngày cuối của quý hiện tại DateTime lastDayOfQuarterNow = firstDayOfQuarterNow.AddMonths(3).AddDays(-1); //Lấy quý trước DateTime dateBeforeOfQuarterNow = firstDayOfQuarterNow.AddMonths(-1); modelResult.QuarterBefore = ((dateBeforeOfQuarterNow.Month + 2) / 3); //Ngày đầu của quý trước DateTime firstDayOfQuarterBefore = new DateTime(dateBeforeOfQuarterNow.Year, (modelResult.QuarterBefore - 1) * 3 + 1, 1); //Ngày cuối của quý trước DateTime lastDayOfQuarterBefore = firstDayOfQuarterBefore.AddMonths(3).AddDays(-1); DateTime dateFrom; DateTime dateTo; //lấy tổng dữ liệu trong quý dateFrom = DateTimeUtils.ConvertDateFrom(firstDayOfQuarterNow); dateTo = DateTimeUtils.ConvertDateTo(lastDayOfQuarterNow); var listQuarterNow = db.TimeAttendanceLog.Where(u => u.Date >= dateFrom && u.Date <= dateTo).ToList(); //lấy dữ liệu trong ngày dateFrom = DateTimeUtils.ConvertDateFrom(modelResult.DateNow); dateTo = DateTimeUtils.ConvertDateTo(modelResult.DateNow); var listDayNow = listQuarterNow.Where(u => u.Date >= dateFrom && u.Date <= dateTo).ToList(); //lấy dữ liệu trong tuần dateFrom = DateTimeUtils.ConvertDateFrom(firstDayOfWeekNow); dateTo = DateTimeUtils.ConvertDateTo(lastDayOfWeekNow); var listWeekNow = listQuarterNow.Where(u => u.Date >= dateFrom && u.Date <= dateTo).ToList(); //lấy dữ liệu trong tháng dateFrom = DateTimeUtils.ConvertDateFrom(firstDayOfMonthNow); dateTo = DateTimeUtils.ConvertDateTo(lastDayOfMonthNow); var listMonthNow = listQuarterNow.Where(u => u.Date >= dateFrom && u.Date <= dateTo).ToList(); #region //Thống kê chấm công ngày hiện tại và ngày trước //tinh toán modelResult.ListDataDay = new List <DataResultModel>(); modelResult.ListDataDay.Add(new DataResultModel() { Name = "Ngày " + modelResult.DateNow.ToString("dd/MM/yyyy") + "", TotalLate = listDayNow.Where(u => u.LateMinutes.HasValue && u.LateMinutes > 0).Count(), TotalEarly = listDayNow.Where(u => u.EarlyMinutes.HasValue && u.EarlyMinutes > 0).Count(), TotalAbsent = listDayNow.Where(u => !lstEmpId.Contains(u.EmployeeId)).Count() }); var dataDayNow = modelResult.ListDataDay.First(); modelResult.LatePercent = Math.Round((double)(dataDayNow.TotalLate / modelResult.TotalEmployee) * 100, 2); modelResult.EarlyPercent = Math.Round((double)(dataDayNow.TotalEarly / modelResult.TotalEmployee) * 100, 2); modelResult.AbsentPercent = Math.Round((double)(dataDayNow.TotalAbsent / modelResult.TotalEmployee) * 100, 2); #region [lấy cache ngày] var DateNowKey = "AT:DayHome:" + modelResult.DateNow.ToString("ddMMyyyy"); var redisDayHomeCache = RedisService <DayHomeCache> .GetInstance(_RedisConnection); DayHomeCache DayHomeCache; DayHomeCache = redisDayHomeCache.Get <DayHomeCache>(DateNowKey); if (DayHomeCache != null) { DayHomeCache.ListDataDay = modelResult.ListDataDay; DayHomeCache.LatePercent = modelResult.LatePercent; DayHomeCache.EarlyPercent = modelResult.EarlyPercent; DayHomeCache.AbsentPercent = modelResult.AbsentPercent; //add vào cache redisDayHomeCache.Replace(DateNowKey, DayHomeCache); } else { DayHomeCache = new DayHomeCache(); DayHomeCache.ListDataDay = modelResult.ListDataDay; DayHomeCache.LatePercent = modelResult.LatePercent; DayHomeCache.EarlyPercent = modelResult.EarlyPercent; DayHomeCache.AbsentPercent = modelResult.AbsentPercent; //add vào cache redisDayHomeCache.Add(DateNowKey, DayHomeCache); } #endregion #endregion #region //Thống kê chấm công tuần hiện tại và tuần trước dateFrom = DateTimeUtils.ConvertDateFrom(firstDayOfWeekNow); dateTo = DateTimeUtils.ConvertDateTo(lastDayOfWeekNow); //tính toán modelResult.ListDataWeek = new List <DataResultModel>(); modelResult.ListDataWeek.Add(new DataResultModel() { Name = "Tuần " + modelResult.WeekNow + " Năm " + firstDayOfWeekNow.ToString("yyyy"), TotalLate = listWeekNow.Where(u => u.LateMinutes.HasValue && u.LateMinutes > 0).Count(), TotalEarly = listWeekNow.Where(u => u.EarlyMinutes.HasValue && u.EarlyMinutes > 0).Count(), TotalAbsent = listWeekNow.Where(u => !lstEmpId.Contains(u.EmployeeId)).Count() }); modelResult.ListLateTopInWeek = (from b in lstEmp select new DataTopModel { Code = b.Code, EmployeeName = b.Name, Total = (int)(from x in listWeekNow where x.EmployeeId.Equals(b.EmployeeId) && x.LateMinutes.HasValue select x.TimeAttendanceLogId).Count(), TotalTime = (int)(from x in listWeekNow where x.EmployeeId.Equals(b.EmployeeId) && x.LateMinutes.HasValue select x.LateMinutes).Sum(), }).Where(r => r.Total > 0).OrderByDescending(r => r.Total).ThenBy(r => r.TotalTime).Take(20).ToList(); modelResult.ListEarlyTopInWeek = (from b in lstEmp select new DataTopModel { Code = b.Code, EmployeeName = b.Name, Total = (int)(from x in listWeekNow where x.EmployeeId.Equals(b.EmployeeId) && x.EarlyMinutes.HasValue select x.TimeAttendanceLogId).Count(), TotalTime = (int)(from x in listWeekNow where x.EmployeeId.Equals(b.EmployeeId) && x.EarlyMinutes.HasValue select x.EarlyMinutes).Sum(), }).Where(r => r.Total > 0).OrderByDescending(r => r.Total).ThenBy(r => r.TotalTime).Take(20).ToList(); //Dữ liệu biểu đồ modelResult.DataChartWeek = new DataChartModel(); for (DateTime dateWeek = firstDayOfWeekNow; dateWeek <= lastDayOfWeekNow;) { dateFrom = DateTimeUtils.ConvertDateFrom(dateWeek); dateTo = DateTimeUtils.ConvertDateTo(dateWeek); var listDataChart = listWeekNow.Where(r => r.Date >= dateFrom && r.Date <= dateTo).ToList(); modelResult.DataChartWeek.ListTotalLate.Add(listDataChart.Where(r => r.LateMinutes.HasValue && r.LateMinutes > 0).Count()); modelResult.DataChartWeek.ListTotalEarly.Add(listDataChart.Where(r => r.EarlyMinutes.HasValue && r.EarlyMinutes > 0).Count()); modelResult.DataChartWeek.ListTotalAbsent.Add(listDataChart.Where(r => !lstEmpId.Contains(r.EmployeeId)).Count()); dateWeek = dateWeek.AddDays(1); } #region [lấy cache ngày] var DateFrom_ToKeyW = "AT:WeekHome:" + firstDayOfWeekNow.ToString("ddMMyyyy") + "_" + lastDayOfWeekNow.ToString("ddMMyyyy"); var redisWeekHomeCache = RedisService <WeekHomeCache> .GetInstance(_RedisConnection); WeekHomeCache WeekHomeCache; WeekHomeCache = redisWeekHomeCache.Get <WeekHomeCache>(DateFrom_ToKeyW); if (WeekHomeCache != null) { WeekHomeCache.ListDataWeek = modelResult.ListDataWeek; WeekHomeCache.ListLateTopInWeek = modelResult.ListLateTopInWeek; WeekHomeCache.ListEarlyTopInWeek = modelResult.ListEarlyTopInWeek; WeekHomeCache.DataChartWeek = modelResult.DataChartWeek; //add vào cache redisWeekHomeCache.Replace(DateFrom_ToKeyW, WeekHomeCache); } else { WeekHomeCache = new WeekHomeCache(); WeekHomeCache.ListDataWeek = modelResult.ListDataWeek; WeekHomeCache.ListLateTopInWeek = modelResult.ListLateTopInWeek; WeekHomeCache.ListEarlyTopInWeek = modelResult.ListEarlyTopInWeek; WeekHomeCache.DataChartWeek = modelResult.DataChartWeek; //add vào cache redisWeekHomeCache.Add(DateFrom_ToKeyW, WeekHomeCache); } #endregion #endregion #region //Thống kê chấm công tháng hiện tại và tháng trước dateFrom = DateTimeUtils.ConvertDateFrom(firstDayOfMonthNow); dateTo = DateTimeUtils.ConvertDateTo(lastDayOfMonthNow); #region //tính toán modelResult.ListDataMonth = new List <DataResultModel>(); modelResult.ListDataMonth.Add(new DataResultModel() { Name = "Tháng " + modelResult.MonthNow + " Năm " + firstDayOfMonthNow.ToString("yyyy"), TotalLate = listMonthNow.Where(u => u.LateMinutes.HasValue && u.LateMinutes > 0).Count(), TotalEarly = listMonthNow.Where(u => u.EarlyMinutes.HasValue && u.EarlyMinutes > 0).Count(), TotalAbsent = listMonthNow.Where(u => !lstEmpId.Contains(u.EmployeeId)).Count() }); modelResult.ListLateTopInMonth = (from b in lstEmp select new DataTopModel { Code = b.Code, EmployeeName = b.Name, Total = (int)(from x in listMonthNow where x.EmployeeId.Equals(b.EmployeeId) && x.LateMinutes.HasValue select x.TimeAttendanceLogId).Count(), TotalTime = (int)(from x in listWeekNow where x.EmployeeId.Equals(b.EmployeeId) && x.LateMinutes.HasValue select x.LateMinutes).Sum(), }).Where(r => r.Total > 0).OrderByDescending(r => r.Total).ThenBy(r => r.TotalTime).Take(20).ToList(); modelResult.ListEarlyTopInMonth = (from b in lstEmp select new DataTopModel { Code = b.Code, EmployeeName = b.Name, Total = (int)(from x in listMonthNow where x.EmployeeId.Equals(b.EmployeeId) && x.EarlyMinutes.HasValue select x.TimeAttendanceLogId).Count(), TotalTime = (int)(from x in listWeekNow where x.EmployeeId.Equals(b.EmployeeId) && x.EarlyMinutes.HasValue select x.EarlyMinutes).Sum(), }).Where(r => r.Total > 0).OrderByDescending(r => r.Total).ThenBy(r => r.TotalTime).Take(20).ToList(); ////Dữ liệu biểu đồ modelResult.DataChartMonth = new DataChartModel(); for (DateTime dateMonth = firstDayOfMonthNow; dateMonth <= lastDayOfMonthNow;) { dateFrom = DateTimeUtils.ConvertDateFrom(dateMonth); dateTo = DateTimeUtils.ConvertDateTo(dateMonth); var listDataChart = listMonthNow.Where(r => r.Date >= dateFrom && r.Date <= dateTo).ToList(); modelResult.DataChartMonth.ListCategories.Add(dateMonth.Day.ToString()); modelResult.DataChartMonth.ListTotalLate.Add(listDataChart.Where(r => r.LateMinutes.HasValue && r.LateMinutes > 0).Count()); modelResult.DataChartMonth.ListTotalEarly.Add(listDataChart.Where(r => r.EarlyMinutes.HasValue && r.EarlyMinutes > 0).Count()); modelResult.DataChartMonth.ListTotalAbsent.Add(listDataChart.Where(r => !lstEmpId.Contains(r.EmployeeId)).Count()); dateMonth = dateMonth.AddDays(1); } #endregion #region [lấy cache ngày] var DateFrom_ToKeyM = "AT:MonthHome:" + firstDayOfMonthNow.ToString("ddMMyyyy") + "_" + lastDayOfMonthNow.ToString("ddMMyyyy"); var redisMonthHomeCache = RedisService <MonthHomeCache> .GetInstance(_RedisConnection); MonthHomeCache MonthHomeCache; MonthHomeCache = redisMonthHomeCache.Get <MonthHomeCache>(DateFrom_ToKeyM); if (MonthHomeCache != null) { MonthHomeCache.ListDataMonth = modelResult.ListDataMonth; MonthHomeCache.ListLateTopInMonth = modelResult.ListLateTopInMonth; MonthHomeCache.ListEarlyTopInMonth = modelResult.ListEarlyTopInMonth; MonthHomeCache.DataChartMonth = modelResult.DataChartMonth; redisMonthHomeCache.Replace(DateFrom_ToKeyM, MonthHomeCache); } else { MonthHomeCache = new MonthHomeCache(); MonthHomeCache.ListDataMonth = modelResult.ListDataMonth; MonthHomeCache.ListLateTopInMonth = modelResult.ListLateTopInMonth; MonthHomeCache.ListEarlyTopInMonth = modelResult.ListEarlyTopInMonth; MonthHomeCache.DataChartMonth = modelResult.DataChartMonth; redisMonthHomeCache.Add(DateFrom_ToKeyM, MonthHomeCache); } #endregion #endregion #region //Thống kê chấm công quý hiện tại và quý trước #region //tính toán modelResult.ListDataQuarter = new List <DataResultModel>(); modelResult.ListDataQuarter.Add(new DataResultModel() { Name = "Quý " + modelResult.QuarterNow + " Năm " + firstDayOfQuarterNow.ToString("yyyy"), TotalLate = listQuarterNow.Where(r => r.LateMinutes.HasValue && r.LateMinutes > 0).Count(), TotalEarly = listQuarterNow.Where(r => r.EarlyMinutes.HasValue && r.EarlyMinutes > 0).Count(), TotalAbsent = listQuarterNow.Where(r => !lstEmpId.Contains(r.EmployeeId)).Count() }); ////Dữ liệu top modelResult.ListLateTopInQuarter = (from b in lstEmp select new DataTopModel { Code = b.Code, EmployeeName = b.Name, Total = (int)(from x in listQuarterNow where x.EmployeeId.Equals(b.EmployeeId) && x.LateMinutes.HasValue select x.TimeAttendanceLogId).Count(), TotalTime = (int)(from x in listWeekNow where x.EmployeeId.Equals(b.EmployeeId) && x.LateMinutes.HasValue select x.LateMinutes).Sum(), }).Where(r => r.Total > 0).OrderByDescending(r => r.Total).ThenBy(r => r.TotalTime).Take(20).ToList(); modelResult.ListEarlyTopInQuarter = (from b in lstEmp select new DataTopModel { Code = b.Code, EmployeeName = b.Name, Total = (int)(from x in listQuarterNow where x.EmployeeId.Equals(b.EmployeeId) && x.EarlyMinutes.HasValue select x.TimeAttendanceLogId).Count(), TotalTime = (int)(from x in listWeekNow where x.EmployeeId.Equals(b.EmployeeId) && x.EarlyMinutes.HasValue select x.EarlyMinutes).Sum(), }).Where(r => r.Total > 0).OrderByDescending(r => r.Total).ThenBy(r => r.TotalTime).Take(20).ToList(); modelResult.DataChartQuarter = new DataChartModel(); //Tháng thứ 1 của quý dateFrom = DateTimeUtils.ConvertDateFrom(firstDayOfQuarterNow); dateTo = DateTimeUtils.ConvertDateTo(firstDayOfQuarterNow.AddMonths(1).AddDays(1)); var listDataChartQuarter = listQuarterNow.Where(r => r.Date >= dateFrom && r.Date <= dateTo).ToList(); modelResult.DataChartQuarter.ListCategories.Add("Tháng " + firstDayOfQuarterNow.Month.ToString()); modelResult.DataChartQuarter.ListTotalLate.Add(listDataChartQuarter.Where(r => r.LateMinutes.HasValue && r.LateMinutes > 0).Count()); modelResult.DataChartQuarter.ListTotalEarly.Add(listDataChartQuarter.Where(r => r.EarlyMinutes.HasValue && r.EarlyMinutes > 0).Count()); modelResult.DataChartQuarter.ListTotalAbsent.Add(listDataChartQuarter.Where(r => !lstEmpId.Contains(r.EmployeeId)).Count()); ////Tháng thứ 2 của quý DateTime firstDayOfQuarterNext = firstDayOfQuarterNow.AddMonths(1); dateFrom = DateTimeUtils.ConvertDateFrom(firstDayOfQuarterNext); dateTo = DateTimeUtils.ConvertDateTo(firstDayOfQuarterNext.AddMonths(1).AddDays(1)); listDataChartQuarter = listQuarterNow.Where(r => r.Date >= dateFrom && r.Date <= dateTo).ToList(); modelResult.DataChartQuarter.ListCategories.Add("Tháng " + firstDayOfQuarterNext.Month.ToString()); modelResult.DataChartQuarter.ListTotalLate.Add(listDataChartQuarter.Where(r => r.LateMinutes.HasValue && r.LateMinutes > 0).Count()); modelResult.DataChartQuarter.ListTotalEarly.Add(listDataChartQuarter.Where(r => r.EarlyMinutes.HasValue && r.EarlyMinutes > 0).Count()); modelResult.DataChartQuarter.ListTotalAbsent.Add(listDataChartQuarter.Where(r => !lstEmpId.Contains(r.EmployeeId)).Count()); ////Tháng thứ 3 của quý firstDayOfQuarterNext = firstDayOfQuarterNow.AddMonths(2); dateFrom = DateTimeUtils.ConvertDateFrom(firstDayOfQuarterNext); dateTo = DateTimeUtils.ConvertDateTo(firstDayOfQuarterNext.AddMonths(1).AddDays(1)); listDataChartQuarter = listQuarterNow.Where(r => r.Date >= dateFrom && r.Date <= dateTo).ToList(); modelResult.DataChartQuarter.ListCategories.Add("Tháng " + firstDayOfQuarterNext.Month.ToString()); modelResult.DataChartQuarter.ListTotalLate.Add(listDataChartQuarter.Where(r => r.LateMinutes.HasValue && r.LateMinutes > 0).Count()); modelResult.DataChartQuarter.ListTotalEarly.Add(listDataChartQuarter.Where(r => r.EarlyMinutes.HasValue && r.EarlyMinutes > 0).Count()); modelResult.DataChartQuarter.ListTotalAbsent.Add(listDataChartQuarter.Where(r => !lstEmpId.Contains(r.EmployeeId)).Count()); #endregion #region [lấy cache ngày] var DateFrom_ToKeyQ = "AT:QuarterHome:" + firstDayOfQuarterNow.ToString("ddMMyyyy") + "_" + lastDayOfQuarterNow.ToString("ddMMyyyy"); var redisQuarterHomeCache = RedisService <QuarterHomeCache> .GetInstance(_RedisConnection); QuarterHomeCache QuarterHomeCache; QuarterHomeCache = redisQuarterHomeCache.Get <QuarterHomeCache>(DateFrom_ToKeyQ); if (QuarterHomeCache != null) { QuarterHomeCache.ListDataQuarter = modelResult.ListDataQuarter; QuarterHomeCache.ListLateTopInQuarter = modelResult.ListLateTopInQuarter; QuarterHomeCache.ListEarlyTopInQuarter = modelResult.ListEarlyTopInQuarter; QuarterHomeCache.DataChartQuarter = modelResult.DataChartQuarter; redisQuarterHomeCache.Replace(DateFrom_ToKeyQ, QuarterHomeCache); } else { QuarterHomeCache = new QuarterHomeCache(); QuarterHomeCache.ListDataQuarter = modelResult.ListDataQuarter; QuarterHomeCache.ListLateTopInQuarter = modelResult.ListLateTopInQuarter; QuarterHomeCache.ListEarlyTopInQuarter = modelResult.ListEarlyTopInQuarter; QuarterHomeCache.DataChartQuarter = modelResult.DataChartQuarter; redisQuarterHomeCache.Add(DateFrom_ToKeyQ, QuarterHomeCache); } #endregion #endregion } catch (Exception ex) { throw new ErrorException(ErrorMessage.ERR001, ex.InnerException); } }
public DashboardResultModel GetDataDashboard() { var RedisConnection = System.Configuration.ConfigurationManager.AppSettings["RedisConnection"]; DashboardResultModel modelResult = new DashboardResultModel(); try { //var lstEmpId = db.Employee.Select(r => r.EmployeeId); //modelResult.TotalEmployee = lstEmpId.Count(); //Ngày hiện tại modelResult.DateNow = DateTime.Now; //Ngày hôm qua modelResult.DateBefore = modelResult.DateNow.AddDays(-1); modelResult.DayNow = modelResult.DateNow.ToString("dd/MM/yyyy"); DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo; Calendar calendar = dfi.Calendar; //Tuần hiện tại modelResult.WeekNow = calendar.GetWeekOfYear(modelResult.DateNow, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); //Ngày đầu của tuần hiện tại DateTime firstDayOfWeekNow = DateTimeUtils.FirstDayOfWeek(modelResult.DateNow); //Ngày cuối của tuần hiện tại DateTime lastDayOfWeekNow = firstDayOfWeekNow.AddDays(6); //Ngày đầu của tuần trước DateTime firstDayOfWeekBefore = firstDayOfWeekNow.AddDays(-7); //Ngày cuối của tuần trước DateTime lastDayOfWeekBefore = firstDayOfWeekBefore.AddDays(6); //Tuần trước modelResult.WeekBefore = calendar.GetWeekOfYear(firstDayOfWeekBefore, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); //Tháng hiện tại modelResult.MonthNow = modelResult.DateNow.Month; //Ngày đầu của tháng hiện tại DateTime firstDayOfMonthNow = new DateTime(modelResult.DateNow.Year, modelResult.MonthNow, 1); //Ngày cuối của tháng hiện tại DateTime lastDayOfMonthNow = firstDayOfMonthNow.AddMonths(1).AddDays(-1); //Tháng trước modelResult.MonthBefore = modelResult.DateNow.AddMonths(-1).Month; //Ngày đầu của tháng trước DateTime firstDayOfMonthBefore = new DateTime(modelResult.DateNow.AddMonths(-1).Year, modelResult.DateNow.AddMonths(-1).Month, 1); //Ngày cuối của tháng trước DateTime lastDayOfMonthBefore = firstDayOfMonthBefore.AddMonths(1).AddDays(-1); //Quý hiện tại modelResult.QuarterNow = ((modelResult.DateNow.Month + 2) / 3); //Ngày đầu của quý hiện tại DateTime firstDayOfQuarterNow = new DateTime(modelResult.DateNow.Year, (modelResult.QuarterNow - 1) * 3 + 1, 1); //Ngày cuối của quý hiện tại DateTime lastDayOfQuarterNow = firstDayOfQuarterNow.AddMonths(3).AddDays(-1); //Lấy quý trước DateTime dateBeforeOfQuarterNow = firstDayOfQuarterNow.AddMonths(-1); modelResult.QuarterBefore = ((dateBeforeOfQuarterNow.Month + 2) / 3); //Ngày đầu của quý trước DateTime firstDayOfQuarterBefore = new DateTime(dateBeforeOfQuarterNow.Year, (modelResult.QuarterBefore - 1) * 3 + 1, 1); //Ngày cuối của quý trước DateTime lastDayOfQuarterBefore = firstDayOfQuarterBefore.AddMonths(3).AddDays(-1); DateTime dateFrom; DateTime dateTo; //lấy dữ liệu trong ngày //dateFrom = DateTimeUtils.ConvertDateFrom(modelResult.DateNow); //dateTo = DateTimeUtils.ConvertDateTo(modelResult.DateNow); //var listDayNow = db.TimeAttendanceLog.AsNoTracking().Where(u => u.Date >= dateFrom && u.Date <= dateTo).AsQueryable(); //#region //Thống kê chấm công ngày hiện tại và ngày trước //#region //tinh toán //modelResult.ListDataDay = new List<DataResultModel>(); //modelResult.ListDataDay.Add(new DataResultModel() //{ // Name = "Ngày " + modelResult.DateNow.ToString("dd/MM/yyyy"), // TotalLate = listDayNow.Where(u => u.LateMinutes.HasValue && u.LateMinutes > 0).Count(), // TotalEarly = listDayNow.Where(u => u.EarlyMinutes.HasValue && u.EarlyMinutes > 0).Count(), // TotalAbsent = listDayNow.Where(u => !lstEmpId.Contains(u.EmployeeId)).Count() //}); //var dataDayNow = modelResult.ListDataDay.First(); //modelResult.LatePercent = Math.Round((double)(dataDayNow.TotalLate / modelResult.TotalEmployee) * 100, 2); //modelResult.EarlyPercent = Math.Round((double)(dataDayNow.TotalEarly / modelResult.TotalEmployee) * 100, 2); //modelResult.AbsentPercent = Math.Round((double)(dataDayNow.TotalAbsent / modelResult.TotalEmployee) * 100, 2); //#endregion //#region[lấy cache ngày] //var DateNowKey = "AT:DayHome:" + modelResult.DateNow.ToString("ddMMyyyy"); //var redisDayHomeCache = RedisService<DayHomeCache>.GetInstance(RedisConnection); //DayHomeCache DayHomeCache; //DayHomeCache = redisDayHomeCache.Get<DayHomeCache>(DateNowKey); //if (DayHomeCache != null) //{ // DayHomeCache.ListDataDay = modelResult.ListDataDay; // DayHomeCache.LatePercent = modelResult.LatePercent; // DayHomeCache.EarlyPercent = modelResult.EarlyPercent; // DayHomeCache.AbsentPercent = modelResult.AbsentPercent; // //add vào cache // redisDayHomeCache.Replace(DateNowKey, DayHomeCache); // //lay cache hôm trước // var DateBeforKey = "AT:DayHome:" + modelResult.DateNow.AddDays(-1).ToString("ddMMyyyy"); // var DayHomeCacheBefor = redisDayHomeCache.Get<DayHomeCache>(DateBeforKey); // if (DayHomeCacheBefor != null) // { // modelResult.ListDataDay.Add(DayHomeCacheBefor.ListDataDay[0]); // } //} //else //{ // DayHomeCache = new DayHomeCache(); // DayHomeCache.ListDataDay = modelResult.ListDataDay; // DayHomeCache.LatePercent = modelResult.LatePercent; // DayHomeCache.EarlyPercent = modelResult.EarlyPercent; // DayHomeCache.AbsentPercent = modelResult.AbsentPercent; // //add vào cache // redisDayHomeCache.Add(DateNowKey, DayHomeCache); //} //#endregion //#endregion #region //Thống kê chấm công tuần hiện tại và tuần trước dateFrom = DateTimeUtils.ConvertDateFrom(firstDayOfWeekNow); dateTo = DateTimeUtils.ConvertDateTo(lastDayOfWeekNow); #region [lấy cache ngày] var DateFrom_ToKeyW = "AT:WeekHome:" + firstDayOfWeekNow.ToString("ddMMyyyy") + "_" + lastDayOfWeekNow.ToString("ddMMyyyy"); var redisWeekHomeCache = RedisService <WeekHomeCache> .GetInstance(RedisConnection); WeekHomeCache WeekHomeCache; WeekHomeCache = redisWeekHomeCache.Get <WeekHomeCache>(DateFrom_ToKeyW); modelResult.ListDataWeek = new List <DataResultModel>(); modelResult.ListLateTopInWeek = new List <DataTopModel>(); modelResult.ListEarlyTopInWeek = new List <DataTopModel>(); modelResult.DataChartWeek = new DataChartModel(); if (WeekHomeCache != null) { modelResult.ListDataWeek = WeekHomeCache.ListDataWeek; modelResult.ListLateTopInWeek = WeekHomeCache.ListLateTopInWeek; modelResult.ListEarlyTopInWeek = WeekHomeCache.ListEarlyTopInWeek; modelResult.DataChartWeek = WeekHomeCache.DataChartWeek; //lấy cache tuần trước var DateFrom_ToKeyWBefor = "AT:WeekHome:" + firstDayOfWeekBefore.ToString("ddMMyyyy") + "_" + lastDayOfWeekBefore.ToString("ddMMyyyy"); var WeekHomeCacheBefor = redisWeekHomeCache.Get <WeekHomeCache>(DateFrom_ToKeyWBefor); if (WeekHomeCacheBefor != null) { modelResult.ListDataWeek.Add(WeekHomeCacheBefor.ListDataWeek[0]); } } #endregion #endregion #region //Thống kê chấm công tháng hiện tại và tháng trước dateFrom = DateTimeUtils.ConvertDateFrom(firstDayOfMonthNow); dateTo = DateTimeUtils.ConvertDateTo(lastDayOfMonthNow); #region [lấy cache ngày] var DateFrom_ToKeyM = "AT:MonthHome:" + firstDayOfMonthNow.ToString("ddMMyyyy") + "_" + lastDayOfMonthNow.ToString("ddMMyyyy"); var redisMonthHomeCache = RedisService <MonthHomeCache> .GetInstance(RedisConnection); MonthHomeCache MonthHomeCache; MonthHomeCache = redisMonthHomeCache.Get <MonthHomeCache>(DateFrom_ToKeyM); if (MonthHomeCache != null) { modelResult.ListDataMonth = MonthHomeCache.ListDataMonth;; modelResult.ListLateTopInMonth = MonthHomeCache.ListLateTopInMonth; modelResult.ListEarlyTopInMonth = MonthHomeCache.ListEarlyTopInMonth; modelResult.DataChartMonth = MonthHomeCache.DataChartMonth; //lấy cache cũ var DateFrom_ToKeyMBefor = "AT:MonthHome:" + firstDayOfMonthBefore.ToString("ddMMyyyy") + "_" + lastDayOfMonthBefore.ToString("ddMMyyyy"); var MonthHomeCacheBefor = redisMonthHomeCache.Get <MonthHomeCache>(DateFrom_ToKeyMBefor); if (MonthHomeCacheBefor != null) { modelResult.ListDataMonth.Add(MonthHomeCacheBefor.ListDataMonth[0]); } } #endregion #endregion #region //Thống kê chấm công quý hiện tại và quý trước #region [lấy cache ngày] var DateFrom_ToKeyQ = "AT:QuarterHome:" + firstDayOfQuarterNow.ToString("ddMMyyyy") + "_" + lastDayOfQuarterNow.ToString("ddMMyyyy"); var redisQuarterHomeCache = RedisService <QuarterHomeCache> .GetInstance(RedisConnection); QuarterHomeCache QuarterHomeCache; QuarterHomeCache = redisQuarterHomeCache.Get <QuarterHomeCache>(DateFrom_ToKeyQ); if (QuarterHomeCache != null) { modelResult.ListDataQuarter = QuarterHomeCache.ListDataQuarter;; modelResult.ListLateTopInQuarter = QuarterHomeCache.ListLateTopInQuarter; modelResult.ListEarlyTopInQuarter = QuarterHomeCache.ListEarlyTopInQuarter; modelResult.DataChartQuarter = QuarterHomeCache.DataChartQuarter; //lây cache quý trước var DateFrom_ToKeyQBefor = "AT:QuarterHome:" + firstDayOfQuarterBefore.ToString("ddMMyyyy") + "_" + lastDayOfQuarterBefore.ToString("ddMMyyyy"); var QuarterHomeCacheBefor = redisQuarterHomeCache.Get <QuarterHomeCache>(DateFrom_ToKeyQBefor); if (QuarterHomeCacheBefor != null) { modelResult.ListDataQuarter.Add(QuarterHomeCacheBefor.ListDataQuarter[0]); } } #endregion #endregion } catch (Exception ex) { throw new ErrorException(ErrorMessage.ERR001, ex.InnerException); } return(modelResult); }
public bool SyncTimeAttendance(DateTime day) { try { db = new TimeAttendanceEntities(); DateTime dateFrom = DateTimeUtils.ConvertDateFrom(day); DateTime dateTo = DateTimeUtils.ConvertDateTo(day); var listDataSync = (from a in db.Employee join b in db.Department on a.DepartmentId equals b.DepartmentId join c in db.JobTitle on a.JobTitleId equals c.JobTitleId join d in db.TimeAttendanceLog.Where(r => r.Date >= dateFrom && r.Date <= dateTo) on a.EmployeeId equals d.EmployeeId into ad from adv in ad.DefaultIfEmpty() select new { a.EmployeeId, a.Name, a.Code, DepartmentName = b.Name, JobTitleName = c.Name, Gender = !a.Gender.HasValue ? "Khác" : a.Gender.Value == Constants.Male ? "Nam" : "Nữ", Date = adv != null ? adv.TimeIn : dateFrom, TimeIn = adv != null ? adv.TimeIn : null, TimeOut = adv != null ? adv.TimeOut : null, Total = adv != null ? adv.Total : null, LateMinutes = adv != null ? adv.LateMinutes : null, EarlyMinutes = adv != null ? adv.EarlyMinutes : null, }).ToList(); using (var trans = db.Database.BeginTransaction()) { try { var checkSyncTimeAttendance = db.SyncTimeAttendance.Where(r => r.Date >= dateFrom && r.Date <= dateTo); if (checkSyncTimeAttendance != null && checkSyncTimeAttendance.Count() > 0) { db.SyncTimeAttendance.RemoveRange(checkSyncTimeAttendance); } List <SyncTimeAttendance> listSync = new List <SyncTimeAttendance>(); SyncTimeAttendance model; foreach (var itemSync in listDataSync) { model = new SyncTimeAttendance() { SyncAttendanceId = Guid.NewGuid().ToString(), EmployeeId = itemSync.EmployeeId, EmployeeName = itemSync.Name, Code = itemSync.Code, DepartmentName = itemSync.DepartmentName, JobTitleName = itemSync.JobTitleName, Gender = itemSync.Gender, Date = itemSync.Date.Value, TimeIn = itemSync.TimeIn, TimeOut = itemSync.TimeOut, Total = itemSync.Total, LateMinutes = itemSync.LateMinutes, EarlyMinutes = itemSync.EarlyMinutes, }; model.IsLate = false; model.IsEarly = false; model.IsAbsent = false; //Đi muộn if (model.TimeIn != null && model.LateMinutes != null && model.LateMinutes > 0) { model.IsLate = true; } //Về sớm if (model.TimeOut != null && model.EarlyMinutes != null && model.EarlyMinutes > 0) { model.IsEarly = true; } //Nghỉ if (model.TimeIn == null && model.TimeOut == null) { model.IsAbsent = true; } listSync.Add(model); } db.SyncTimeAttendance.AddRange(listSync); db.SaveChanges(); trans.Commit(); return(true); } catch (Exception ex) { trans.Rollback(); return(false); } } } catch (Exception ex) { return(false); } }
public SearchResultObject <UserEventLogSearchResult> SearchUserEventLog(UserEventLogSearchCondition searchCondition, string saveOption) { db = new TimeAttendanceEntities(); SearchResultObject <UserEventLogSearchResult> searchResult = new SearchResultObject <UserEventLogSearchResult>(); try { var listmodel = (from a in db.UserEventLog.AsNoTracking() join b in db.User.AsNoTracking() on a.UserId equals b.UserId into ab from abv in ab.DefaultIfEmpty() select new UserEventLogSearchResult() { UserEventLogId = a.UserEventLogId, UserId = a.UserId, Description = a.Description, LogType = a.LogType, LogTypeName = a.LogType == 0 ? "Truy cập hệ thống" : "Khai thác dữ liệu", Type = abv.Type, CreateDate = a.CreateDate, UserName = abv.Name, FullName = abv.FullName }).AsQueryable(); if (!string.IsNullOrEmpty(searchCondition.UserName)) { listmodel = listmodel.Where(r => r.UserName != null && r.UserName.ToUpper().Contains(searchCondition.UserName.ToUpper())); } if (!string.IsNullOrEmpty(searchCondition.UserType)) { listmodel = listmodel.Where(r => r.Type != null && r.Type.Equals(searchCondition.UserType)); } if (!string.IsNullOrEmpty(searchCondition.UserIdSearch)) { listmodel = listmodel.Where(r => r.UserId != null && r.UserId.Equals(searchCondition.UserIdSearch)); } if (!string.IsNullOrEmpty(searchCondition.FullName)) { listmodel = listmodel.Where(r => r.FullName != null && r.FullName.ToUpper().Contains(searchCondition.FullName.ToUpper())); } if (!string.IsNullOrEmpty(searchCondition.Description)) { listmodel = listmodel.Where(r => r.Description.ToUpper().Contains(searchCondition.Description.ToUpper())); } if (searchCondition.LogType.HasValue) { listmodel = listmodel.Where(r => r.LogType.HasValue && r.LogType.Value == searchCondition.LogType.Value); } if (searchCondition.LogDateFrom.HasValue) { searchCondition.LogDateFrom = DateTimeUtils.ConvertDateFrom(searchCondition.LogDateFrom); listmodel = listmodel.Where(r => r.CreateDate.HasValue && r.CreateDate >= searchCondition.LogDateFrom); } if (searchCondition.LogDateTo.HasValue) { searchCondition.LogDateTo = DateTimeUtils.ConvertDateTo(searchCondition.LogDateTo); listmodel = listmodel.Where(r => r.CreateDate.HasValue && r.CreateDate <= searchCondition.LogDateTo); } searchResult.TotalItem = listmodel.Select(r => r.UserEventLogId).Count(); var listResult = SQLHelpper.OrderBy(listmodel, searchCondition.OrderBy, searchCondition.OrderType).Skip((searchCondition.PageNumber - 1) * searchCondition.PageSize) .Take(searchCondition.PageSize) .ToList(); string pathFile = string.Empty; if ((saveOption.Equals("PDF") || saveOption.Equals("XLSX")) && searchResult.TotalItem > 0) { if (searchResult.TotalItem > Constants.MAX_RETURN_DATA_ROW) { throw new BusinessException(ErrorMessage.ERR007); } else { pathFile = this.Export(saveOption, listmodel.ToList(), searchCondition); } } searchResult.ListResult = listResult; searchResult.PathFile = pathFile; } catch (Exception ex) { throw new ErrorException(ErrorMessage.ERR001, ex.InnerException); } return(searchResult); }