You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计员工月度工作总时长并生成月末汇总报告?

员工月度工作总时长统计与月末汇总实现方案

需求:统计员工月度工作总时长,并在月末获取该汇总数据。

基于你提供的迟到详情查询代码,以下是实现月度工作时长汇总的方案:

步骤说明

  1. 定义汇总数据DTO,用于存储员工月度工作时长信息
  2. 编写异步查询方法,筛选指定月度的考勤记录,按员工分组计算总时长
  3. 处理空值与异常情况,确保数据准确性

实现代码

首先定义汇总DTO:

public class MonthlyWorkHoursSummary
{
    public string EmployeeId { get; set; }
    public string EmployeeName { get; set; }
    public decimal TotalWorkHours { get; set; } // 总工作时长(小时)
}

然后编写查询方法:

public async Task<IEnumerable<MonthlyWorkHoursSummary>> GetMonthlyWorkHoursSummary(DateTime periodFrom, DateTime periodTo, ApiToken token)
{
    try
    {
        return await _DBContext.PayrollHrpayrollAttDetail
            // 筛选当前公司、部门的考勤记录
            .Where(x => x.CompanyId == token.CompanyId 
                        && x.DivisionId == token.DivisionId 
                        && x.DepartmentId == token.DepartmentId)
            // 筛选指定月度内的记录
            .Where(x => x.SystemDate >= periodFrom && x.SystemDate <= periodTo)
            // 过滤有效考勤(TimeIn和TimeOut都不为空)
            .Where(x => x.TimeIn.HasValue && x.TimeOut.HasValue)
            // 按员工分组计算总时长
            .GroupBy(x => new { x.EmployeeId, x.EmployeeName })
            .Select(g => new MonthlyWorkHoursSummary
            {
                EmployeeId = g.Key.EmployeeId,
                EmployeeName = g.Key.EmployeeName,
                // 计算总工作时长(转换为小时,保留两位小数)
                TotalWorkHours = (decimal)g.Sum(x => (x.TimeOut.Value - x.TimeIn.Value).TotalHours)
            })
            .ToListAsync();
    }
    catch (Exception ex)
    {
        // 可添加日志记录逻辑,便于排查问题
        return Enumerable.Empty<MonthlyWorkHoursSummary>();
    }
}

关键注意点

  • 避免冗余转换:参考代码中DateTime.Parse(x.TimeIn.Value.ToString())属于无效操作,直接使用x.TimeIn.Value即可完成时间差计算
  • 空值过滤:必须排除TimeIn或TimeOut为空的记录,防止空引用异常
  • 时间范围校验:periodFrom和periodTo需传入月度的准确起止日期(如当月1号至当月最后一天)
  • 异常处理:建议在catch块中加入日志记录,方便后续问题定位

内容的提问来源于stack exchange,提问作者Lawal Opeyemi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:41:56