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

如何使用DataWeave 2.0按数组指定列分组汇总数据并统计时间周期

考勤数据统计解决方案

处理逻辑

  • 遍历所有考勤日志,按项目名累加总分钟数
  • 收集所有考勤日期和员工邮箱信息
  • 将累加的分钟数除以60转换为小时
  • 对所有考勤日期做大小比较,提取最早日期和最晚日期作为时间区间
  • 按要求拼接生成timesheetName字段,整合输出最终结果

JavaScript 实现代码

function processAttendanceData(input) {
  const { timeLogs } = input;
  const result = {};
  const dates = [];
  let emailId = '';

  timeLogs.forEach(log => {
    // 统计项目工时
    const project = log.projectName;
    const mins = log.hoursInMins;
    result[project] = (result[project] || 0) + mins;
    // 收集日期和邮箱
    dates.push(log.workDate);
    if (!emailId) emailId = log.emailId;
  });

  // 分钟转小时
  Object.keys(result).forEach(key => {
    result[key] = result[key] / 60;
  });

  // 处理日期区间,适配MM-DD-YYYY格式的日期排序
  const sortedDates = dates.sort((a, b) => {
    const [m1, d1, y1] = a.split('-').map(Number);
    const [m2, d2, y2] = b.split('-').map(Number);
    return new Date(y1, m1 - 1, d1) - new Date(y2, m2 - 1, d2);
  });
  const fromDate = sortedDates[0];
  const toDate = sortedDates.at(-1);

  // 补充其余字段
  result.emailId = emailId;
  result.fromDate = fromDate;
  result.toDate = toDate;
  result.timesheetName = `(${fromDate} - ${toDate})`;

  return result;
}

Python 实现代码

from datetime import datetime

def process_attendance_data(input_data):
    time_logs = input_data['timeLogs']
    result = {}
    dates = []
    email_id = None

    for log in time_logs:
        # 统计项目工时
        project = log['projectName']
        mins = log['hoursInMins']
        result[project] = result.get(project, 0) + mins
        # 收集日期和邮箱
        dates.append(log['workDate'])
        if not email_id:
            email_id = log['emailId']
    
    # 分钟转小时
    for k in result:
        result[k] = result[k] // 60

    # 处理日期区间
    date_objs = [datetime.strptime(d, '%m-%d-%Y') for d in dates]
    from_date = min(date_objs).strftime('%m-%d-%Y')
    to_date = max(date_objs).strftime('%m-%d-%Y')

    # 补充输出字段
    result['emailId'] = email_id
    result['fromDate'] = from_date
    result['toDate'] = to_date
    result['timesheetName'] = f'({from_date} - {to_date})'

    return result

将你的输入JSON作为参数传入上述函数,即可得到和示例完全一致的输出结果。代码已经适配跨月、跨年的日期排序场景,不会出现字符串直接排序的逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:33:00