28 KiB
考勤报表导出参考 (attendance-report)
本文档由
attendance.md路由调用。当用户提到"考勤报表"、"导出考勤"、"出勤汇总"、"考勤明细"、"迟到早退统计"、"全员考勤数据"、"某月考勤统计"、"考勤表格"、"考勤 Excel" 时,应阅读本文档执行。 不适用于:个人单日打卡查询(用attendance check record)、班次查询(用attendance schedule get)、假期余额(用vacation balance)、审批进度(用oa)。
强制门禁(必须先读完本文档才能执行)
任何调用 attendance_report_detail.py / attendance_report_monthly.py / attendance_report_daily.py 的请求,都必须经过本文档定义的工作流,严禁绕过本文档直接拼脚本命令执行。
违反将出现以下任一问题:
- 未按"阶段 1"做人员解析 →
--users传入部门 ID 而非员工 userId,脚本虽内置回退但会浪费一次失败的接口调用 - 未按"阶段 0"判断报表类型 → 用户说"汇总"被理解成"明细",导致输出粒度错误
- 未按"列选择"判断是否传
--column-keywords→ 用户要"迟到情况报表"被输出成全字段默认报表 - 未按"错误处理"规则处理 403 /
HSF_ILLEGALPARAMS→ 把环境错误当成业务错误反馈给用户 - 未按"阶段 4"返回结果 → 把 Excel 内容贴在对话里,或者裸 userId 直接输出
执行前自检(必须能在心中回答):
- 报表类型是?(明细 / 月度汇总 / 每日统计)
- 人员列表的来源是?(
aisearch person还是contact dept list-members?) - 列选择方式是?(预设报表关键词 / 自定义
--column-keywords/ 默认列集合) - 报错时如何向用户解释?
如果上述任何一项答不出,回到本文档对应章节重新阅读,禁止凭记忆/想象组装命令。
前提:当前用户必须是钉钉管理员,否则 report 系列接口返回 403 权限错误。
核心原则
Agent 解析用户意图(报表类型、人员范围、时间范围、关注维度),获取 userId 列表后,直接调用对应的 Python 脚本 CLI 生成 Excel。
- 脚本自包含:数据查询(分批、分段、翻页)、字段解析、聚合计算、Excel 生成全部由脚本内部完成,Agent 不参与数据查询和计算
- 月度汇总 / 每日统计:脚本内部调用
report columns+report query-data - 明细:脚本内部调用
check result+check record(数据源不同) - 列选择是独立维度:用户未指定关注维度时脚本使用内置默认字段;用户指定了关注维度时 Agent 通过
--column-keywords参数传给脚本
严格禁止 (NEVER DO)
- 禁止凭历史记忆复用 userId 等任何 ID,必须从当次命令返回值中提取
- 禁止用大模型口算/目测做考勤数据聚合(求和、计数、分组),必须通过 Python 脚本完成
- 禁止 Agent 直接调用
report query-data/report columns/check result/check record,这些由脚本内部自动完成 - 禁止
dws命令缺省--format json(Agent 仅在阶段 1 获取人员时直接调用 dws 命令) - 禁止编造任何字段值或用户姓名
- 禁止直接输出裸 userId,脚本已内置 userId → 姓名转换
严格要求 (MUST DO)
- 所有
dws命令必须携带--format json - 时间参数
--start/--end格式必须为yyyy-MM-dd HH:mm:ss - 字段 ID 与字段名的映射必须从
report columns实时建立,禁止硬编码 - 任何接口失败(含 403)必须向用户清晰报错,禁止静默吞掉
涉及工具
| 工具 | 用途 | 安全等级 |
|---|---|---|
dws attendance report columns |
获取当前管理员可见的考勤字段清单(字段 ID → 字段名) | 只读 |
dws attendance report query-data |
按字段查询考勤数据(≤20 人/次,≤32 天/次) | 只读 |
dws attendance report query-leave |
按假期名称查询假期数据(≤20 人/次,≤32 天/次),月度汇总/每日统计的"请假"列由脚本自动调用 | 只读 |
dws attendance approve list |
查询审批单记录(考勤记录报表专用),支持类型:leave/trip/out/patch | 只读 |
dws oa approval detail |
获取审批单详情(考勤记录报表专用),解析 formValueVOS / extValue | 只读 |
dws attendance check result |
查询打卡结果(≤100 人/次,≤1 月,明细报表专用) | 只读 |
dws attendance check record |
查询打卡流水(≤1 月,明细报表专用) | 只读 |
dws aisearch person |
按姓名搜索用户获取 userId(搜人首选) | 只读 |
dws contact user get |
批量查询 userId → 用户信息(姓名/部门/工号/职位) | 只读 |
dws contact dept search |
搜索部门获取 deptId | 只读 |
dws contact dept list-members |
获取部门成员 userId 列表 | 只读 |
意图判断
报表类型(五选一)
| 用户说 | 报表类型 | 映射脚本 |
|---|---|---|
| "导出研发部 3 月份的考勤明细" / "每条打卡记录" / "明细" / "原始记录" | 明细 | attendance_report_detail.py |
| "生成研发部 3 月考勤汇总" / 用户明确说"月度汇总" / 用户未指明类型 | 月度汇总(默认) | attendance_report_monthly.py |
| "导出研发部 3 月每天的出勤情况" / "按天统计" / "每日" / 用户明确说"每日统计" | 每日统计 | attendance_report_daily.py |
| "导出研发部 4 月的请假记录" / "补卡记录" / "出差记录" / "外出记录" / "xx记录" | 考勤记录 | attendance_report_record.py |
| "导出签到记录" / "签到报表" / "签到数据导出" / "签到明细" / "外勤签到" | 签到报表 | attendance_report_checkin.py |
默认报表类型:用户未指明报表类型时,默认走月度汇总,事后告知"已按月度汇总输出,如需明细/每日统计/考勤记录请告知"。
考勤记录 vs 其他报表:当用户明确提到"请假记录"/"补卡记录"/"出差记录"/"外出记录"时,走考勤记录报表(数据源为审批单)。而"请假报表"/"出差时长统计"等走月度汇总(数据源为 report query-data)。区别在于:考勤记录导出的是审批单维度的原始数据(含审批单状态、每天明细),月度汇总导出的是按人按月聚合后的统计数据。
列选择(独立维度,与报表类型正交)
"报表类型"与"列选择"是两个独立维度,需分别判断。 例如用户说"帮我出一份加班报表":报表类型未指明 → 默认月度汇总;列选择命中"加班报表" → 使用加班预设关键词。 例如用户说"帮我出每日的异常报表":报表类型命中"每日" → 每日统计脚本;列选择命中"异常报表" → 使用异常预设关键词。 预设报表不会改变报表类型的判断逻辑,报表类型始终按下方「报表类型(三选一)」规则判断。
| 用户说 | 列选择方式 |
|---|---|
| "帮我出一份考勤报表" / "导出考勤" / 未提及特定关注维度 | 不传 --column-keywords,使用脚本内置默认列集合 |
| "加班报表" / "加班统计" / "加班时长报表" | 传 --column-keywords,使用下方「加班报表预设关键词」 |
| "请假报表" / "请假出差报表" / "请假外出统计" | 传 --column-keywords,使用下方「请假报表预设关键词」 |
| "异常报表" / "异常考勤" / "迟到早退报表" / "缺卡报表" | 传 --column-keywords,使用下方「异常报表预设关键词」 |
| 提及了其他自定义关注维度(如"工作时长报表") | 传 --column-keywords,由 Agent 自行拼接关键词 |
预设报表优先级:当用户提到的关键词同时命中"预设报表"和一般自定义维度时,优先使用预设报表的完整关键词列表,确保列不遗漏。
易混淆场景
| 用户说 | 应路由到 |
|---|---|
| "今天打卡了吗" | dws attendance record get(单次查询,非报表) |
| "帮我排班" | dws attendance schedule import(导入排班,非报表;先确认考勤组、人员、日期、班次和休息日) |
| "我的假期还剩多少" | dws attendance vacation balance(单次查询) |
| "帮我请假" | dws oa(审批流程,非报表) |
| "我这个月的考勤怎么样" | dws attendance summary(个人统计,非报表) |
工作流
阶段 0: 参数解析与确认查询范围
- 解析用户输入(两个独立维度):
- 报表类型(四选一):明细 / 月度汇总(默认) / 每日统计 / 考勤记录
- 列选择(独立维度):预定义列集合(默认) / 用户指定维度筛选(考勤记录不适用)
- 人员维度:指定员工 / 某个部门 / 多个部门(暂不支持全公司查询)
- 时间维度:本周 / 本月 / 自定义时间段
- 记录子类型(仅考勤记录):leave(请假) / trip(出差) / out(外出) / patch(补卡)
- 缺失信息处理:
- 报表类型 缺失 → 默认走月度汇总(不追问),事后告知
- 列选择:用户提及了特定关注维度 → 传
--column-keywords;未提及 → 使用脚本内置默认字段集 - 用户范围 / 时间范围 缺失 → 追问,禁止猜测
阶段 1: 获取完整人员列表
场景 A — 指定员工姓名:
dws aisearch person --query "<员工姓名>" --dimension name --format json
场景 B — 按部门查询:
dws contact dept search --query "<部门名>" --format json
dws contact dept list-members --ids <deptId> --format json
场景 C — 多个部门: 对每个部门分别执行 B,汇总去重。
场景 D — 全公司: 暂不支持,引导用户指定部门。
场景 E — 用户已给 userId 列表: 直接跳过本步。
阶段 2: 列选择(决定脚本参数)
Agent 不需要手动调用
report columns,字段获取由脚本内部完成。Agent 只需根据用户意图决定是否传--column-keywords参数。
判断顺序(优先级从高到低):
- 明细报表 → 列固定,不支持
--column-keywords - 用户提到预设报表关键词 → 传
--column-keywords,使用本文档「预设报表列集合」中定义的完整关键词列表:- "加班报表" / "加班统计" / "加班时长" → 使用「加班报表预设关键词」
- "请假报表" / "请假出差" / "外出统计" → 使用「请假报表预设关键词」
- "异常报表" / "迟到早退" / "缺卡报表" / "异常考勤" → 使用「异常报表预设关键词」
- 用户提及了其他自定义关注维度 → 传
--column-keywords "..." - 用户未提及特定关注维度 → 不传
--column-keywords,脚本使用内置默认字段集
阶段 3: 调用脚本生成 Excel
月度汇总 / 每日统计
python scripts/attendance_report_monthly.py \
--users <userId1>,<userId2>,... \
--start "<yyyy-MM-dd>" \
--end "<yyyy-MM-dd>" \
[--column-keywords "出勤天数,迟到次数,迟到时长,..."] \
[--out 月度汇总_研发部_202604.xlsx]
参数说明:
--users(必填):逗号分隔的 userId 列表--start(必填):开始日期,支持YYYY-MM-DD或YYYY-MM-DD HH:mm:ss--end(必填):结束日期,同上--column-keywords(可选):逗号分隔的字段名关键词。不传则使用脚本内置默认字段集。预设报表(加班/请假/异常)也通过本参数传入对应的预设关键词列表--out(可选):输出文件名,不传则自动生成
脚本内部自动处理:report columns 获取字段清单 → 按预设/关键词匹配 → report query-data 分批分段查询 → contact user get 姓名映射 → 聚合计算 → 生成 Excel
明细
python scripts/attendance_report_detail.py \
--users <userId1>,<userId2>,... \
--start "<yyyy-MM-dd>" \
--end "<yyyy-MM-dd>" \
[--out 考勤明细_研发部_202604.xlsx]
- 没有
--column-keywords,明细列固定 - 数据来源不同:
check result+check record(非report query-data) - 分批限制:≤100 人/次(而非 20 人)
考勤记录
python scripts/attendance_report_record.py \
--type <leave|trip|out|patch> \
--users <userId1>,<userId2>,... \
--start "<yyyy-MM-dd>" \
--end "<yyyy-MM-dd>" \
[--out 请假记录_研发部_202604.xlsx]
参数说明:
--type(必填):记录类型,支持leave(请假) /trip(出差) /out(外出) /patch(补卡)--users(必填):逗号分隔的 userId 列表--start(必填):开始日期YYYY-MM-DD--end(必填):结束日期YYYY-MM-DD--out(可选):输出文件名,不传则自动生成- 没有
--column-keywords,列由--type决定
脚本内部自动处理:attendance approve list 获取审批摘要 → oa approval detail 获取详情 → 解析 DDHolidayField / extValue → 按天拆行 → contact user get 姓名映射 → 生成 Excel
记录类型选择规则(Agent 需从用户意图中判断):
| 用户说 | --type 值 |
|---|---|
| "请假记录" / "年假记录" / "调休记录" / "病假记录" | leave |
| "出差记录" | trip |
| "外出记录" | out |
| "补卡记录" | patch |
签到报表
python scripts/attendance_report_checkin.py \
--users <userId1>,<userId2>,... \
--start "<yyyy-MM-dd>" \
--end "<yyyy-MM-dd>" \
[--out 签到报表_研发部_20260401_20260407.xlsx]
参数说明:
--users(必填):逗号分隔的 userId 列表--start(必填):开始日期YYYY-MM-DD或YYYY-MM-DD HH:mm:ss--end(必填):结束日期,同上--out(可选):输出文件名,不传则自动生成- 没有
--column-keywords,签到报表列固定
脚本内部自动处理:attendance checkin records 分批分段查询(每批 50 人,每段 7 天)→ contact user get 姓名/部门映射 → 时间戳转日期+时间 → 图片列展开(最多 9 张)→ 生成 Excel
注意:签到接口时间限制为 7 天(不同于考勤报表的 32 天),脚本会自动按 7 天分段查询。
脚本执行注意事项
- 脚本依赖
openpyxl,若未安装需先pip install openpyxl - 脚本摘要输出到 stdout,进度日志输出到 stderr
- 首次调试可加
--inspect参数查看首条记录原始结构 - 脚本执行失败(exit ≠ 0)时,stderr 中有具体错误信息
阶段 4: 返回结果给用户
- 将脚本 stdout 输出的摘要信息原样转告用户
- 如果脚本输出 warning,原样转告用户
- 如果走的是默认月度汇总,追加:"已按月度汇总输出,如需明细/每日统计请告知"
- 不要把 Excel 内容贴在对话里,只给路径和摘要
输出文件结构
月度汇总(双 sheet,自动生成)
attendance_report_monthly.py 输出的 Excel 文件包含 2 个 sheet:
| Sheet 名 | 布局 | 用途 |
|---|---|---|
月度汇总 |
每人 1 行,列为基础信息 + 聚合字段 + 请假展开 + 考勤结果按天展开 | 整月数据汇总速览 |
日历表 |
每人 3 行(班次名称/考勤结果/工作时长),列为基础信息 + 指标 + 1日~N日 | 钉钉日历视图,逐日查看 |
日历表结构示意:
| 姓名 | 考勤组 | 部门 | 指标 | 1日 | 2日 | ... | 30日 |
|---|---|---|---|---|---|---|---|
| 张三 | 研发组 | 技术部 | 班次名称 | 早班 | 早班 | ... | 休息 |
| 考勤结果 | 正常 | 迟到 | ... | — | |||
| 工作时长 | 8 | 7.5 | ... | 0 | |||
| 李四 | 研发组 | 技术部 | 班次名称 | 晚班 | 晚班 | ... | 早班 |
| ... | ... | ... | ... | ... | ... | ... | ... |
- 基础列(姓名/考勤组/部门)已纵向 3 行合并
- 日历表的 3 个指标字段(
班次名称/考勤结果/工作时长)由脚本强制追加到report query-data查询字段中(即使用户的--column-keywords没包含),确保日历表非空 - 日历表数据来源与月度汇总相同(同一次
report query-data调用),不会增加接口次数
预定义列集合
月度汇总(3 个基础信息列 + 18 个考勤数据列)
基础信息列(脚本自动从 contact user get 和原始记录中提取):
| 序号 | 字段名称 | 数据来源 |
|---|---|---|
| 1 | 姓名 | contact user get --ids |
| 2 | 考勤组 | attendance group search + filtered-get --member 反向映射 |
| 3 | 部门 | contact user get --ids |
考勤数据列(从 report columns 中按名称精确匹配):
| 序号 | 字段名称 |
|---|---|
| 4 | 出勤天数 |
| 5 | 休息天数 |
| 6 | 工作时长 |
| 7 | 迟到次数 |
| 8 | 迟到时长 |
| 9 | 严重迟到次数 |
| 10 | 严重迟到时长 |
| 11 | 旷工迟到次数 |
| 12 | 早退次数 |
| 13 | 早退时长 |
| 14 | 上班缺卡次数 |
| 15 | 下班缺卡次数 |
| 16 | 旷工天数 |
| 17 | 出差时长 |
| 18 | 外出时长 |
| 19 | 请假(按假期类型展开为 4 列:请假-事假、请假-调休、请假-病假、请假-年假,值为月度求和;数据由脚本通过 report query-leave 单独查询) |
| 20 | 加班-审批单统计 |
| 21 | 考勤结果(按天展开为多列:1日/2日/.../31日,每列显示当天考勤状态) |
每日统计(4 个基础信息列 + 31 个考勤数据列)
基础信息列:
| 序号 | 字段名称 | 数据来源 |
|---|---|---|
| 1 | 姓名 | contact user get --ids |
| 2 | 考勤组 | attendance group search + filtered-get --member 反向映射 |
| 3 | 部门 | contact user get --ids |
| 4 | 日期 | 查询日期 |
考勤数据列:
| 序号 | 字段名称 |
|---|---|
| 5 | 班次 |
| 6 | 上班1打卡时间 |
| 7 | 上班1打卡结果 |
| 8 | 下班1打卡时间 |
| 9 | 下班1打卡结果 |
| 10 | 上班2打卡时间 |
| 11 | 上班2打卡结果 |
| 12 | 下班2打卡时间 |
| 13 | 下班2打卡结果 |
| 14 | 上班3打卡时间 |
| 15 | 上班3打卡结果 |
| 16 | 下班3打卡时间 |
| 17 | 下班3打卡结果 |
| 18 | 关联的审批单 |
| 19 | 出勤天数 |
| 20 | 休息天数 |
| 21 | 工作时长 |
| 22 | 迟到次数 |
| 23 | 迟到时长 |
| 24 | 严重迟到次数 |
| 25 | 严重迟到时长 |
| 26 | 旷工迟到次数 |
| 27 | 早退次数 |
| 28 | 早退时长 |
| 29 | 上班缺卡次数 |
| 30 | 下班缺卡次数 |
| 31 | 旷工天数 |
| 32 | 出差时长 |
| 33 | 外出时长 |
| 34 | 请假(按假期类型展开为 4 列:请假-事假、请假-调休、请假-病假、请假-年假;数据由脚本通过 report query-leave 单独查询) |
| 35 | 加班-审批单统计 |
预设报表:加班报表
3 个基础信息列(姓名/考勤组/部门)+ 以下考勤数据列:
原始配置中的 TITLE_COLUMN(如"加班时长(转调休)")为分组标题,脚本不支持父子列结构,已打平为叶子字段。
| 序号 | 字段名称 | 说明 |
|---|---|---|
| 4 | 加班-审批单统计 | — |
| 5 | 加班总时长 | — |
| 6 | 考勤结果 | 按天展开 |
对应 --column-keywords:加班-审批单统计,加班总时长,考勤结果
预设报表:请假报表
3 个基础信息列(姓名/考勤组/部门)+ 以下考勤数据列:
| 序号 | 字段名称 | 说明 |
|---|---|---|
| 4 | 请假 | 按假期类型自动展开(事假/调休/病假/年假等),数据由脚本通过 report query-leave 单独查询 |
| 5 | 出差时长 | — |
| 6 | 外出时长 | — |
| 7 | 考勤结果 | 按天展开 |
对应 --column-keywords:请假,出差时长,外出时长,考勤结果
预设报表:异常报表
3 个基础信息列(姓名/考勤组/部门)+ 以下考勤数据列:
原始配置中的 TITLE_COLUMN(如"迟到"、"早退"、"缺卡")为分组标题,脚本不支持父子列结构,已打平为叶子字段。
| 序号 | 字段名称 | 说明 |
|---|---|---|
| 4 | 迟到次数 | 原属分组「迟到」 |
| 5 | 迟到时长 | 同上 |
| 6 | 严重迟到次数 | 同上 |
| 7 | 严重迟到时长 | 同上 |
| 8 | 旷工迟到次数 | 同上 |
| 9 | 早退次数 | 原属分组「早退」 |
| 10 | 早退时长 | 同上 |
| 11 | 上班缺卡次数 | 原属分组「缺卡」 |
| 12 | 下班缺卡次数 | 同上 |
| 13 | 旷工天数 | — |
| 14 | 考勤结果 | 按天展开 |
对应 --column-keywords:迟到次数,迟到时长,严重迟到次数,严重迟到时长,旷工迟到次数,早退次数,早退时长,上班缺卡次数,下班缺卡次数,旷工天数,考勤结果
明细(3 个基础信息列 + 10 个打卡字段列)
基础信息列:
| 序号 | 字段名称 | 数据来源 |
|---|---|---|
| 1 | 姓名 | contact user get --ids |
| 2 | 考勤组 | attendance group search + filtered-get --member 反向映射 |
| 3 | 部门 | contact user get --ids |
打卡字段列(以打卡流水为主表,每条流水一行;通过打卡时间关联 check result 获取考勤时间和打卡结果):
| 序号 | 字段名称 | 数据来源 |
|---|---|---|
| 4 | 考勤日期 | check record |
| 5 | 考勤时间 | check result(班次规定的上/下班时间,按打卡时间关联) |
| 6 | 打卡时间 | check record(实际打卡时间) |
| 7 | 打卡结果 | check result(正常/迟到/早退/缺卡等,按打卡时间关联) |
| 8 | 打卡地址 | check record |
| 9 | 打卡备注 | check record |
| 10 | 异常打卡原因 | check record |
| 11 | 打卡图片 | check record |
| 12 | 打卡设备 | check record |
| 13 | 管理员修改备注 | check record |
签到报表(3 个基础信息列 + 11 个签到字段列 + 9 个图片列)
基础信息列:
| 序号 | 字段名称 | 数据来源 |
|---|---|---|
| 1 | 姓名 | contact user get --ids |
| 2 | 部门 | contact user get --ids |
| 3 | 完整部门 | contact user get --ids |
签到字段列(每条签到记录一行,数据来源均为 attendance checkin records):
| 序号 | 字段名称 | 数据来源 |
|---|---|---|
| 4 | 签到来源 | checkinType |
| 5 | 日期 | timestamp(毫秒时间戳转日期) |
| 6 | 时间 | timestamp(毫秒时间戳转时间) |
| 7 | 经度 | longitude |
| 8 | 纬度 | latitude |
| 9 | 地点 | place |
| 10 | 详细地址 | detailPlace |
| 11 | 拜访客户 | customers |
| 12 | 客户部门名称 | 预留(签到接口暂无此字段) |
| 13 | 工作内容 | remark |
| 14 | 手机标识 | mobileId |
图片列(从 imageList 数组展开,最多 9 列):
| 序号 | 字段名称 |
|---|---|
| 15 | 图片1 |
| 16 | 图片2 |
| ... | ... |
| 23 | 图片9 |
分批查询规则(脚本内部自动处理)
| 维度 | 限制 | 脚本自动处理方式 |
|---|---|---|
| 人数超限(月度/每日) | query-data 最多 20 人/次 |
自动按 5 人一批分批 |
| 人数超限(明细) | check result 最多 100 人/次 |
自动按 100 人一批分批 |
| 人数超限(签到) | checkin records 最多 100 人/次 |
自动按 50 人一批分批 |
| 时间超限(月度/每日) | --start 到 --end 不超过 32 天 |
自动按月分段 |
| 时间超限(明细) | --start 到 --end 不超过 1 个月 |
自动按月分段 |
| 时间超限(签到) | --start 到 --end 不超过 7 天 |
自动按 7 天分段 |
| 分页(明细打卡结果) | check result 单次最多 1000 条 |
自动翻页 |
错误处理
| 错误 | 原因 | 处理方式 |
|---|---|---|
| 权限错误(403) | 当前账号非管理员 | 提示需要管理员权限,不要重试 |
| userId 无效 | 用户 ID 错误或已离职 | 脚本跳过并在摘要中标注 |
| 时间区间超长 | 接口可能性能不佳 | 提示"超过 1 年的数据建议分阶段导出" |
| openpyxl 未安装 | 环境缺包 | 输出 pip install openpyxl 安装提示 |
| 脚本执行失败 | 接口异常/配置问题 | 将 stderr 错误信息转告用户,可加 --inspect 重试 |
使用示例
示例 1: 团队月度汇总(默认)
用户说: "帮我生成研发组 4 月的考勤报表"
# 1. 获取部门成员
dws contact dept search --query "研发组" --format json
dws contact dept list-members --ids <deptId> --format json
# 2. 调用脚本(默认月度汇总,不传 --column-keywords)
python scripts/attendance_report_monthly.py \
--users userId1,userId2,... \
--start "2026-04-01" --end "2026-04-30"
示例 2: 加班报表(预设)
用户说: "帮我出一份研发组 4 月的加班报表"
python scripts/attendance_report_monthly.py \
--users userId1,userId2,... \
--start "2026-04-01" --end "2026-04-30" \
--column-keywords "加班-审批单统计,加班总时长,考勤结果"
示例 3: 请假报表(预设)
用户说: "帮我导出研发组 4 月的请假出差情况"
python scripts/attendance_report_monthly.py \
--users userId1,userId2,... \
--start "2026-04-01" --end "2026-04-30" \
--column-keywords "请假,出差时长,外出时长,考勤结果"
示例 4: 异常报表(预设)
用户说: "帮我出研发组 4 月的异常考勤报表"
python scripts/attendance_report_monthly.py \
--users userId1,userId2,... \
--start "2026-04-01" --end "2026-04-30" \
--column-keywords "迟到次数,迟到时长,严重迟到次数,严重迟到时长,旷工迟到次数,早退次数,早退时长,上班缺卡次数,下班缺卡次数,旷工天数,考勤结果"
示例 5: 自定义维度筛选
用户说: "帮我出一份研发组 4 月的工作时长报表"
python scripts/attendance_report_monthly.py \
--users userId1,userId2,... \
--start "2026-04-01" --end "2026-04-30" \
--column-keywords "工作时长"
示例 6: 每日统计
用户说: "帮我出一份研发组 4 月每天的出勤情况"
python scripts/attendance_report_daily.py \
--users userId1,userId2,... \
--start "2026-04-01" --end "2026-04-30"
示例 7: 明细报表
用户说: "帮我导出研发组 4 月的考勤明细"
python scripts/attendance_report_detail.py \
--users userId1,userId2,... \
--start "2026-04-01" --end "2026-04-30"
示例 8: 请假记录
用户说: "帮我导出研发组 4 月的请假记录"
python scripts/attendance_report_record.py \
--type leave \
--users userId1,userId2,... \
--start "2026-04-01" --end "2026-04-30"
示例 9: 出差记录
用户说: "帮我导出研发组 4 月的出差记录"
python scripts/attendance_report_record.py \
--type trip \
--users userId1,userId2,... \
--start "2026-04-01" --end "2026-04-30"
示例 10: 补卡记录
用户说: "帮我导出研发组 5 月的补卡记录"
python scripts/attendance_report_record.py \
--type patch \
--users userId1,userId2,... \
--start "2026-05-01" --end "2026-05-31"
示例 11: 签到报表
用户说: "帮我导出研发组上周的签到记录"
python scripts/attendance_report_checkin.py \
--users userId1,userId2,... \
--start "2026-05-26" --end "2026-06-01"
配套脚本
| 脚本 | 报表类型 | 数据来源 | CLI 参数 |
|---|---|---|---|
| attendance_report_detail.py | 明细 | check result + check record |
--users --start --end [--out] |
| attendance_report_monthly.py | 月度汇总(默认) | report columns + report query-data |
--users --start --end [--column-keywords] [--out] |
| attendance_report_daily.py | 每日统计 | report columns + report query-data |
--users --start --end [--column-keywords] [--out] |
| attendance_report_record.py | 考勤记录 | attendance approve list + oa approval detail |
--type --users --start --end [--out] |
| attendance_report_checkin.py | 签到报表 | attendance checkin records |
--users --start --end [--out] |
| attendance_report_common.py | 公共模块(不可单独执行) | — | — |