/// <summary> /// 给表格赋值-"月份","年份" /// </summary> /// <param name="TableOfDa"></param> /// <param name="drs"></param> /// <param name="type"></param> private void SetValueInReportOfMonthYearInfo(TableObject TableOfDa, List <DataRow> drs, string type) { if (drs != null && drs.Count > 0) { int index = TableOfDa.Rows.Count - 1; MonthYearPrintf monthYearPrintf = CalMonthYear(drs); if (monthYearPrintf != null && !string.IsNullOrEmpty(monthYearPrintf.date)) { if (type == "Month") { TableOfDa.Rows[index][0].Text = monthYearPrintf.date.Substring(0, 7); //月份 } else { TableOfDa.Rows[index][0].Text = monthYearPrintf.date.Substring(0, 4); //年份 } TableOfDa.Rows[index][1].Text = monthYearPrintf.dateSum; //出勤天数 TableOfDa.Rows[index][2].Text = monthYearPrintf.durationLow; //最短时长 TableOfDa.Rows[index][3].Text = monthYearPrintf.durationHeight; //最长时长 TableOfDa.Rows[index][4].Text = monthYearPrintf.duration; //时长 TableOfDa.Rows[index][5].Text = monthYearPrintf.deductDuration; //扣除时长 TableOfDa.Rows[index][6].Text = monthYearPrintf.avgDuration; //平均时长 TableOfDa.Rows[index][7].Text = monthYearPrintf.accumulativeTotalDuration; //累计时长 } } }
/// <summary> /// 计算年份、月份时间信息 /// </summary> /// <returns></returns> private MonthYearPrintf CalMonthYear(List <DataRow> drs) { try { MonthYearPrintf monthYearPrintf = new MonthYearPrintf(); int sumDays = 0; //出勤天数 double duration = 0; //总时长 double deductDuration = 0; //总扣除时长 if (drs != null && drs.Count > 0) { monthYearPrintf.date = drs[0]["workdate"].ToString(); string workdate = "0000-00-01"; Dictionary <string, double> timeDic = new Dictionary <string, double>(); for (int i = 0; i < drs.Count; i++) { string timeStart = drs[i]["starttime"].ToString(); string timeEnd = drs[i]["endtime"].ToString(); if (!string.IsNullOrEmpty(timeStart) && !string.IsNullOrEmpty(timeEnd)) { DateTime dtStart = DateTime.Now; //开始时间 DateTime dtEnd = DateTime.Now; //结束时间 if (DateTime.TryParse(timeStart, out dtStart) && DateTime.TryParse(timeEnd, out dtEnd)) { double time = GetTimeDuration(dtStart, dtEnd); #region if (drs[i]["workdate"].ToString() == workdate) { timeDic[workdate] += time; } else { sumDays++; workdate = drs[i]["workdate"].ToString(); timeDic.Add(workdate, time); } #endregion duration += time; string deductTime = drs[i]["deduct"].ToString(); if (!string.IsNullOrEmpty(deductTime)) { timeDic[workdate] -= double.Parse(deductTime); deductDuration += double.Parse(deductTime); } } } } string valueLow = timeDic.OrderBy(d => d.Value).Select(d => d.Key).FirstOrDefault(); string valueHeight = timeDic.OrderBy(d => d.Value).Select(d => d.Key).LastOrDefault(); monthYearPrintf.dateSum = sumDays.ToString(); monthYearPrintf.durationLow = valueLow + ": " + timeDic[valueLow].ToString("0.000") + "h"; monthYearPrintf.durationHeight = valueHeight + ": " + timeDic[valueHeight].ToString("0.000") + "h"; monthYearPrintf.duration = duration.ToString("0.000"); monthYearPrintf.deductDuration = deductDuration.ToString("0.000"); monthYearPrintf.accumulativeTotalDuration = (duration - deductDuration).ToString("0.000"); monthYearPrintf.avgDuration = ((duration - deductDuration) / sumDays).ToString("0.000"); } return(monthYearPrintf); } catch (Exception) { return(null); } }