public HttpResponseMessage GetDataDashboard() { try { DashboardResultModel modelResult = dashboardBusiness.GetDataDashboard(); return(Request.CreateResponse(HttpStatusCode.OK, modelResult)); } catch (Exception ex) { return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message)); } }
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); }